major rewrite
[wifi-assistant] / package / src / wifi_assistant / daemon / daemon.py
diff --git a/package/src/wifi_assistant/daemon/daemon.py b/package/src/wifi_assistant/daemon/daemon.py
new file mode 100644 (file)
index 0000000..5948e17
--- /dev/null
@@ -0,0 +1,121 @@
+#!/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()