Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/activities
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2006-06-22 19:59:38 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2006-06-22 19:59:38 (GMT)
commit0a305004b08cab01c1ae42a069d77b1517491f99 (patch)
tree1be7256862ca5318f36934ef9fe9e63b48b5d3b5 /activities
parent49aa3ffcba7b6957605c0f63bb5be2fee61bde14 (diff)
Some work getting the one-to-one chat back
Diffstat (limited to 'activities')
-rw-r--r--activities/chat/ChatActivity.py84
-rw-r--r--activities/chat/chat.activity2
2 files changed, 86 insertions, 0 deletions
diff --git a/activities/chat/ChatActivity.py b/activities/chat/ChatActivity.py
new file mode 100644
index 0000000..cb3ada8
--- /dev/null
+++ b/activities/chat/ChatActivity.py
@@ -0,0 +1,84 @@
+import dbus
+import random
+
+import pygtk
+pygtk.require('2.0')
+import gtk
+
+from sugar.activity.Activity import Activity
+from sugar.LogWriter import LogWriter
+from sugar.presence.Service import Service
+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_type._tcp"
+
+class ChatActivity(Activity):
+ def __init__(self, service):
+ Activity.__init__(self, _GMAIL_ACTIVITY_TYPE)
+ self._service = service
+
+ def on_connected_to_shell(self):
+ self.set_can_close(True)
+ self.set_tab_icon(icon_name="im")
+ self.set_show_tab_icon(True)
+
+ plug = self.gtk_plug()
+
+ chat = BuddyChat(self._service)
+ plug.add(chat)
+ chat.show()
+
+ plug.show()
+
+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')
+ def open_chat(self, message):
+ self._parent.send_text_message(message)
+
+class ChatShell:
+ instance = None
+
+ def get_instance():
+ if not ChatShell.instance:
+ ChatShell.instance = ChatShell()
+ return ChatShell.instance
+ get_instance = staticmethod(get_instance)
+
+ def __init__(self):
+ self._pservice = PresenceService.get_instance()
+ self._pservice.start()
+ self._pservice.track_service_type(BuddyChat.SERVICE_TYPE)
+
+ def start(self):
+ port = random.randint(5000, 65535)
+ service = Service(sugar.env.get_nick_name(), BuddyChat.SERVICE_TYPE,
+ 'local', '', port)
+ self._buddy_stream = Stream.new_from_service(service)
+ self._buddy_stream.set_data_listener(getattr(self, "_recv_message"))
+ self._pservice.register_service(service)
+
+ def _recv_message(self, address, msg):
+ print msg
+
+ def open_chat(self, serialized_service):
+ service = Service.deserialize(serialized_service)
+ self._chat = ChatActivity(service)
+ self._chat.connect_to_shell()
+
+log_writer = LogWriter("Chat")
+log_writer.start()
+
+chat_shell = ChatShell.get_instance()
+chat_shell.start()
+
+gtk.main()
diff --git a/activities/chat/chat.activity b/activities/chat/chat.activity
new file mode 100644
index 0000000..0910654
--- /dev/null
+++ b/activities/chat/chat.activity
@@ -0,0 +1,2 @@
+[Activity]
+python_class = ChatActivity