Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell/model/Friends.py
diff options
context:
space:
mode:
Diffstat (limited to 'shell/model/Friends.py')
-rw-r--r--shell/model/Friends.py78
1 files changed, 78 insertions, 0 deletions
diff --git a/shell/model/Friends.py b/shell/model/Friends.py
new file mode 100644
index 0000000..6beca66
--- /dev/null
+++ b/shell/model/Friends.py
@@ -0,0 +1,78 @@
+import os
+from ConfigParser import ConfigParser
+
+import gobject
+
+from sugar.canvas.IconColor import IconColor
+from sugar.presence import PresenceService
+from sugar import env
+
+class Friend:
+ def __init__(self, name, color):
+ self._name = name
+ self._color = color
+
+ def get_name(self):
+ return self._name
+
+ def get_color(self):
+ return IconColor(self._color)
+
+ def get_buddy(self):
+ pservice = PresenceService.get_instance()
+ return pservice.get_buddy_by_name(self._name)
+
+class Friends(gobject.GObject):
+ __gsignals__ = {
+ 'friend-added': (gobject.SIGNAL_RUN_FIRST,
+ gobject.TYPE_NONE, ([object])),
+ 'friend-removed': (gobject.SIGNAL_RUN_FIRST,
+ gobject.TYPE_NONE, ([object])),
+ }
+
+ def __init__(self):
+ gobject.GObject.__init__(self)
+
+ self._list = []
+ self._path = os.path.join(env.get_profile_path(), 'friends')
+
+ self.load()
+
+ def has_buddy(self, buddy):
+ for friend in self:
+ if friend.get_name() == buddy.get_name():
+ return True
+ return False
+
+ def add_friend(self, name, color):
+ friend = Friend(name, color)
+ self._list.append(friend)
+
+ self.emit('friend-added', friend)
+
+ def add_buddy(self, buddy):
+ if not self.has_buddy(buddy):
+ self.add_friend(buddy.get_name(), buddy.get_color())
+ self.save()
+
+ def __iter__(self):
+ return self._list.__iter__()
+
+ def load(self):
+ cp = ConfigParser()
+
+ if cp.read([self._path]):
+ for name in cp.sections():
+ self.add_friend(name, cp.get(name, 'color'))
+
+ def save(self):
+ cp = ConfigParser()
+
+ for friend in self:
+ section = friend.get_name()
+ cp.add_section(section)
+ cp.set(section, 'color', friend.get_color().to_string())
+
+ fileobject = open(self._path, 'w')
+ cp.write(fileobject)
+ fileobject.close()