--- /dev/null
+#!/usr/bin/python2.5
+import gtk, hildon
+import conic
+import gobject
+
+from launcher import Launcher
+
+def _(str):
+ return str
+
+class Daemon():
+
+ def __init__(self, launcher, application_settings, network_settings, parent_window):
+ self._application_settings = application_settings
+ self._network_settings = network_settings
+ self._parent = parent_window
+ self._launcher = launcher
+ self._popup = self._application_settings.getUsePopup()
+
+
+ def connectionEstablished(self, ssid):
+ settings = self._network_settings.get(ssid)
+ if settings is None:
+ if self.showDecisionDialog(ssid):
+ defaults = self._network_settings.getDefaultSettings()
+ self.launchBrowser(defaults)
+ return
+
+ if settings.getLaunchingOfBrowserEnabled():
+ self.launchBrowser(settings)
+
+
+ def launchBrowser(self, settings):
+ browser_name = settings.getNameOfBrowserToLaunch()
+ browser_options = settings.getBrowserOptions()
+ if 'url' in browser_options:
+ self._launcher.launchBrowser(browser_name, browser_options)
+ # the following line is the backwards compatible line
+ else:
+ settings = self._network_settings.getDefaultSettings()
+ self.launchBrowser(settings)
+
+ def showDecisionDialog(self, ssid):
+ if not self._popup:
+ return False
+
+ dialog = self._createDialog(ssid)
+
+ dialog.show_all()
+ result = dialog.run()
+ dialog.hide()
+
+ launch_browser = (result == gtk.RESPONSE_YES)
+ if checkbox.get_active():
+ setting = NetworkSetting()
+ setting.setNetworkName(ssid)
+ setting.setLaunchingOfBrowserEnabled(launch_browser)
+ self._network_settings.save(setting)
+
+ return launch_browser
+
+
+ def start(self):
+ self._connection = conic.Connection()
+ self._connection.connect("connection-event", self._connectionEventCallback)
+ self._connection.set_property("automatic-connection-events", True)
+ self._application_settings.registerUsePopupListener(self._usePopupEventCallback)
+ self._startLoop()
+
+
+ def stop(self):
+ self._application_settings.unregisterUsePopupListener(self._usePopupEventCallback)
+ self._connection.set_property("automatic-connection-events", False)
+
+
+ def _createDialog(self, ssid):
+ dialog = gtk.Dialog(ssid, self._parent)
+ dialog.vbox.set_homogeneous(False)
+
+ dialog.add_button(_('No'), gtk.RESPONSE_NO)
+ dialog.add_button(_('Yes'), gtk.RESPONSE_YES)
+
+ label = gtk.Label(_('New network connection established - do you wish to launch a browser?'))
+ label.set_line_wrap(True)
+ #label.set_justify(gtk.JUSTIFY_LEFT)
+ #label.set_alignment(0, 0.5)
+ dialog.vbox.add(label)
+
+ checkbox = hildon.CheckButton(gtk.HILDON_SIZE_FINGER_HEIGHT)
+ checkbox.set_label(_('Remember this decision'))
+ checkbox.set_active(True)
+ dialog.vbox.add(checkbox)
+
+ return dialog
+
+
+ def _connectionEventCallback(self, connection, event):
+ status = event.get_status()
+ if status == conic.STATUS_CONNECTED:
+ # assemble id > name dict
+ iap_id_to_name = {}
+ iaps = connection.get_all_iaps()
+ for iap in iaps:
+ iap_id = iap.get_id()
+ iap_name = iap.get_name()
+ iap_id_to_name[iap_id] = iap_name
+
+ # get name of network
+ iap_id = event.get_iap_id()
+ iap_name = None
+ if (iap_id_to_name.has_key(iap_id)):
+ iap_name = iap_id_to_name[iap_id]
+ self.connectionEstablished(iap_name)
+
+
+ def _usePopupEventCallback(self, gconfClient, id, gconfEntry, x):
+ self._popup = gconfEntry.get_value().get_bool()
+
+
+ def _startLoop(self):
+ gtk.main()