Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell/model/Owner.py
diff options
context:
space:
mode:
Diffstat (limited to 'shell/model/Owner.py')
-rw-r--r--shell/model/Owner.py174
1 files changed, 87 insertions, 87 deletions
diff --git a/shell/model/Owner.py b/shell/model/Owner.py
index 7d83ab2..49386a9 100644
--- a/shell/model/Owner.py
+++ b/shell/model/Owner.py
@@ -31,90 +31,90 @@ from model.Invites import Invites
PRESENCE_SERVICE_TYPE = "_presence_olpc._tcp"
class ShellOwner(object):
- """Class representing the owner of this machine/instance. This class
- runs in the shell and serves up the buddy icon and other stuff. It's the
- server portion of the Owner, paired with the client portion in Buddy.py."""
- def __init__(self):
- self._nick = profile.get_nick_name()
- user_dir = env.get_profile_path()
-
- self._icon = None
- self._icon_hash = ""
- for fname in os.listdir(user_dir):
- if not fname.startswith("buddy-icon."):
- continue
- fd = open(os.path.join(user_dir, fname), "r")
- self._icon = fd.read()
- if self._icon:
- # Get the icon's hash
- import md5, binascii
- digest = md5.new(self._icon).digest()
- self._icon_hash = util.printable_hash(digest)
- fd.close()
- break
-
- self._pservice = PresenceService.get_instance()
-
- self._invites = Invites()
-
- self._last_activity_update = time.time()
- self._pending_activity_update_timer = None
- self._pending_activity_update = None
-
- def get_invites(self):
- return self._invites
-
- def get_name(self):
- return self._nick
-
- def announce(self):
- # Create and announce our presence
- color = profile.get_color()
- props = {'color': color.to_string(), 'icon-hash': self._icon_hash}
- self._service = self._pservice.register_service(self._nick,
- PRESENCE_SERVICE_TYPE, properties=props)
- logging.debug("Owner '%s' using port %d" % (self._nick, self._service.get_port()))
- self._icon_stream = Stream.Stream.new_from_service(self._service)
- self._icon_stream.register_reader_handler(self._handle_buddy_icon_request, "get_buddy_icon")
- self._icon_stream.register_reader_handler(self._handle_invite, "invite")
-
- def _handle_buddy_icon_request(self):
- """XMLRPC method, return the owner's icon encoded with base64."""
- if self._icon:
- return base64.b64encode(self._icon)
- return ""
-
- def _handle_invite(self, issuer, bundle_id, activity_id):
- """XMLRPC method, called when the owner is invited to an activity."""
- self._invites.add_invite(issuer, bundle_id, activity_id)
- return ''
-
- def __update_advertised_current_activity_cb(self):
- self._last_activity_update = time.time()
- self._pending_activity_update_timer = None
- if self._pending_activity_update:
- logging.debug("*** Updating current activity to %s" % self._pending_activity_update)
- self._service.set_published_value('curact', dbus.String(self._pending_activity_update))
- return False
-
- def set_current_activity(self, activity_id):
- """Update our presence service with the latest activity, but no
- more frequently than every 30 seconds"""
- self._pending_activity_update = activity_id
- # If there's no pending update, we must not have updated it in the
- # last 30 seconds (except for the initial update, hence we also check
- # for the last update)
- if not self._pending_activity_update_timer or time.time() - self._last_activity_update > 30:
- self.__update_advertised_current_activity_cb()
- return
-
- # If we have a pending update already, we have nothing left to do
- if self._pending_activity_update_timer:
- return
-
- # Otherwise, we start a timer to update the activity at the next
- # interval, which should be 30 seconds from the last update, or if that
- # is in the past already, then now
- next = 30 - max(30, time.time() - self._last_activity_update)
- self._pending_activity_update_timer = gobject.timeout_add(next * 1000,
- self.__update_advertised_current_activity_cb)
+ """Class representing the owner of this machine/instance. This class
+ runs in the shell and serves up the buddy icon and other stuff. It's the
+ server portion of the Owner, paired with the client portion in Buddy.py."""
+ def __init__(self):
+ self._nick = profile.get_nick_name()
+ user_dir = env.get_profile_path()
+
+ self._icon = None
+ self._icon_hash = ""
+ for fname in os.listdir(user_dir):
+ if not fname.startswith("buddy-icon."):
+ continue
+ fd = open(os.path.join(user_dir, fname), "r")
+ self._icon = fd.read()
+ if self._icon:
+ # Get the icon's hash
+ import md5, binascii
+ digest = md5.new(self._icon).digest()
+ self._icon_hash = util.printable_hash(digest)
+ fd.close()
+ break
+
+ self._pservice = PresenceService.get_instance()
+
+ self._invites = Invites()
+
+ self._last_activity_update = time.time()
+ self._pending_activity_update_timer = None
+ self._pending_activity_update = None
+
+ def get_invites(self):
+ return self._invites
+
+ def get_name(self):
+ return self._nick
+
+ def announce(self):
+ # Create and announce our presence
+ color = profile.get_color()
+ props = {'color': color.to_string(), 'icon-hash': self._icon_hash}
+ self._service = self._pservice.register_service(self._nick,
+ PRESENCE_SERVICE_TYPE, properties=props)
+ logging.debug("Owner '%s' using port %d" % (self._nick, self._service.get_port()))
+ self._icon_stream = Stream.Stream.new_from_service(self._service)
+ self._icon_stream.register_reader_handler(self._handle_buddy_icon_request, "get_buddy_icon")
+ self._icon_stream.register_reader_handler(self._handle_invite, "invite")
+
+ def _handle_buddy_icon_request(self):
+ """XMLRPC method, return the owner's icon encoded with base64."""
+ if self._icon:
+ return base64.b64encode(self._icon)
+ return ""
+
+ def _handle_invite(self, issuer, bundle_id, activity_id):
+ """XMLRPC method, called when the owner is invited to an activity."""
+ self._invites.add_invite(issuer, bundle_id, activity_id)
+ return ''
+
+ def __update_advertised_current_activity_cb(self):
+ self._last_activity_update = time.time()
+ self._pending_activity_update_timer = None
+ if self._pending_activity_update:
+ logging.debug("*** Updating current activity to %s" % self._pending_activity_update)
+ self._service.set_published_value('curact', dbus.String(self._pending_activity_update))
+ return False
+
+ def set_current_activity(self, activity_id):
+ """Update our presence service with the latest activity, but no
+ more frequently than every 30 seconds"""
+ self._pending_activity_update = activity_id
+ # If there's no pending update, we must not have updated it in the
+ # last 30 seconds (except for the initial update, hence we also check
+ # for the last update)
+ if not self._pending_activity_update_timer or time.time() - self._last_activity_update > 30:
+ self.__update_advertised_current_activity_cb()
+ return
+
+ # If we have a pending update already, we have nothing left to do
+ if self._pending_activity_update_timer:
+ return
+
+ # Otherwise, we start a timer to update the activity at the next
+ # interval, which should be 30 seconds from the last update, or if that
+ # is in the past already, then now
+ next = 30 - max(30, time.time() - self._last_activity_update)
+ self._pending_activity_update_timer = gobject.timeout_add(next * 1000,
+ self.__update_advertised_current_activity_cb)