Moved some protocol data to tubespeek. Partial code for sharing files
[jlew:xo-file-distro.git] / FileShare.activity / TubeSpeak.py
1 import logging
2 from dbus.service import method, signal
3 from dbus.gobject_service import ExportedGObject
4
5 SERVICE = "org.laptop.FileShare"
6 IFACE = SERVICE
7 PATH = "/org/laptop/FileShare"
8
9 class TubeSpeak(ExportedGObject):
10     def __init__(self, tube, is_initiator, text_received_cb, alert, get_fileList):
11         super(TubeSpeak, self).__init__(tube, PATH)
12         self._logger = logging.getLogger('fileshare-activity.TubeSpeak')
13         self.tube = tube
14         self.is_initiator = is_initiator
15         self.text_received_cb = text_received_cb
16         self._alert = alert
17         self.entered = False  # Have we set up the tube?
18         self.getFileList = get_fileList
19         self.tube.watch_participants(self.participant_change_cb)
20
21     def participant_change_cb(self, added, removed):
22         if not self.entered:
23             if self.is_initiator:
24                 self._logger.debug("I'm initiating the tube.")
25                 self.add_join_handler()
26             else:
27                 self._logger.debug('Requesting file data')
28                 self.announceJoin()
29         self.entered = True
30
31     @signal(dbus_interface=IFACE, signature='')
32     def announceJoin(self):
33         self._logger.debug('Announced join.')
34
35     def add_join_handler(self):
36         self._logger.debug('Adding join handler.')
37         # Watch for announceJoin
38         self.tube.add_signal_receiver(self.announceJoin_cb, 'announceJoin', IFACE,
39             path=PATH, sender_keyword='sender')
40
41     def announceJoin_cb(self, sender=None):
42         """Somebody joined."""
43         if sender == self.tube.get_unique_name():
44             # sender is my bus name, so ignore my own signal
45             return
46         self._logger.debug('Welcoming %s and sending them data' % sender)
47
48         self.tube.get_object(sender, PATH).FileList(self.getFileList(), dbus_interface=IFACE)
49
50     @method(dbus_interface=IFACE, in_signature='s', out_signature='')
51     def FileList(self, fileList):
52         """To be called on the incoming XO after they Hello."""
53         self._logger.debug('Somebody called FileList and sent me %s' % fileList)
54         self.text_received_cb('filelist',fileList)