Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2006-06-12 22:51:40 (GMT)
committer Dan Williams <dcbw@redhat.com>2006-06-12 22:51:40 (GMT)
commitce1d1c879f6be6456b9e9cec783f7ea739c7ce90 (patch)
treeb8d68765e0db19e29a0e6f4a13504565eb60cb32 /sugar
parentef35f9327eb4a749727aac7bb1d8225ac7bdf625 (diff)
Add Owner.py, forgot that one too
Diffstat (limited to 'sugar')
-rw-r--r--sugar/shell/Owner.py63
1 files changed, 63 insertions, 0 deletions
diff --git a/sugar/shell/Owner.py b/sugar/shell/Owner.py
new file mode 100644
index 0000000..684539e
--- /dev/null
+++ b/sugar/shell/Owner.py
@@ -0,0 +1,63 @@
+from sugar import env
+from sugar.presence import Service
+from sugar.presence import Buddy
+from sugar.presence import PresenceService
+from sugar.p2p import Stream
+import pwd
+import os
+import random
+import base64
+
+
+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):
+ nick = env.get_nick_name()
+ if not nick:
+ nick = pwd.getpwuid(os.getuid())[0]
+ if not nick or not len(nick):
+ nick = "Guest"
+
+ user_dir = env.get_user_dir()
+ if not os.path.exists(user_dir):
+ try:
+ os.makedirs(user_dir)
+ except OSError:
+ print "Could not create user directory."
+
+ self._icon = None
+ 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()
+ fd.close()
+ break
+
+ # Our presence service
+ port = random.randint(40000, 65000)
+ properties = {}
+ self._service = Service.Service(nick, Buddy.PRESENCE_SERVICE_TYPE,
+ domain="", address=None, port=port, properties=properties)
+ print "Owner '%s' using port %d" % (nick, 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")
+
+ # Announce ourselves to the world
+ self._pservice = PresenceService.PresenceService.get_instance()
+ self._pservice.start()
+ self._pservice.register_service(self._service)
+
+ 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 set_icon(self, icon):
+ """Can only set icon in constructor for now."""
+ pass
+