From be000b84871de2015a10fdb41c07e77b7ed979f9 Mon Sep 17 00:00:00 2001 From: Guillaume Desmottes Date: Tue, 28 Oct 2008 10:55:46 +0000 Subject: Re-request closed random views (#8900) --- (limited to 'src') diff --git a/src/jarabe/model/neighborhood.py b/src/jarabe/model/neighborhood.py index 7aada26..7f95875 100644 --- a/src/jarabe/model/neighborhood.py +++ b/src/jarabe/model/neighborhood.py @@ -27,7 +27,8 @@ from jarabe.model import bundleregistry from jarabe.util.telepathy import connection_watcher from dbus import PROPERTIES_IFACE -from telepathy.interfaces import CONNECTION_INTERFACE_REQUESTS +from telepathy.interfaces import CONNECTION_INTERFACE_REQUESTS, CHANNEL_INTERFACE +from telepathy.client import Channel CONN_INTERFACE_GADGET = 'org.laptop.Telepathy.Gadget' CHAN_INTERFACE_VIEW = 'org.laptop.Telepathy.Channel.Interface.View' @@ -125,21 +126,38 @@ class Neighborhood(gobject.GObject): def _request_random_buddies(self, conn, nb): logging.debug("Request %d random buddies" % nb) - conn[CONNECTION_INTERFACE_REQUESTS].CreateChannel( + path, props = conn[CONNECTION_INTERFACE_REQUESTS].CreateChannel( { 'org.freedesktop.Telepathy.Channel.ChannelType': 'org.laptop.Telepathy.Channel.Type.BuddyView', 'org.laptop.Telepathy.Channel.Interface.View.MaxSize': nb }) + view = Channel(conn.service_name, path) + view[CHANNEL_INTERFACE].connect_to_signal('Closed', + lambda: self.__respawnable_view_closed_cb( + lambda: self._request_random_buddies(conn, nb))) + def _request_random_activities(self, conn, nb): logging.debug("Request %d random activities" % nb) - conn[CONNECTION_INTERFACE_REQUESTS].CreateChannel( + path, props = conn[CONNECTION_INTERFACE_REQUESTS].CreateChannel( { 'org.freedesktop.Telepathy.Channel.ChannelType': 'org.laptop.Telepathy.Channel.Type.ActivityView', 'org.laptop.Telepathy.Channel.Interface.View.MaxSize': nb }) + view = Channel(conn.service_name, path) + view[CHANNEL_INTERFACE].connect_to_signal('Closed', + lambda: self.__respawnable_view_closed_cb( + lambda: self._request_random_activities(conn, nb))) + + def __respawnable_view_closed_cb(self, request_fct): + # Views are closed if the Gadget component is restarted. As we always + # want to have the random views opened, we re-request them if they are + # closed. + logging.debug('View closed. Re-request it') + request_fct() + def _get_buddies_cb(self, buddy_list): for buddy in buddy_list: self._buddy_appeared_cb(self._pservice, buddy) -- cgit v0.9.1