Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Schampijer <simon@schampijer.de>2007-09-01 14:52:05 (GMT)
committer Simon Schampijer <simon@schampijer.de>2007-09-01 14:52:05 (GMT)
commit08e96f508c5d099059bb098433c30b504ac96b83 (patch)
treef637ff479cb64ba1299069a7ae695e78bfb521ca
parent15758583c51de734d49f2af241ca87e53ca7e2e6 (diff)
Finalized the work to move to json
We now use json for storing the history and the shared link information to the journal.
-rw-r--r--messenger.py42
-rw-r--r--model.py30
-rwxr-xr-xwebactivity.py37
3 files changed, 64 insertions, 45 deletions
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):