From e4c4e866a5c99d81f7fa0a0972311a604c6f1af2 Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Wed, 9 Aug 2006 11:47:17 +0200 Subject: [PATCH] Start refactoring to get back buddy chat to work... --- activities/chat/ChatActivity.py | 72 --------------------------------- shell/ChatListener.py | 29 +++++++++++++ shell/Shell.py | 4 ++ 3 files changed, 33 insertions(+), 72 deletions(-) create mode 100644 shell/ChatListener.py diff --git a/activities/chat/ChatActivity.py b/activities/chat/ChatActivity.py index 6ced1dbc..ab661d12 100644 --- a/activities/chat/ChatActivity.py +++ b/activities/chat/ChatActivity.py @@ -1,20 +1,7 @@ -import dbus -import random -import logging - -import gtk -import gobject from gettext import gettext as _ from sugar.activity.Activity import Activity -from sugar.presence import Service -from sugar.chat.Chat import Chat from sugar.chat.BuddyChat import BuddyChat -from sugar.p2p.Stream import Stream -from sugar.presence.PresenceService import PresenceService -import sugar.env - -_CHAT_ACTIVITY_TYPE = "_chat_activity._tcp" class ChatActivity(Activity): def __init__(self, service): @@ -28,62 +15,3 @@ class ChatActivity(Activity): def recv_message(self, message): self._chat.recv_message(message) - -class ChatShellDbusService(dbus.service.Object): - def __init__(self, parent): - self._parent = parent - session_bus = dbus.SessionBus() - bus_name = dbus.service.BusName('com.redhat.Sugar.Chat', bus=session_bus) - object_path = '/com/redhat/Sugar/Chat' - dbus.service.Object.__init__(self, bus_name, object_path) - - @dbus.service.method('com.redhat.Sugar.ChatShell', - in_signature="o", out_signature="") - def open_chat(self, service_path): - self._parent.open_chat_from_path(service_path) - -class ChatListener: - def __init__(self): - ChatShellDbusService(self) - - self._chats = {} - - self._pservice = PresenceService() - self._pservice.register_service_type(BuddyChat.SERVICE_TYPE) - - def start(self): - self._service = self._pservice.register_service(sugar.env.get_nick_name(), - BuddyChat.SERVICE_TYPE) - self._buddy_stream = Stream.new_from_service(self._service) - self._buddy_stream.set_data_listener(self._recv_message) - - def _recv_message(self, address, message): - [nick, msg] = Chat.deserialize_message(message) - buddy = self._pservice.get_buddy_by_name(nick) - if buddy: - if buddy == self._pservice.get_owner(): - return - service = buddy.get_service_of_type(BuddyChat.SERVICE_TYPE) - name = service.get_name() - if service: - if not self._chats.has_key(name): - self.open_chat(service) - self._chats[name].recv_message(message) - else: - logging.error('The buddy %s does not have a chat service.' % (nick)) - else: - logging.error('The buddy %s is not present.' % (nick)) - return - - def open_chat_from_path(self, service_path): - service = self._pservice.get(service_path) - self.open_chat(service) - - def open_chat(self, service): - chat = ChatActivity(service) - self._chats[service.get_name()] = chat - return chat - -def start(): - chat_listener = ChatListener() - chat_listener.start() diff --git a/shell/ChatListener.py b/shell/ChatListener.py new file mode 100644 index 00000000..6c0f6de7 --- /dev/null +++ b/shell/ChatListener.py @@ -0,0 +1,29 @@ +from sugar import env +from sugar.chat.BuddyChat import BuddyChat +from sugar.activity import ActivityFactory +from sugar.presence.PresenceService import PresenceService +from sugar.p2p.Stream import Stream + +class ChatListener: + def __init__(self): + self._chats = {} + + self._pservice = PresenceService() + self._pservice.register_service_type(BuddyChat.SERVICE_TYPE) + + def start(self): + self._service = self._pservice.register_service(env.get_nick_name(), + BuddyChat.SERVICE_TYPE) + self._buddy_stream = Stream.new_from_service(self._service) + self._buddy_stream.set_data_listener(self._recv_message) + + def _recv_message(self, address, message): + [nick, msg] = Chat.deserialize_message(message) + buddy = self._pservice.get_buddy_by_name(nick) + if buddy: + service = buddy.get_service_of_type(BuddyChat.SERVICE_TYPE) + self.open_chat(service) + #chat.recv_message(message) + + def open_chat(self, service): + ActivityFactory.create("com.redhat.Sugar.ChatActivity") diff --git a/shell/Shell.py b/shell/Shell.py index ff668f06..2860ed09 100755 --- a/shell/Shell.py +++ b/shell/Shell.py @@ -14,6 +14,7 @@ from ConsoleWindow import ConsoleWindow from Owner import ShellOwner from PresenceService import PresenceService from ActivityHost import ActivityHost +from ChatListener import ChatListener class ShellDbusService(dbus.service.Object): def __init__(self, shell, bus_name): @@ -57,6 +58,9 @@ class Shell: self._owner = ShellOwner() self._owner.announce() + chat_listener = ChatListener() + chat_listener.start() + self._home_window = HomeWindow(self) self._home_window.show()