diff frontends/quick_frontend/quick_app.py @ 183:9ee4a1d0d7fb

Added auto(dis)connect params + misc - parameters,xmlui: "bool" type is now managed - parameters,xmlui: categories now use label in addition of name - QuickFrontend: auto(dis)connection management - plugin XEP-0045: an error dialog is now show in frontend if room cannot be joined - Wix: fixed unproper close event management
author Goffi <goffi@goffi.org>
date Wed, 18 Aug 2010 15:57:26 +0800
parents 556c2bd7c344
children 7baee9bb37af
line wrap: on
line diff
--- a/frontends/quick_frontend/quick_app.py	Wed Aug 18 12:45:48 2010 +0800
+++ b/frontends/quick_frontend/quick_app.py	Wed Aug 18 15:57:26 2010 +0800
@@ -119,42 +119,47 @@
         
         ###now we get the essential params###
         self.profiles[profile]['whoami']=JID(self.bridge.getParamA("JabberID","Connection", profile))
+        autoconnect = self.bridge.getParamA("autoconnect","Connection", profile) == "true"
         self.profiles[profile]['watched']=self.bridge.getParamA("Watched", "Misc", profile).split() #TODO: put this in a plugin
 
         ## misc ##
         self.profiles[profile]['onlineContact'] = set()  #FIXME: temporary
 
-        #TODO: gof: managed multi-profiles here
-        if self.bridge.isConnected(profile):
-            self.setStatusOnline(True)
-        else:
+        #TODO: gof: manage multi-profiles here
+        if not self.bridge.isConnected(profile):
             self.setStatusOnline(False)
-            return
+        else:
+            self.setStatusOnline(True)
 
-        ### now we fill the contact list ###
-        for contact in self.bridge.getContacts(profile):
-            self.newContact(contact[0], contact[1], contact[2], profile)
+            ### now we fill the contact list ###
+            for contact in self.bridge.getContacts(profile):
+                self.newContact(contact[0], contact[1], contact[2], profile)
 
-        presences = self.bridge.getPresenceStatus(profile)
-        for contact in presences:
-            for res in presences[contact]:
-                jabber_id = contact+('/'+res if res else '')
-                show = presences[contact][res][0]
-                priority = presences[contact][res][1]
-                statuses = presences[contact][res][2]
-                self.presenceUpdate(jabber_id, show, priority, statuses, profile)
+            presences = self.bridge.getPresenceStatus(profile)
+            for contact in presences:
+                for res in presences[contact]:
+                    jabber_id = contact+('/'+res if res else '')
+                    show = presences[contact][res][0]
+                    priority = presences[contact][res][1]
+                    statuses = presences[contact][res][2]
+                    self.presenceUpdate(jabber_id, show, priority, statuses, profile)
 
-        #The waiting subscription requests
-        waitingSub = self.bridge.getWaitingSub(profile)
-        for sub in waitingSub:
-            self.subscribe(waitingSub[sub], sub, profile)
+            #The waiting subscription requests
+            waitingSub = self.bridge.getWaitingSub(profile)
+            for sub in waitingSub:
+                self.subscribe(waitingSub[sub], sub, profile)
 
-        #Now we open the MUC window where we already are:
-        for room_args in self.bridge.getRoomJoined(profile):
-            self.roomJoined(*room_args, profile=profile)
+            #Now we open the MUC window where we already are:
+            for room_args in self.bridge.getRoomJoined(profile):
+                self.roomJoined(*room_args, profile=profile)
 
-        for subject_args in self.bridge.getRoomSubjects(profile):
-            self.roomNewSubject(*subject_args, profile=profile)
+            for subject_args in self.bridge.getRoomSubjects(profile):
+                self.roomNewSubject(*subject_args, profile=profile)
+        
+        if autoconnect and not self.bridge.isConnected(profile_key):
+            #Does the user want autoconnection ?
+            self.bridge.connect(profile_key)
+        
 
     def unplug_profile(self, profile):
         """Tell the application to not follow anymore the profile"""
@@ -420,3 +425,11 @@
     
     def actionResult(self, type, id, data):
         raise NotImplementedError
+
+    def onExit(self):
+        """Must be called when the frontend is terminating"""
+        #TODO: mange multi-profile here
+        autodisconnect = self.bridge.getParamA("autodisconnect","Connection", self.profile) == "true"
+        if autodisconnect and self.bridge.isConnected(self.profile):
+            #Does the user want autodisconnection ?
+            self.bridge.disconnect(self.profile)