Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorerich koslovsky <erikos@localhost.localdomain>2007-08-19 14:31:37 (GMT)
committer erich koslovsky <erikos@localhost.localdomain>2007-08-19 14:31:37 (GMT)
commit86abe2346bedc98a249621b080ec85841918c9cc (patch)
treea719dff6806fc71325d92fc8182a515c912f6e8f
parenta5b7dc3a3664a278e700449d352554654e57905e (diff)
Added support to sink members of the shared browser session when they come back. Some cleanups.
-rwxr-xr-xactivity/activity.info2
-rw-r--r--linkbutton.py6
-rw-r--r--linktoolbar.py13
-rw-r--r--messenger.py123
-rw-r--r--model.py8
-rwxr-xr-xwebactivity.py13
6 files changed, 69 insertions, 96 deletions
diff --git a/activity/activity.info b/activity/activity.info
index 3959bda..85d9e84 100755
--- a/activity/activity.info
+++ b/activity/activity.info
@@ -1,6 +1,6 @@
[Activity]
name = Browse
-activity_version = 38
+activity_version = 39
service_name = org.laptop.WebActivity
icon = activity-web
class = webactivity.WebActivity
diff --git a/linkbutton.py b/linkbutton.py
index 4e9bd68..84c0adb 100644
--- a/linkbutton.py
+++ b/linkbutton.py
@@ -46,12 +46,6 @@ class LinkButton(gtk.RadioToolButton):
width = pixbuf_xo.get_width()
height = pixbuf_xo.get_height()
- print pixbuf.get_width()
- print pixbuf.get_height()
-
- print pixbuf_xo.get_width()
- print pixbuf_xo.get_height()
-
dest_x = 100
dest_y = 66
w = width/2
diff --git a/linktoolbar.py b/linktoolbar.py
index 315d724..0d2c2f3 100644
--- a/linktoolbar.py
+++ b/linktoolbar.py
@@ -49,7 +49,7 @@ class LinkToolbar(gtk.Toolbar):
else:
group = None
- info = 'title: ' + title +'\nurl: '+ url + '\nowner: ' + owner
+ info = 'title: ' + title +'\nurl: '+ url + '\nowner: ' + owner
palette = Palette(info)
palette.props.position = Palette.TOP
@@ -84,17 +84,6 @@ class LinkToolbar(gtk.Toolbar):
if len(self.get_children()) is 0:
self.hide()
return index
-
- ''' deprecated
- def _rm_link_messenger(self, linkname):
- childs = self.get_children()
- for child in childs:
- if child.link_name == linkname:
- self.remove(child)
- if len(self.get_children()) is 0:
- self.hide()
- return
- '''
def _link_rm_palette_cb(self, widget, link):
self.emit('link-rm', link.pos)
diff --git a/messenger.py b/messenger.py
index f989559..489be0e 100644
--- a/messenger.py
+++ b/messenger.py
@@ -39,81 +39,79 @@ class Messenger(ExportedGObject):
self.linkbar = linkbar
self.model = model
self.owner = owner
- _logger.debug('Owner=%s %s' %(self.owner.props.nick, self.owner.props.color))
self.tube.watch_participants(self.participant_change_cb)
-
+
def participant_change_cb(self, added, removed):
- for handle in removed:
- _logger.debug('Member %s left' %(self.tube.participants[handle]))
- if self.tube.participants[handle] == self.members[0]:
- # TOFIX: the creator leaves the activity, name a new leader
- _logger.debug('The creator leaves.')
- # if self.id == 1:
- # _logger.debug('I become the new leader.')
- # self.is_initiator = True
+ _logger.debug('Participants change add=%s rem=%s' %(added, removed))
+ for handle, bus_name in added:
+ _logger.debug('Add member handle=%s bus_name=%s' %(str(handle), str(bus_name)))
+ self.members.append(bus_name)
+
+ for handle, bus_name in removed:
+ _logger.debug('Remove member handle=%s bus_name=%s' %(str(handle), str(bus_name)))
try:
- self.members.remove(self.tube.participants[handle])
+ self.members.remove(bus_name)
except ValueError:
# already absent
- pass
-
+ pass
+
if not self.entered:
self.tube.add_signal_receiver(self._add_link_receiver, '_add_link', IFACE, path=PATH, sender_keyword='sender',
byte_arrays=True)
- self.tube.add_signal_receiver(self._rm_link_receiver, '_rm_link', IFACE, path=PATH, sender_keyword='sender',
- byte_arrays=True)
- self.tube.add_signal_receiver(self._hello_receiver, '_hello_signal', IFACE, path=PATH, sender_keyword='sender')
if self.is_initiator:
- _logger.debug('Initialising a new shared browser, I am %s .'%self.tube.get_unique_name())
- self.id = self.tube.get_unique_name()
- self.members = [self.id]
+ _logger.debug('Initialising a new shared browser, I am %s .'%self.tube.get_unique_name())
else:
- self._hello_signal()
+ # sync with other members
+ self.bus_name = self.tube.get_unique_name()
+ _logger.debug('Joined I am %s .'%self.bus_name)
+ for member in self.members:
+ if member != self.bus_name:
+ _logger.debug('Get info from %s' %member)
+ self.tube.get_object(member, PATH).sync_with_members(self.model.get_links_ids(), dbus_interface=IFACE, reply_handler=self.reply_sync, error_handler=lambda e:self.error_sync(e, 'transfering file'))
+
self.entered = True
- @dbus.service.signal(IFACE, signature='')
- def _hello_signal(self):
- '''Notify current members that you joined '''
- _logger.debug('Sending hello to all')
-
- def _hello_receiver(self, sender=None):
- '''A new member joined the activity, sync linkbar'''
- self.members.append(sender)
- if self.is_initiator:
- self.tube.get_object(sender, PATH).init_members(self.members)
- for link in self.model.links:
+ def reply_sync(self, a_ids):
+ a_ids.pop()
+ for link in self.model.links:
+ if link['hash'] not in a_ids:
if link['deleted'] == 0:
- self.tube.get_object(sender, PATH).transfer_links(link['url'], link['title'], link['color'], link['owner'], base64.b64encode(link['thumb']),dbus_interface=IFACE, reply_handler=self.reply_transfer, error_handler=lambda e:self.error_transfer(e, 'transfering file'))
-
- def reply_transfer(self):
- pass
+ self.tube.get_object(sender, PATH).send_link(link['hash'], link['url'], link['title'], link['color'],
+ link['owner'], base64.b64encode(link['thumb']))
- def error_transfer(self, e, when):
+ def error_sync(self, e, when):
_logger.error('Error %s: %s'%(when, e))
- @dbus.service.method(dbus_interface=IFACE, in_signature='as', out_signature='')
- def init_members(self, members):
- '''Sync the list of members '''
- _logger.debug('Data received to sync member list.')
- self.members = members
- self.id = self.members.index(self.tube.get_unique_name())
-
- @dbus.service.method(dbus_interface=IFACE, in_signature='sssss', out_signature='')
- def transfer_links(self, url, title, color, owner, buffer):
- '''Sync the link list with the others '''
- _logger.debug('Data received to sync link list.')
- thumb = base64.b64decode(buffer)
- self.model.links.append( {'hash':sha.new(url).hexdigest(), 'url':url, 'title':title, 'thumb':thumb,
- 'owner':owner, 'color':color, 'deleted':0} )
- self.linkbar._add_link(url, thumb, color, title, owner, len(self.model.links)-1)
-
- def add_link(self, url, title, color, owner, thumb):
- _logger.debug('Add Link: %s '%url)
- self._add_link(url, title, color, owner, base64.b64encode(thumb))
+ @dbus.service.method(dbus_interface=IFACE, in_signature='as', out_signature='as', sender_keyword='sender')
+ def sync_with_members(self, b_ids, sender=None):
+ '''Sync with members '''
+ b_ids.pop()
+ # links the caller wants from me
+ for link in self.model.links:
+ if link['hash'] not in b_ids:
+ if link['deleted'] == 0:
+ self.tube.get_object(sender, PATH).send_link(link['hash'], link['url'], link['title'], link['color'],
+ link['owner'], base64.b64encode(link['thumb']))
+ a_ids = self.model.get_links_ids()
+ a_ids.append('')
+ # links I want from the caller
+ return a_ids
+ @dbus.service.method(dbus_interface=IFACE, in_signature='ssssss', out_signature='')
+ def send_link(self, id, url, title, color, owner, buffer):
+ '''Send link'''
+ _logger.debug('Received data for link.')
+ a_ids = self.model.get_links_ids()
+ if id not in a_ids:
+ thumb = base64.b64decode(buffer)
+ self.model.links.append( {'hash':sha.new(url).hexdigest(), 'url':url, 'title':title, 'thumb':thumb,
+ 'owner':owner, 'color':color, 'deleted':0} )
+ self.linkbar._add_link(url, thumb, color, title, owner, len(self.model.links)-1)
+
@dbus.service.signal(IFACE, signature='sssss')
def _add_link(self, url, title, color, owner, thumb):
'''Signal to send the link information (add)'''
+ _logger.debug('Add Link: %s '%url)
def _add_link_receiver(self, url, title, color, owner, thumb, sender=None):
'''Member sent a link'''
@@ -126,18 +124,3 @@ class Messenger(ExportedGObject):
self.linkbar._add_link(url, buffer, color, title, owner, len(self.model.links)-1)
_logger.debug('Added link: %s to linkbar.'%(url))
- def rm_link(self, linkname):
- _logger.debug('Remove Link: %s '%linkname)
- self._rm_link(linkname)
-
- @dbus.service.signal(IFACE, signature='s')
- def _rm_link(self, linkname):
- '''Signal to send the link information (rm)'''
-
- def _rm_link_receiver(self, linkname, sender=None):
- '''Member sent signal to remove a link'''
- handle = self.tube.bus_name_to_handle[sender]
- if self.tube.self_handle != handle:
- self.linkbar._rm_link_messenger(linkname)
- _logger.debug('Removed link: %s from linkbar.'%(linkname))
-
diff --git a/model.py b/model.py
index 7c91107..284cb7f 100644
--- a/model.py
+++ b/model.py
@@ -132,7 +132,13 @@ class Model(object):
return 2
doc.freeDoc()
return 0
-
+
+ def get_links_ids(self):
+ ids = []
+ for link in self.links:
+ ids.append(link['hash'])
+ ids.append('')
+ return ids
if __name__ == '__main__':
diff --git a/webactivity.py b/webactivity.py
index a0f4c43..f79236e 100755
--- a/webactivity.py
+++ b/webactivity.py
@@ -261,8 +261,8 @@ class WebActivity(activity.Activity):
i=0
for link in self.model.links:
_logger.debug('read: url=%s title=%s d=%s' % (link['url'], link['title'], link['color']))
- if link['deleted'] == 0:
- self.linkbar._add_link(link['url'], link['thumb'], i)
+ if link['deleted'] == 0:
+ self.linkbar._add_link(link['url'], link['thumb'], link['color'], link['title'], link['owner'], i)
i+=1
if self.model.session_data is not '':
@@ -308,19 +308,20 @@ class WebActivity(activity.Activity):
if event.state & gtk.gdk.CONTROL_MASK:
if gtk.gdk.keyval_name(event.keyval) == "l":
buffer = self._get_screenshot()
- _logger.debug('Add link: %s.' % self.current)
+ _logger.debug('keyboard: Add link: %s.' % self.current)
self.model.links.append( {'hash':sha.new(self.current).hexdigest(), 'url':self.current, 'title':self.webtitle,
'thumb':buffer, 'owner':self.owner.props.nick, 'color':self.owner.props.color, 'deleted':0} )
self.linkbar._add_link(self.current, buffer, self.owner.props.color, self.webtitle, self.owner.props.nick,
len(self.model.links)-1)
if self.messenger is not None:
- self.messenger.add_link(self.current, self.webtitle, self.owner.props.color, self.owner.props.nick, buffer)
+ import base64
+ self.messenger._add_link(self.current, self.webtitle, self.owner.props.color,
+ self.owner.props.nick, base64.b64encode(buffer))
return True
elif gtk.gdk.keyval_name(event.keyval) == "r":
- _logger.debug('Remove link: %s.' % self.current)
+ _logger.debug('keyboard: Remove link: %s.' % self.current)
current = self.linkbar._rm_link()
- _logger.debug('Remove link: %s.' % self.current)
self.model.links[current]['deleted'] = 1
self.model.links[current]['thumb'] = ''
return True