Get chat back to work. Well except it get very confused
if users have the same ip address. Dan I commented out the service deserialization in BrowserShell because it was not really working (also there was a few typos in that code)
This commit is contained in:
parent
bc43e25e10
commit
51ea9eedba
@ -37,15 +37,15 @@ class BrowserShell(dbus.service.Object):
|
|||||||
@dbus.service.method('com.redhat.Sugar.BrowserShell')
|
@dbus.service.method('com.redhat.Sugar.BrowserShell')
|
||||||
def open_browser(self, uri, serialized_service=None):
|
def open_browser(self, uri, serialized_service=None):
|
||||||
service = None
|
service = None
|
||||||
if serialized_service is not None:
|
# if serialized_service is not None:
|
||||||
serivce = Service.deserialize(serialized_service)
|
# service = Service.deserialize(serialized_service)
|
||||||
browser = BrowserActivity(uri)
|
browser = BrowserActivity(uri)
|
||||||
self.__browsers.append(browser)
|
self.__browsers.append(browser)
|
||||||
gobject.idle_add(self._start_browser_cb, browser, service)
|
gobject.idle_add(self._start_browser_cb, browser, service)
|
||||||
|
|
||||||
@dbus.service.method('com.redhat.Sugar.BrowserShell')
|
@dbus.service.method('com.redhat.Sugar.BrowserShell')
|
||||||
def open_browser_from_service_foobar(self, uri, serialized_service):
|
def open_browser_from_service_foobar(self, uri, serialized_service):
|
||||||
serivce = Service.deserialize(serialized_service)
|
service = Service.deserialize(serialized_service)
|
||||||
browser = BrowserActivity(uri)
|
browser = BrowserActivity(uri)
|
||||||
self.__browsers.append(browser)
|
self.__browsers.append(browser)
|
||||||
gobject.idle_add(self._start_browser_cb, browser, service)
|
gobject.idle_add(self._start_browser_cb, browser, service)
|
||||||
|
@ -13,6 +13,7 @@ import gtk, gobject, pango
|
|||||||
from sugar.chat.Emoticons import Emoticons
|
from sugar.chat.Emoticons import Emoticons
|
||||||
from sugar.chat.ChatToolbar import ChatToolbar
|
from sugar.chat.ChatToolbar import ChatToolbar
|
||||||
from sugar.chat.ChatEditor import ChatEditor
|
from sugar.chat.ChatEditor import ChatEditor
|
||||||
|
from sugar.presence.PresenceService import PresenceService
|
||||||
import richtext
|
import richtext
|
||||||
|
|
||||||
PANGO_SCALE = 1024 # Where is this defined?
|
PANGO_SCALE = 1024 # Where is this defined?
|
||||||
@ -47,7 +48,7 @@ class Chat(gtk.VBox):
|
|||||||
self.pack_start(chat_vbox)
|
self.pack_start(chat_vbox)
|
||||||
chat_vbox.show()
|
chat_vbox.show()
|
||||||
|
|
||||||
self._editor = ChatEditor()
|
self._editor = ChatEditor(self)
|
||||||
|
|
||||||
toolbar = ChatToolbar(self._editor.get_buffer())
|
toolbar = ChatToolbar(self._editor.get_buffer())
|
||||||
self.pack_start(toolbar, False)
|
self.pack_start(toolbar, False)
|
||||||
@ -73,17 +74,14 @@ class Chat(gtk.VBox):
|
|||||||
|
|
||||||
def _message_inserted(self):
|
def _message_inserted(self):
|
||||||
gobject.idle_add(self._scroll_chat_view_to_bottom)
|
gobject.idle_add(self._scroll_chat_view_to_bottom)
|
||||||
self.set_has_changes(True)
|
|
||||||
|
|
||||||
def _insert_buddy(self, buf, nick):
|
def _insert_buddy(self, buf, buddy):
|
||||||
# Stuff in the buddy icon, if we have one for this buddy
|
# Stuff in the buddy icon, if we have one for this buddy
|
||||||
buddy = self._controller.get_group().get_buddy(nick)
|
|
||||||
icon = buddy.get_icon_pixbuf()
|
icon = buddy.get_icon_pixbuf()
|
||||||
if icon:
|
if icon:
|
||||||
rise = int(icon.get_height() / 4) * -1
|
rise = int(icon.get_height() / 4) * -1
|
||||||
|
|
||||||
chat_service = buddy.get_service(Chat.SERVICE_TYPE)
|
hash_string = "%s-%s" % (buddy.get_nick_name(), buddy.get_address())
|
||||||
hash_string = "%s-%s" % (nick, chat_service.get_address())
|
|
||||||
sha_hash = sha.new()
|
sha_hash = sha.new()
|
||||||
sha_hash.update(hash_string)
|
sha_hash.update(hash_string)
|
||||||
tagname = "buddyicon-%s" % sha_hash.hexdigest()
|
tagname = "buddyicon-%s" % sha_hash.hexdigest()
|
||||||
@ -102,15 +100,15 @@ class Chat(gtk.VBox):
|
|||||||
buf.create_tag("nickname", weight=pango.WEIGHT_BOLD)
|
buf.create_tag("nickname", weight=pango.WEIGHT_BOLD)
|
||||||
aniter = buf.get_end_iter()
|
aniter = buf.get_end_iter()
|
||||||
offset = aniter.get_offset()
|
offset = aniter.get_offset()
|
||||||
buf.insert(aniter, " " + nick + ": ")
|
buf.insert(aniter, " " + buddy.get_nick_name() + ": ")
|
||||||
enditer = buf.get_iter_at_offset(offset)
|
enditer = buf.get_iter_at_offset(offset)
|
||||||
buf.apply_tag_by_name("nickname", aniter, enditer)
|
buf.apply_tag_by_name("nickname", aniter, enditer)
|
||||||
|
|
||||||
def _insert_rich_message(self, nick, msg):
|
def _insert_rich_message(self, buddy, msg):
|
||||||
msg = Emoticons.get_instance().replace(msg)
|
msg = Emoticons.get_instance().replace(msg)
|
||||||
|
|
||||||
buf = self._chat_view.get_buffer()
|
buf = self._chat_view.get_buffer()
|
||||||
self._insert_buddy(buf, nick)
|
self._insert_buddy(buf, buddy)
|
||||||
|
|
||||||
serializer = richtext.RichTextSerializer()
|
serializer = richtext.RichTextSerializer()
|
||||||
serializer.deserialize(msg, buf)
|
serializer.deserialize(msg, buf)
|
||||||
@ -188,19 +186,19 @@ class Chat(gtk.VBox):
|
|||||||
|
|
||||||
chunk = self._get_first_richtext_chunk(msg)
|
chunk = self._get_first_richtext_chunk(msg)
|
||||||
if chunk:
|
if chunk:
|
||||||
self._insert_rich_message(buddy.get_nick_name(), chunk)
|
self._insert_rich_message(buddy, chunk)
|
||||||
return
|
return
|
||||||
|
|
||||||
chunk = self._get_first_sketch_chunk(msg)
|
chunk = self._get_first_sketch_chunk(msg)
|
||||||
if chunk:
|
if chunk:
|
||||||
self._insert_sketch(buddy.get_nick_name(), chunk)
|
self._insert_sketch(buddy, chunk)
|
||||||
return
|
return
|
||||||
|
|
||||||
def send_sketch(self, svgdata):
|
def send_sketch(self, svgdata):
|
||||||
if not svgdata or not len(svgdata):
|
if not svgdata or not len(svgdata):
|
||||||
return
|
return
|
||||||
self._stream_writer.write(svgdata)
|
self._stream_writer.write(svgdata)
|
||||||
owner = self._controller.get_group().get_owner()
|
owner = PresenceService.get_instance().get_owner()
|
||||||
self._insert_sketch(owner.get_nick_name(), svgdata)
|
self._insert_sketch(owner.get_nick_name(), svgdata)
|
||||||
|
|
||||||
def send_text_message(self, text):
|
def send_text_message(self, text):
|
||||||
@ -208,5 +206,5 @@ class Chat(gtk.VBox):
|
|||||||
if len(text) <= 0:
|
if len(text) <= 0:
|
||||||
return
|
return
|
||||||
self._stream_writer.write(text)
|
self._stream_writer.write(text)
|
||||||
owner = self._controller.get_group().get_owner()
|
owner = PresenceService.get_instance().get_owner()
|
||||||
self._insert_rich_message(owner.get_nick_name(), text)
|
self._insert_rich_message(owner, text)
|
||||||
|
@ -6,9 +6,11 @@ from sugar.chat.sketchpad.SketchPad import SketchPad
|
|||||||
import richtext
|
import richtext
|
||||||
|
|
||||||
class ChatEditor(gtk.Notebook):
|
class ChatEditor(gtk.Notebook):
|
||||||
def __init__(self):
|
def __init__(self, chat):
|
||||||
gtk.Notebook.__init__(self)
|
gtk.Notebook.__init__(self)
|
||||||
|
|
||||||
|
self._chat = chat
|
||||||
|
|
||||||
self.set_show_tabs(False)
|
self.set_show_tabs(False)
|
||||||
self.set_show_border(False)
|
self.set_show_border(False)
|
||||||
self.set_size_request(-1, 70)
|
self.set_size_request(-1, 70)
|
||||||
@ -40,7 +42,7 @@ class ChatEditor(gtk.Notebook):
|
|||||||
if len(text.strip()) > 0:
|
if len(text.strip()) > 0:
|
||||||
serializer = richtext.RichTextSerializer()
|
serializer = richtext.RichTextSerializer()
|
||||||
text = serializer.serialize(buf)
|
text = serializer.serialize(buf)
|
||||||
self.send_text_message(text)
|
self._chat.send_text_message(text)
|
||||||
|
|
||||||
buf.set_text("")
|
buf.set_text("")
|
||||||
buf.place_cursor(buf.get_start_iter())
|
buf.place_cursor(buf.get_start_iter())
|
||||||
|
@ -37,5 +37,10 @@ class GroupChat(Chat):
|
|||||||
self._group_stream.set_data_listener(self._group_recv_message)
|
self._group_stream.set_data_listener(self._group_recv_message)
|
||||||
self._stream_writer = self._group_stream.new_writer()
|
self._stream_writer = self._group_stream.new_writer()
|
||||||
|
|
||||||
def _group_recv_message(self, buddy, msg):
|
def _group_recv_message(self, address, msg):
|
||||||
|
pservice = PresenceService.get_instance()
|
||||||
|
buddy = pservice.get_buddy_by_address(address)
|
||||||
|
if buddy:
|
||||||
self.recv_message(buddy, msg)
|
self.recv_message(buddy, msg)
|
||||||
|
else:
|
||||||
|
logging.error('Cannot map %s to a buddy.' % (address))
|
||||||
|
@ -2,6 +2,7 @@ import xmlrpclib
|
|||||||
import socket
|
import socket
|
||||||
import traceback
|
import traceback
|
||||||
import random
|
import random
|
||||||
|
import logging
|
||||||
|
|
||||||
import network
|
import network
|
||||||
from MostlyReliablePipe import MostlyReliablePipe
|
from MostlyReliablePipe import MostlyReliablePipe
|
||||||
@ -33,7 +34,7 @@ class Stream(object):
|
|||||||
|
|
||||||
def _recv(self, address, data):
|
def _recv(self, address, data):
|
||||||
if self._callback:
|
if self._callback:
|
||||||
self._callback(data)
|
self._callback(address, data)
|
||||||
|
|
||||||
|
|
||||||
class UnicastStreamWriter(object):
|
class UnicastStreamWriter(object):
|
||||||
@ -133,6 +134,7 @@ class MulticastStream(Stream):
|
|||||||
return self._reader_port
|
return self._reader_port
|
||||||
|
|
||||||
def _internal_start_reader(self):
|
def _internal_start_reader(self):
|
||||||
|
logging.debug('Start multicast stream, address %s, port %d' % (self._address, self._reader_port))
|
||||||
if not self._service.get_address():
|
if not self._service.get_address():
|
||||||
raise ValueError("service must have a valid address.")
|
raise ValueError("service must have a valid address.")
|
||||||
self._pipe = MostlyReliablePipe('', self._address, self._reader_port,
|
self._pipe = MostlyReliablePipe('', self._address, self._reader_port,
|
||||||
@ -143,7 +145,7 @@ class MulticastStream(Stream):
|
|||||||
self._pipe.send(data)
|
self._pipe.send(data)
|
||||||
|
|
||||||
def _recv_data_cb(self, address, data, user_data=None):
|
def _recv_data_cb(self, address, data, user_data=None):
|
||||||
self._recv(address, data)
|
self._recv(address[0], data)
|
||||||
|
|
||||||
def new_writer(self, service=None):
|
def new_writer(self, service=None):
|
||||||
return self
|
return self
|
||||||
|
@ -575,7 +575,7 @@ class PresenceService(gobject.GObject):
|
|||||||
|
|
||||||
def get_buddy_by_address(self, address):
|
def get_buddy_by_address(self, address):
|
||||||
for buddy in self._buddies.values():
|
for buddy in self._buddies.values():
|
||||||
if buddy.get_address == address:
|
if buddy.get_address() == address:
|
||||||
return buddy
|
return buddy
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user