diff options
author | Marco Pesenti Gritti <mpgritti@gmail.com> | 2008-10-22 12:08:27 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <mpgritti@gmail.com> | 2008-10-22 12:08:27 (GMT) |
commit | cf8efed575efa4fbd5f97a522259eb351317845f (patch) | |
tree | 43df665ac0f98accb3e995a7afbebd8a423e93c5 /src | |
parent | a15157462275eee51d785f20dee110f48eae4e72 (diff) | |
parent | ca195a27fbbe5b9ee2ce188374f99f6614273d64 (diff) |
Merge branch 'master' of git+ssh://dev.laptop.org/git/sugar
Diffstat (limited to 'src')
-rw-r--r-- | src/jarabe/desktop/favoritesview.py | 21 | ||||
-rw-r--r-- | src/jarabe/model/neighborhood.py | 62 | ||||
-rw-r--r-- | src/jarabe/model/shell.py | 4 |
3 files changed, 78 insertions, 9 deletions
diff --git a/src/jarabe/desktop/favoritesview.py b/src/jarabe/desktop/favoritesview.py index e988692..4c840dd 100644 --- a/src/jarabe/desktop/favoritesview.py +++ b/src/jarabe/desktop/favoritesview.py @@ -412,9 +412,10 @@ class CurrentActivityIcon(CanvasIcon, hippo.CanvasItem): def __init__(self): CanvasIcon.__init__(self, cache=True) self._home_model = shell.get_model() + self._home_activity = self._home_model.get_active_activity() - if self._home_model.get_active_activity() is not None: - self._update(self._home_model.get_active_activity()) + if self._home_activity is not None: + self._update() self._home_model.connect('active-activity-changed', self.__active_activity_changed_cb) @@ -424,23 +425,25 @@ class CurrentActivityIcon(CanvasIcon, hippo.CanvasItem): def __button_release_event_cb(self, icon, event): self._home_model.get_active_activity().get_window().activate(1) - def _update(self, home_activity): - self.props.file_name = home_activity.get_icon_path() - self.props.xo_color = home_activity.get_icon_color() + def _update(self): + self.props.file_name = self._home_activity.get_icon_path() + self.props.xo_color = self._home_activity.get_icon_color() self.props.size = style.STANDARD_ICON_SIZE if self.palette is not None: self.palette.destroy() self.palette = None + def create_palette(self): if home_activity.is_journal(): - palette = JournalPalette(home_activity) + palette = JournalPalette(self._home_activity) else: - palette = CurrentActivityPalette(home_activity) - self.set_palette(palette) + palette = CurrentActivityPalette(self._home_activity) + return palette def __active_activity_changed_cb(self, home_model, home_activity): - self._update(home_activity) + self._home_activity = home_activity + self._update() class _MyIcon(MyIcon): def __init__(self, scale): diff --git a/src/jarabe/model/neighborhood.py b/src/jarabe/model/neighborhood.py index b8dd5c3..7aada26 100644 --- a/src/jarabe/model/neighborhood.py +++ b/src/jarabe/model/neighborhood.py @@ -15,6 +15,8 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import gobject +import gconf +import logging from sugar.graphics.xocolor import XoColor from sugar.presence import presenceservice @@ -22,6 +24,18 @@ from sugar import activity from jarabe.model.buddy import BuddyModel from jarabe.model import bundleregistry +from jarabe.util.telepathy import connection_watcher + +from dbus import PROPERTIES_IFACE +from telepathy.interfaces import CONNECTION_INTERFACE_REQUESTS + +CONN_INTERFACE_GADGET = 'org.laptop.Telepathy.Gadget' +CHAN_INTERFACE_VIEW = 'org.laptop.Telepathy.Channel.Interface.View' +CHAN_INTERFACE_BUDBY_VIEW = 'org.laptop.Telepathy.Channel.Type.BuddyView' +CHAN_INTERFACE_ACTIVITY_VIEW = 'org.laptop.Telepathy.Channel.Type.ActivityView' + +NB_RANDOM_BUDDIES = 20 +NB_RANDOM_ACTIVITIES = 40 class ActivityModel: def __init__(self, act, bundle): @@ -78,6 +92,54 @@ class Neighborhood(gobject.GObject): self._pservice.get_activities_async( reply_handler=self._get_activities_cb) + self._conn_watcher = connection_watcher.ConnectionWatcher() + self._conn_watcher.connect('connection-added', self.__conn_addded_cb) + + for conn in self._conn_watcher.get_connections(): + self.__conn_addded_cb(self._conn_watcher, conn) + + def __conn_addded_cb(self, watcher, conn): + if CONN_INTERFACE_GADGET not in conn: + return + + conn[CONN_INTERFACE_GADGET].connect_to_signal('GadgetDiscovered', + lambda: self._gadget_discovered(conn)) + + gadget_discovered = conn[PROPERTIES_IFACE].Get(CONN_INTERFACE_GADGET, + 'GadgetAvailable') + if gadget_discovered: + self._gadget_discovered(conn) + + def _gadget_discovered(self, conn): + # FIXME: watch change of the gconf key + client = gconf.client_get_default() + publish = client.get_bool('/desktop/sugar/collaboration/publish_gadget') + logging.debug("Gadget discovered on connection %s." + " Publish our status: %r" % + (conn.service_name.split('.')[-1], publish)) + conn[CONN_INTERFACE_GADGET].Publish(publish) + + self._request_random_buddies(conn, NB_RANDOM_BUDDIES) + self._request_random_activities(conn, NB_RANDOM_ACTIVITIES) + + def _request_random_buddies(self, conn, nb): + logging.debug("Request %d random buddies" % nb) + + conn[CONNECTION_INTERFACE_REQUESTS].CreateChannel( + { 'org.freedesktop.Telepathy.Channel.ChannelType': + 'org.laptop.Telepathy.Channel.Type.BuddyView', + 'org.laptop.Telepathy.Channel.Interface.View.MaxSize': nb + }) + + def _request_random_activities(self, conn, nb): + logging.debug("Request %d random activities" % nb) + + conn[CONNECTION_INTERFACE_REQUESTS].CreateChannel( + { 'org.freedesktop.Telepathy.Channel.ChannelType': + 'org.laptop.Telepathy.Channel.Type.ActivityView', + 'org.laptop.Telepathy.Channel.Interface.View.MaxSize': nb + }) + def _get_buddies_cb(self, buddy_list): for buddy in buddy_list: self._buddy_appeared_cb(self._pservice, buddy) diff --git a/src/jarabe/model/shell.py b/src/jarabe/model/shell.py index 1810e7e..64f5e09 100644 --- a/src/jarabe/model/shell.py +++ b/src/jarabe/model/shell.py @@ -203,6 +203,10 @@ class Activity(gobject.GObject): """Returns the activity's PID""" return self._window.get_pid() + def get_bundle_path(self): + """Returns the activity's bundle directory""" + return self._activity_info.get_path() + def equals(self, activity): if self._activity_id and activity.get_activity_id(): return self._activity_id == activity.get_activity_id() |