From d925fec378f6c7bfe466994f0ad138f29d8c08c8 Mon Sep 17 00:00:00 2001 From: Michael Ziegler Date: Fri, 18 Dec 2009 21:03:40 +0100 Subject: [PATCH] transform mmObjects to use Murmur's data more directly, and change the templates accordingly --- pyweb/mumble/mmobjects.py | 128 ++++++++++--------------------------- pyweb/mumble/models.py | 4 +- template/mumble/mumble.htm | 16 ++--- template/mumble/player.htm | 8 +-- 4 files changed, 47 insertions(+), 109 deletions(-) diff --git a/pyweb/mumble/mmobjects.py b/pyweb/mumble/mmobjects.py index f91c62d..a70b502 100644 --- a/pyweb/mumble/mmobjects.py +++ b/pyweb/mumble/mmobjects.py @@ -30,45 +30,26 @@ def cmp_names( a, b ): class mmChannel( object ): """Represents a channel in Murmur.""" - # channels = list(); - # subchans = list(); - # chanid = int(); - # name = str(); - # parent = mmChannel(); - # linked = list(); - # linkedIDs = list(); - def __init__( self, server, channelObj, parentChan = None ): self.server = server; self.players = list(); self.subchans = list(); self.linked = list(); - self.chanid = channelObj.id; - self.name = channelObj.name; - parent = channelObj.parent; - self.linkedIDs = channelObj.links; - - if hasattr( channelObj, "description" ): - self.description = channelObj.description; - else: - self.description = ""; - - if hasattr( channelObj, "temporary" ): - self.temporary = channelObj.temporary; - else: - self.temporary = False; - - if hasattr( channelObj, "position" ): - self.position = channelObj.position; - else: - # None would be better imho, but Murmur reports 0 for unknown too. - self.position = 0; + self.channelObj = channelObj; + self.chanid = channelObj.id; + self.linkedIDs = channelObj.links; self.parent = parentChan; if self.parent is not None: self.parent.subchans.append( self ); + # Lookup unknown attributes in self.channelObj to automatically include Murmur's fields + def __getattr__( self, key ): + if hasattr( self.channelObj, key ): + return getattr( self.channelObj, key ); + else: + raise AttributeError( "'%s' object has no attribute '%s'" % ( self.__class__.__name__, key ) ); def parentChannels( self ): """Return the names of this channel's parents in the channel tree.""" @@ -154,23 +135,11 @@ class mmChannel( object ): doc="True if this channel is the server's default channel." ); - def as_dict( self ): - if self.parent: - parentid = self.parent.chanid; - else: - parentid = None; - - return { 'chanid': self.chanid, - 'description': self.description, - 'temporary': self.temporary, - 'position': self.position, - 'linked': [], - 'linkedIDs': [], - 'name': self.name, - 'parent': parentid, - 'players': [ pl.as_dict() for pl in self.players ], - 'subchans': [ sc.as_dict() for sc in self.subchans ] - }; + def asDict( self ): + chandata = self.channelObj.__dict__.copy(); + chandata['players'] = [ pl.asDict() for pl in self.players ]; + chandata['subchans'] = [ sc.asDict() for sc in self.subchans ]; + return chandata; @@ -178,52 +147,34 @@ class mmChannel( object ): class mmPlayer( object ): """Represents a Player in Murmur.""" - # muted = bool; - # deafened = bool; - # suppressed = bool; - # selfmuted = bool; - # selfdeafened = bool; - - # channel = mmChannel(); - # dbaseid = int(); - # userid = int(); - # name = str(); - # onlinesince = time(); - # bytesPerSec = int(); - - # mumbleuser = models.MumbleUser(); - def __init__( self, srvInstance, playerObj, playerChan ): - self.userid = playerObj.session; - self.muted = playerObj.mute; - self.deafened = playerObj.deaf; - self.suppressed = playerObj.suppress; - self.selfmuted = playerObj.selfMute; - self.selfdeafened = playerObj.selfDeaf; - chanID = playerObj.channel; - self.dbaseid = playerObj.userid; - self.name = playerObj.name; - onlinetime = playerObj.onlinesecs; - self.bytesPerSec = playerObj.bytespersec; + self.playerObj = playerObj; - self.onlinesince = datetime.datetime.fromtimestamp( float( time() - onlinetime ) ); - self.channel = playerChan; + self.onlinesince = datetime.datetime.fromtimestamp( float( time() - playerObj.onlinesecs ) ); + self.channel = playerChan; self.channel.players.append( self ); if self.isAuthed: from models import Mumble, MumbleUser try: - self.mumbleuser = MumbleUser.objects.get( mumbleid=self.dbaseid, server=srvInstance ); + self.mumbleuser = MumbleUser.objects.get( mumbleid=self.userid, server=srvInstance ); except MumbleUser.DoesNotExist: self.mumbleuser = None; else: self.mumbleuser = None; + # Lookup unknown attributes in self.playerObj to automatically include Murmur's fields + def __getattr__( self, key ): + if hasattr( self.playerObj, key ): + return getattr( self.playerObj, key ); + else: + raise AttributeError( "'%s' object has no attribute '%s'" % ( self.__class__.__name__, key ) ); + def __str__( self ): - return '' % ( self.name, self.userid, self.dbaseid ); + return '' % ( self.name, self.session, self.userid ); isAuthed = property( - lambda self: self.dbaseid != -1, + lambda self: self.userid != -1, doc="True if this player is authenticated (+A)." ); @@ -240,7 +191,7 @@ class mmPlayer( object ): playerCount = property( lambda self: -1, doc="Exists only for compatibility to mmChannel." ); id = property( - lambda self: "player_%d"%self.userid, + lambda self: "player_%d"%self.session, doc="A string ready to be used in an id property of an HTML tag." ); @@ -248,27 +199,14 @@ class mmPlayer( object ): """ Call callback on myself. """ callback( self, lvl ); - def as_dict( self ): - comment = None; - texture = None; + def asDict( self ): + pldata = self.playerObj.__dict__.copy(); + if self.mumbleuser: - comment = self.mumbleuser.comment; if self.mumbleuser.hasTexture(): - texture = self.mumbleuser.textureUrl; + pldata['texture'] = self.mumbleuser.textureUrl; - return { 'bytesPerSec': self.bytesPerSec, - 'dbaseid': self.dbaseid, - 'deafened': self.deafened, - 'muted': self.muted, - 'name': self.name, - 'onlinesince': self.onlinesince, - 'selfdeafened': self.selfdeafened, - 'selfmuted': self.selfmuted, - 'suppressed': self.suppressed, - 'userid': self.userid, - 'comment': comment, - 'texture': texture, - }; + return pldata; diff --git a/pyweb/mumble/models.py b/pyweb/mumble/models.py index ffc5f88..c9d1cdf 100644 --- a/pyweb/mumble/models.py +++ b/pyweb/mumble/models.py @@ -366,10 +366,10 @@ class Mumble( models.Model ): version = property( lambda self: self.ctl.getVersion(), doc="The version of Murmur." ); - def as_dict( self ): + def asDict( self ): return { 'name': self.name, 'id': self.id, - 'root': self.rootchan.as_dict() + 'root': self.rootchan.asDict() }; diff --git a/template/mumble/mumble.htm b/template/mumble/mumble.htm index c03180d..9156def 100644 --- a/template/mumble/mumble.htm +++ b/template/mumble/mumble.htm @@ -29,7 +29,7 @@
{% trans "Welcome message" %} - {{ DBaseObject.motd|safe }} + {{ DBaseObject.motd|removetags:"script link meta html head body style"|safe }}
@@ -105,10 +105,10 @@
  • {% trans "Online since" %} {{ item.onlinesince|time }}
  • {% blocktrans with item.isAuthed|yesno as authed %}Authenticated: {{ authed }}{% endblocktrans %}
  • {% blocktrans with item.isAdmin|yesno as admin %}Admin: {{ admin }}{% endblocktrans %}
  • -
  • {% blocktrans with item.muted|yesno as muted %}Muted: {{ muted }}{% endblocktrans %}
  • -
  • {% blocktrans with item.deafened|yesno as deafened %}Deafened: {{ deafened }}{% endblocktrans %}
  • -
  • {% blocktrans with item.selfmuted|yesno as selfmuted %}Muted by self: {{ selfmuted }}{% endblocktrans %}
  • -
  • {% blocktrans with item.selfdeafened|yesno as selfdeafened %}Deafened by self: {{ selfdeafened }}{% endblocktrans %}
  • +
  • {% blocktrans with item.mute|yesno as muted %}Muted: {{ muted }}{% endblocktrans %}
  • +
  • {% blocktrans with item.deaf|yesno as deafened %}Deafened: {{ deafened }}{% endblocktrans %}
  • +
  • {% blocktrans with item.selfMute|yesno as selfmuted %}Muted by self: {{ selfmuted }}{% endblocktrans %}
  • +
  • {% blocktrans with item.selfDeaf|yesno as selfdeafened %}Deafened by self: {{ selfdeafened }}{% endblocktrans %}
  • {% if item.mumbleuser and item.mumbleuser.owner %}

    {% trans "User" %} {{ item.mumbleuser.owner.username|capfirst }}

    @@ -120,10 +120,10 @@
  • {% trans "Sign-up date" %}: {{ item.mumbleuser.owner.date_joined|date }}
  • {% endif %} - {% if item.mumbleuser and item.mumbleuser.comment %} + {% if item.comment %}
    {% trans "User Comment" %} - {{ item.mumbleuser.comment|safe }} + {{ item.comment|removetags:"script link meta html head body style"|safe }}
    {% endif %} {% if item.mumbleuser and item.mumbleuser.hasTexture %} @@ -143,7 +143,7 @@ {% if item.description %}
    {% trans "Channel description" %} - {{ item.description|safe }} + {{ item.description|removetags:"script link meta html head body style"|safe }}
    {% endif %}
    diff --git a/template/mumble/player.htm b/template/mumble/player.htm index 30c5f37..11e04e1 100644 --- a/template/mumble/player.htm +++ b/template/mumble/player.htm @@ -4,16 +4,16 @@ {% if Player.isAuthed %} authed {% endif %} - {% if Player.muted or Player.suppressed %} + {% if Player.mute or Player.suppress %} muted {% endif %} - {% if Player.deafened %} + {% if Player.deaf %} deafened {% endif %} - {% if Player.selfmuted %} + {% if Player.selfMute %} self-muted {% endif %} - {% if Player.selfdeafened %} + {% if Player.selfDeaf %} self-deafened {% endif %}