Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarco 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)
commitcf8efed575efa4fbd5f97a522259eb351317845f (patch)
tree43df665ac0f98accb3e995a7afbebd8a423e93c5 /src
parenta15157462275eee51d785f20dee110f48eae4e72 (diff)
parentca195a27fbbe5b9ee2ce188374f99f6614273d64 (diff)
Merge branch 'master' of git+ssh://dev.laptop.org/git/sugar
Diffstat (limited to 'src')
-rw-r--r--src/jarabe/desktop/favoritesview.py21
-rw-r--r--src/jarabe/model/neighborhood.py62
-rw-r--r--src/jarabe/model/shell.py4
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()