diff options
author | Marco Pesenti Gritti <mpg@redhat.com> | 2006-05-22 06:10:30 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <mpg@redhat.com> | 2006-05-22 06:10:30 (GMT) |
commit | d3c5da1a667c381346879929cf5471df85d72d23 (patch) | |
tree | 0b505da5122e2b39e3ff725133726c200193ea7a /sugar/chat | |
parent | 3b2f185e5c236ae7fc39b8e6e0c291d7e4357058 (diff) |
Display icons in the chat
Diffstat (limited to 'sugar/chat')
-rwxr-xr-x | sugar/chat/chat.py | 51 |
1 files changed, 30 insertions, 21 deletions
diff --git a/sugar/chat/chat.py b/sugar/chat/chat.py index bea041c..f560bb4 100755 --- a/sugar/chat/chat.py +++ b/sugar/chat/chat.py @@ -14,7 +14,6 @@ import gtk, gobject from sugar.shell import activity from sugar.p2p.Group import Group -from sugar.p2p import Buddy from sugar.p2p.Group import LocalGroup from sugar.p2p.Service import Service from sugar.p2p.Stream import Stream @@ -35,7 +34,6 @@ GROUP_CHAT_SERVICE_PORT = 6200 class Chat(activity.Activity): def __init__(self, controller): - Buddy.recognize_buddy_service_type(CHAT_SERVICE_TYPE) self._controller = controller activity.Activity.__init__(self) self._stream_writer = None @@ -276,12 +274,27 @@ class Chat(activity.Activity): print "act %d: in activity_on_got_focus" % self.activity_get_id() # FIXME self._controller.notify_activate(self) + def _insert_buddy(self, buf, nick): + buddy = self._group.get_buddy(nick) + print buddy.get_nick_name() + + pbl = gtk.gdk.PixbufLoader() + pbl.write(buddy.get_icon()) + pbl.close() + pbuf = pbl.get_pixbuf() + + aniter = buf.get_end_iter() + buf.insert_pixbuf(aniter, pbuf) + + aniter = buf.get_end_iter() + buf.insert(aniter, nick + ": ") + def _insert_rich_message(self, nick, msg): msg = Emoticons.get_instance().replace(msg) buf = self._chat_view.get_buffer() - aniter = buf.get_end_iter() - buf.insert(aniter, nick + ": ") + + self._insert_buddy(buf, nick) serializer = richtext.RichTextSerializer() serializer.deserialize(msg, buf) @@ -297,8 +310,10 @@ class Chat(activity.Activity): pbuf = pbl.get_pixbuf() buf = self._chat_view.get_buffer() + + self._insert_buddy(buf, nick) + aniter = buf.get_end_iter() - buf.insert(aniter, nick + ": ") buf.insert_pixbuf(aniter, pbuf) aniter = buf.get_end_iter() buf.insert(aniter, "\n") @@ -374,7 +389,7 @@ class BuddyChat(Chat): self.activity_set_can_close(True) self.activity_set_tab_icon_name("im") self.activity_show_icon(True) - self._stream_writer = self._controller.new_buddy_writer(self._buddy) + self._stream_writer = self._controller.new_buddy_writer(self._buddy.get_service_name()) def recv_message(self, sender, msg): Chat.recv_message(self, self._buddy, msg) @@ -418,17 +433,17 @@ class GroupChat(Chat): def get_group(self): return self._group - def new_buddy_writer(self, buddy, threaded=False): - service = buddy.get_service(CHAT_SERVICE_TYPE) - return self._buddy_stream.new_writer(service, threaded=threaded) + def new_buddy_writer(self, buddy_name): + service = self._group.get_service(buddy_name, CHAT_SERVICE_TYPE) + return self._buddy_stream.new_writer(service) def _start(self): self._group = LocalGroup() self._group.add_presence_listener(self._on_group_presence_event) self._group.add_service_listener(self._on_group_service_event) self._group.join() - - name = self._group.get_owner().get_nick_name() + + name = self._group.get_owner().get_service_name() # Group controls the Stream for incoming messages for # specific buddy chats @@ -542,18 +557,14 @@ class GroupChat(Chat): self._chats[buddy] = chat chat.activity_connect_to_shell() - def _request_buddy_icon_cb(self, response, user_data): - icon = response - buddy = user_data + def _request_buddy_icon(self, buddy): + writer = self.new_buddy_writer(buddy.get_service_name()) + icon = writer.custom_request("get_buddy_icon") if icon and len(icon): icon = base64.b64decode(icon) - print "Buddy icon for '%s' is size %d" % (buddy.get_nick_name(), len(icon)) + print "Setting buddy icon for '%s' to %s" % (buddy.get_nick_name(), icon) buddy.set_icon(icon) - def _request_buddy_icon(self, buddy): - writer = self.new_buddy_writer(buddy, threaded=True) - icon = writer.custom_request("get_buddy_icon", self._request_buddy_icon_cb, buddy) - def _on_group_service_event(self, action, service): if action == Group.SERVICE_ADDED: # Look for the olpc chat service @@ -563,7 +574,6 @@ class GroupChat(Chat): if buddy and buddy.get_address() == service.get_address(): # Try to get the buddy's icon if buddy.get_nick_name() != self._group.get_owner().get_nick_name(): - print "Requesting buddy icon from '%s'." % buddy.get_nick_name() self._request_buddy_icon(buddy) elif action == Group.SERVICE_REMOVED: pass @@ -641,7 +651,6 @@ if len(sys.argv) > 1 and sys.argv[1] == "--console": ChatShell.get_instance().open_group_chat() try: - gtk.threads_init() gtk.main() except KeyboardInterrupt: pass |