2 from dbus.service import method, signal
3 from dbus.gobject_service import ExportedGObject
5 SERVICE = "org.laptop.FileShare"
7 PATH = "/org/laptop/FileShare"
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')
14 self.is_initiator = is_initiator
15 self.text_received_cb = text_received_cb
17 self.entered = False # Have we set up the tube?
18 self.getFileList = get_fileList
19 self.tube.watch_participants(self.participant_change_cb)
21 def participant_change_cb(self, added, removed):
24 self._logger.debug("I'm initiating the tube.")
25 self.add_join_handler()
27 self._logger.debug('Requesting file data')
31 @signal(dbus_interface=IFACE, signature='')
32 def announceJoin(self):
33 self._logger.debug('Announced join.')
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')
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
46 self._logger.debug('Welcoming %s and sending them data' % sender)
48 self.tube.get_object(sender, PATH).FileList(self.getFileList(), dbus_interface=IFACE)
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)