From 08e96f508c5d099059bb098433c30b504ac96b83 Mon Sep 17 00:00:00 2001 From: Simon Schampijer Date: Sat, 01 Sep 2007 14:52:05 +0000 Subject: Finalized the work to move to json We now use json for storing the history and the shared link information to the journal. --- diff --git a/messenger.py b/messenger.py index e7edbdf..37976fc 100644 --- a/messenger.py +++ b/messenger.py @@ -40,13 +40,16 @@ class Messenger(ExportedGObject): self.tube.watch_participants(self.participant_change_cb) def participant_change_cb(self, added, removed): - _logger.debug('Participants change add=%s rem=%s' %(added, removed)) + _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))) + _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))) + _logger.debug('Remove member handle=%s bus_name=%s' + %(str(handle), str(bus_name))) try: self.members.remove(bus_name) except ValueError: @@ -54,10 +57,13 @@ class Messenger(ExportedGObject): 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._add_link_receiver, '_add_link', + IFACE, path=PATH, + sender_keyword='sender', + byte_arrays=True) if self.is_initiator: - _logger.debug('Initialising a new shared browser, I am %s .'%self.tube.get_unique_name()) + _logger.debug('Initialising a new shared browser, I am %s .' + %self.tube.get_unique_name()) else: # sync with other members self.bus_name = self.tube.get_unique_name() @@ -65,17 +71,21 @@ class Messenger(ExportedGObject): 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.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 def reply_sync(self, a_ids): a_ids.pop() - for link in self.model.links: + for link in self.model.data['shared_links']: if link['hash'] not in a_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'])) + self.tube.get_object(sender, PATH).send_link( + link['hash'], link['url'], link['title'], link['color'], + link['owner'], link['thumb']) def error_sync(self, e, when): _logger.error('Error %s: %s'%(when, e)) @@ -85,11 +95,11 @@ class Messenger(ExportedGObject): '''Sync with members ''' b_ids.pop() # links the caller wants from me - for link in self.model.links: + for link in self.model.data['shared_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'])) + link['owner'], link['thumb']) a_ids = self.model.get_links_ids() a_ids.append('') # links I want from the caller @@ -98,9 +108,7 @@ class Messenger(ExportedGObject): @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() - print a_ids if id not in a_ids: thumb = base64.b64decode(buffer) self.model.add_link(url, title, thumb, owner, color) @@ -110,11 +118,11 @@ class Messenger(ExportedGObject): '''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): + def _add_link_receiver(self, url, title, color, owner, buffer, sender=None): '''Member sent a link''' handle = self.tube.bus_name_to_handle[sender] if self.tube.self_handle != handle: - buffer = base64.b64decode(thumb) - self.model.add_link(url, title, buffer, owner, color) + thumb = base64.b64decode(buffer) + self.model.add_link(url, title, thumb, owner, color) _logger.debug('Added link: %s to linkbar.'%(url)) diff --git a/model.py b/model.py index 4fdb708..1ee85f8 100644 --- a/model.py +++ b/model.py @@ -17,16 +17,14 @@ # import os -import logging import json import sha import gobject - -_logger = logging.getLogger('model') +import base64 class Model(gobject.GObject): - ''' The model of the activity which uses json to serialize its data - to a file and deserelize from it. + ''' The model of web-activity which uses json to serialize its data + to a file and deserealize from it. ''' __gsignals__ = { 'add_link': (gobject.SIGNAL_RUN_FIRST, @@ -35,31 +33,31 @@ class Model(gobject.GObject): def __init__(self): gobject.GObject.__init__(self) - self.data = {} - self._links = [] - self.data['shared_links'] = self._links + self.data['shared_links'] = [] def add_link(self, url, title, thumb, owner, color): - self.links.append( {'hash':sha.new(url).hexdigest(), 'url':url, 'title':title, 'thumb':thumb, - 'owner':owner, 'color':color, 'deleted':0} ) - self.emit('add_link', len(self.links)-1) + self.data['shared_links'].append( {'hash':sha.new(str(url)).hexdigest(), + 'url':str(url), 'title':str(title), + 'thumb':base64.b64encode(thumb), + 'owner':str(owner), + 'color':str(color), 'deleted':0} ) + self.emit('add_link', len(self.data['shared_links'])-1) def mark_link_deleted(self, index): - self._links[index]['deleted'] = 1 - self._links[index]['thumb'] = '' + self.data['shared_links'][index]['deleted'] = 1 + self.data['shared_links'][index]['thumb'] = '' def serialize(self): - self.get_session() + print self.data return json.write(self.data) def deserialize(self, data): self.data = json.read(data) - self.links = self.data def get_links_ids(self): ids = [] - for link in self._links: + for link in self.data['shared_links']: ids.append(link['hash']) ids.append('') return ids diff --git a/webactivity.py b/webactivity.py index 85ce780..9f5a848 100755 --- a/webactivity.py +++ b/webactivity.py @@ -21,7 +21,8 @@ from gettext import gettext as _ import gtk import dbus import sha - +import base64 + from sugar.activity import activity from sugar import env from sugar.graphics import style @@ -87,6 +88,7 @@ class WebActivity(activity.Activity): self.session_history = sessionhistory.get_instance() self.session_history.connect('session-link-changed', self._session_history_changed_cb) self.toolbar._add_link.connect('clicked', self._share_link_button_cb) + self.tray_isvisible = False self._browser.connect("notify::title", self._title_changed_cb) @@ -262,14 +264,20 @@ class WebActivity(activity.Activity): def read_file(self, file_path): if self.metadata['mime_type'] == 'text/plain': - self.model.deserialize(file_path) + f = open(file_path, 'r') + try: + data = f.read() + finally: + f.close() + self.model.deserialize(data) + i=0 - for link in self.model['shared_links']: + for link in self.model.data['shared_links']: _logger.debug('read: url=%s title=%s d=%s' % (link['url'], link['title'], link['color'])) if link['deleted'] == 0: - self._add_link_totray(link['url'], link['thumb'], + self._add_link_totray(link['url'], base64.b64decode(link['thumb']), link['color'], link['title'], link['owner'], i) i+=1 @@ -289,8 +297,13 @@ class WebActivity(activity.Activity): if self._browser.props.title: self.metadata['title'] = self._browser.props.title - self.model.data['history'] = self._browser.get_session() - # self.model.write(file_path) + self.model.data['history'] = self._browser.get_session() + + f = open(file_path, 'w') + try: + f.write(self.model.serialize()) + finally: + f.close() def _share_link_button_cb(self, button): _logger.debug('button: Add link: %s.' % self.current) @@ -315,7 +328,6 @@ class WebActivity(activity.Activity): self.owner.props.nick, self.owner.props.color) if self.messenger is not None: - import base64 self.messenger._add_link(self.current, self.webtitle, self.owner.props.color, self.owner.props.nick, @@ -323,8 +335,8 @@ class WebActivity(activity.Activity): def _add_link_model_cb(self, model, index): ''' receive index of new link from the model ''' - link = self.model._links[index] - self._add_link_totray(link['url'], link['thumb'], + link = self.model.data['shared_links'][index] + self._add_link_totray(link['url'], base64.b64decode(link['thumb']), link['color'], link['title'], link['owner'], index) @@ -335,6 +347,7 @@ class WebActivity(activity.Activity): item.connect('remove_link', self._link_removed_cb) self._tray.add_item(item, 0) # add to the beginning of the tray item.show() + self.tray_isvisible = True def _link_removed_cb(self, button, index): ''' remove a link from tray and mark deleted in the model ''' @@ -346,11 +359,11 @@ class WebActivity(activity.Activity): self._browser.load_uri(url) def _toggle_visibility_tray(self): - if self._tray.isvisible is True: - self._tray.isvisible = False + if self.tray_isvisible is True: + self.tray_isvisible = False self._tray.hide() else: - self._tray.isvisible = True + self.tray_isvisible = True self._tray.show() def _pixbuf_save_cb(self, buf, data): -- cgit v0.9.1