Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar/chat
diff options
context:
space:
mode:
authorMarco 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)
commitd3c5da1a667c381346879929cf5471df85d72d23 (patch)
tree0b505da5122e2b39e3ff725133726c200193ea7a /sugar/chat
parent3b2f185e5c236ae7fc39b8e6e0c291d7e4357058 (diff)
Display icons in the chat
Diffstat (limited to 'sugar/chat')
-rwxr-xr-xsugar/chat/chat.py51
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