From d778d45b13eb261d623d426097bf36bf6470a398 Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Wed, 26 Jul 2006 18:00:28 +0200 Subject: [PATCH] Load the current page when joining an active. Get back page sharing to work. --- activities/browser/BrowserActivity.py | 41 +++++++++++++++--------- shell/PresenceService/PresenceService.py | 2 +- shell/sugar-activity-factory | 4 +-- sugar/p2p/model/LocalModel.py | 3 +- 4 files changed, 29 insertions(+), 21 deletions(-) diff --git a/activities/browser/BrowserActivity.py b/activities/browser/BrowserActivity.py index 690eb068..c62ca719 100644 --- a/activities/browser/BrowserActivity.py +++ b/activities/browser/BrowserActivity.py @@ -57,19 +57,22 @@ class BrowserActivity(Activity): vbox.show() self._pservice = PresenceService() - self._pservice.connect('service-appeared', self._service_appeared_cb) - # Join the shared activity if we were started from one - if self._initial_service: - logging.debug("BrowserActivity joining shared activity %s" % - self._initial_service.get_activity_id()) - self._pservice.join_shared_activity(self._initial_service) + if service: + service.connect('service-appeared', self._service_appeared_cb) + + services = service.get_services_of_type('_web_olpc._udp') + if len(services) > 0: + self._notif_service = services[0] + + services = service.get_services_of_type(LocalModel.SERVICE_TYPE) + if len(services) > 0: + self._model_service = services[0] + + if self._notif_service and self._model_service: + self._listen_to_model() def _service_appeared_cb(self, pservice, service): - # Make sure the service is for our activity - if service.get_activity_id() != self._activity_id: - return - if service.get_type() == self._default_type: self._notif_service = service elif service.get_type() == LocalModel.SERVICE_TYPE: @@ -77,8 +80,12 @@ class BrowserActivity(Activity): self._model_service = service if not self._model and self._notif_service and self._model_service: - self._model = RemoteModel(self._model_service, self._notif_service) - self._model.add_listener(self.__shared_location_changed_cb) + self._listen_to_model() + + def _listen_to_model(self): + self._model = RemoteModel(self._model_service, self._notif_service) + self._model.add_listener(self.__shared_location_changed_cb) + self._go_to_shared_location() def _update_shared_location(self): address = self.embed.get_address() @@ -90,9 +97,12 @@ class BrowserActivity(Activity): if action_id == 'set_shared_location': self._update_shared_location() elif action_id == 'goto_shared_location': - address = self._model.get_value("address") - self.embed.load_address(address) - self._notif_bar.hide() + self._go_to_shared_location() + + def _go_to_shared_location(self): + address = self._model.get_value("address") + self.embed.load_address(address) + self._notif_bar.hide() def set_mode(self, mode): self._mode = mode @@ -125,7 +135,6 @@ class BrowserActivity(Activity): self.set_title(embed.get_title()) def __shared_location_changed_cb(self, model, key): - self.set_has_changes(True) self._notify_shared_location_change() def _notify_shared_location_change(self): diff --git a/shell/PresenceService/PresenceService.py b/shell/PresenceService/PresenceService.py index 86377b88..f17e1c6b 100644 --- a/shell/PresenceService/PresenceService.py +++ b/shell/PresenceService/PresenceService.py @@ -584,7 +584,7 @@ class PresenceService(object): real_name = Service.compose_service_name(owner_nick, activity_id) if address and type(address) != type(u""): raise ValueError("address must be a unicode string.") - if address == None or not len(address): + if address == None and stype.endswith('_udp'): # Use random currently unassigned multicast address address = u"232.%d.%d.%d" % (random.randint(0, 254), random.randint(1, 254), random.randint(1, 254)) diff --git a/shell/sugar-activity-factory b/shell/sugar-activity-factory index 1b42fbf6..53789d41 100755 --- a/shell/sugar-activity-factory +++ b/shell/sugar-activity-factory @@ -12,8 +12,8 @@ from sugar import theme theme.setup() -lw = LogWriter(sys.argv[1]) -lw.start() +#lw = LogWriter(sys.argv[1]) +#lw.start() if len(sys.argv) == 4: Activity.register_factory(sys.argv[1], sys.argv[2], sys.argv[3]) diff --git a/sugar/p2p/model/LocalModel.py b/sugar/p2p/model/LocalModel.py index 5be542b7..b19e07e4 100644 --- a/sugar/p2p/model/LocalModel.py +++ b/sugar/p2p/model/LocalModel.py @@ -38,8 +38,7 @@ class LocalModel(AbstractModel): def _setup_service(self): service = self._pservice.share_activity(self._activity, - stype = LocalModel.SERVICE_TYPE, - address = '') + stype = LocalModel.SERVICE_TYPE) self._setup_server(service) # FIXME this is duplicated with StreamReader