Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar
diff options
context:
space:
mode:
Diffstat (limited to 'sugar')
-rw-r--r--sugar/Makefile.am1
-rw-r--r--sugar/env.py10
-rw-r--r--sugar/simulator.py47
3 files changed, 56 insertions, 2 deletions
diff --git a/sugar/Makefile.am b/sugar/Makefile.am
index d45f1f6..f683cc8 100644
--- a/sugar/Makefile.am
+++ b/sugar/Makefile.am
@@ -8,6 +8,7 @@ sugar_PYTHON = \
logger.py \
setup.py \
oldsimulator.py \
+ simulator.py \
TracebackUtils.py \
util.py
diff --git a/sugar/env.py b/sugar/env.py
index b0c5443..036d944 100644
--- a/sugar/env.py
+++ b/sugar/env.py
@@ -14,10 +14,16 @@ def setup_user(profile):
os.environ['SUGAR_COLOR'] = profile.get_color().to_string()
def get_nick_name():
- return os.environ['SUGAR_NICK_NAME']
+ if os.environ.has_key('SUGAR_NICK_NAME'):
+ return os.environ['SUGAR_NICK_NAME']
+ else:
+ return None
def get_color():
- return os.environ['SUGAR_COLOR']
+ if os.environ.has_key('SUGAR_COLOR'):
+ return os.environ['SUGAR_COLOR']
+ else:
+ return None
def setup_python_path():
for path in sugar_python_path:
diff --git a/sugar/simulator.py b/sugar/simulator.py
new file mode 100644
index 0000000..c7fccfa
--- /dev/null
+++ b/sugar/simulator.py
@@ -0,0 +1,47 @@
+from sugar.presence import PresenceService
+from sugar.graphics.iconcolor import IconColor
+from sugar.p2p import Stream
+from sugar import util
+
+_PRESENCE_SERVICE_TYPE = "_presence_olpc._tcp"
+
+class BotService(object):
+ def __init__(self, bot):
+ self._bot = bot
+
+ def announce(self):
+ props = { 'color': self._bot.color.to_string() }
+ pservice = PresenceService.get_instance()
+ self._service = pservice.register_service(self._bot.name,
+ _PRESENCE_SERVICE_TYPE, properties=props)
+
+ self._stream = Stream.Stream.new_from_service(self._service)
+ self._stream.register_reader_handler(
+ self._handle_buddy_icon_request, "get_buddy_icon")
+ self._stream.register_reader_handler(
+ self._handle_invite, "invite")
+
+ def _handle_buddy_icon_request(self):
+ if self._bot.icon:
+ fd = open(self._bot.icon, "r")
+ icon_data = fd.read()
+ fd.close()
+ if icon_data:
+ return base64.b64encode(self._icon)
+ return ''
+
+ def _handle_invite(self, issuer, bundle_id, activity_id):
+ return ''
+
+ def set_current_activity(self, activity_id):
+ self._service.set_published_value('curact', dbus.String(activity_id))
+
+class Bot(object):
+ def __init__(self):
+ self.name = util.unique_id()
+ self.color = IconColor()
+ self.icon = None
+
+ def start(self):
+ self._service = BotService(self)
+ self._service.announce()