Source plugin now handles groups

This commit is contained in:
Stefan Hacker
2013-02-28 12:53:28 +01:00
parent 5ef6b5f6df
commit bd73f2d9d6

View File

@@ -126,6 +126,34 @@ class source(MumoModule):
def disconnected(self): pass
def removeFromGroups(self, mumble_server, session, game, server, team):
sid = mumble_server.id()
prefix = self.cfg().source.groupprefix
game_cid = self.db.cidFor(sid, game)
group = prefix + game
mumble_server.removeUserFromGroup(game_cid, session, group) # Game
group += "_" + server
mumble_server.removeUserFromGroup(game_cid, session, group) # Server
group += "_" + str(team)
mumble_server.removeUserFromGroup(game_cid, session, group) # Team
def addToGroups(self, mumble_server, session, game, server, team):
sid = mumble_server.id()
prefix = self.cfg().source.groupprefix
game_cid = self.db.cidFor(sid, game)
group = prefix + game
mumble_server.addUserToGroup(game_cid, session, group) # Game
group += "_" + server
mumble_server.addUserToGroup(game_cid, session, group) # Server
group += "_" + str(team)
mumble_server.addUserToGroup(game_cid, session, group) # Team
def userTransition(self, mumble_server, old, new):
sid = mumble_server.id()
@@ -133,33 +161,39 @@ class source(MumoModule):
relevant = old or (new and new.valid())
if not relevant:
# User that is not playing. We don't care about those.
return
user_new = not old and new
user_gone = old and (not new or not new.valid())
if not user_new:
# Nuke previous group memberships if any
#TODO: Remove group memberships
pass
if not user_gone:
#TODO: Establish new group memberships
assert(new)
if user_new:
self.dlog(sid, new.state, "User started playing: g/s/t %s/%s/%d", new.game, new.server, new.team)
self.addToGroups(mumble_server, new.session, new.game, new.server, new.team)
else:
assert(old);
self.dlog(sid, old.state, "User switched: g/s/t %s/%s/%d", new.game, new.server, new.team)
self.removeFromGroups(mumble_server, old.session, old.game, old.server, old.team)
self.addToGroups(mumble_server, new.session, new.game, new.server, new.team)
moved = self.moveUser(mumble_server, new)
else:
# User gone
assert(old)
self.users.remove(sid, old.state.session)
self.removeFromGroups(mumble_server, old.session, old.game, old.server, old.team)
moved = True
if not new:
self.dlog(sid, old.state, "User gone")
if new:
bcid = self.cfg().source.basechannelid
self.dlog(sid, old.state, "User stopped playing. Moving to %d.", bcid)
self.moveUserToCid(mumble_server, new.state, )
else:
# Move user out of our channel structure
self.moveUserToCid(mumble_server, new.state, self.cfg().source.basechannelid)
self.dlog(sid, old.state, "User stopped playing")
self.dlog(sid, old.state, "User gone")
if moved and old: