Don't install *.jpg files with the Plugin metadata to save space.
[enigma2.git] / lib / python / Plugins / Extensions / FritzCall / plugin.py
index 816d3c35ed77eec48fd9819218d883df2f46e90a..be76f79e12987842c4a3a1fe2481cf0f99c88a87 100644 (file)
@@ -1,7 +1,6 @@
 from Screens.Screen import Screen
 from Screens.MessageBox import MessageBox
-from Components.ActionMap import NumberActionMap
-from Components.Label import Label
+from Components.ActionMap import ActionMap
 from Plugins.Plugin import PluginDescriptor
 from Tools import Notifications
 
@@ -9,18 +8,16 @@ from twisted.internet import reactor
 from twisted.internet.protocol import ReconnectingClientFactory
 from twisted.protocols.basic import LineReceiver
 
-from enigma import eTimer
-
 my_global_session = None
 
-from Components.config import config, ConfigSubsection, ConfigIP, ConfigEnableDisable
-from Components.ConfigList import ConfigList
+from Components.config import config, ConfigSubsection, ConfigIP, ConfigEnableDisable, getConfigListEntry
+from Components.ConfigList import ConfigListScreen
 
-config.FritzCall = ConfigSubsection()
-config.FritzCall.hostname = ConfigIP(default = [192,168,178,254])
-config.FritzCall.enable = ConfigEnableDisable()
+config.plugins.FritzCall = ConfigSubsection()
+config.plugins.FritzCall.hostname = ConfigIP(default = [192,168,178,254])
+config.plugins.FritzCall.enable = ConfigEnableDisable(default = False)
 
-class FritzCallSetup(Screen):
+class FritzCallSetup(ConfigListScreen, Screen):
        skin = """
                <screen position="100,100" size="550,400" title="FritzCall Setup" >
                <widget name="config" position="20,10" size="460,350" scrollbarMode="showOnDemand" />
@@ -28,41 +25,22 @@ class FritzCallSetup(Screen):
 
 
        def __init__(self, session, args = None):
-               from Tools.BoundFunction import boundFunction
-               
-               print "screen init"
                Screen.__init__(self, session)
                self.onClose.append(self.abort)
                
                # nun erzeugen wir eine liste von elementen fuer die menu liste.
                self.list = [ ]
-               self.list.append(getConfigListEntry(_("Call monitoring"), config.FritzCall.enable))
-               self.list.append(getConfigListEntry(_("Fritz!Box FON IP address"), config.FritzCall.hostname))
-               self["config"] = ConfigList(self.list)
+               self.list.append(getConfigListEntry(_("Call monitoring"), config.plugins.FritzCall.enable))
+               self.list.append(getConfigListEntry(_("Fritz!Box FON IP address"), config.plugins.FritzCall.hostname))
+               ConfigListScreen.__init__(self, self.list)
 
-               # DO NOT ASK.           
-               self["setupActions"] = NumberActionMap(["SetupActions"],
+               # DO NOT ASK.
+               self["setupActions"] = ActionMap(["SetupActions"],
                {
-                       "left": boundFunction(self["config"].handleKey, config.key["prevElement"]),
-                       "right": boundFunction(self["config"].handleKey, config.key["nextElement"]),
-                       "1": self.keyNumberGlobal,
-                       "2": self.keyNumberGlobal,
-                       "3": self.keyNumberGlobal,
-                       "4": self.keyNumberGlobal,
-                       "5": self.keyNumberGlobal,
-                       "6": self.keyNumberGlobal,
-                       "7": self.keyNumberGlobal,
-                       "8": self.keyNumberGlobal,
-                       "9": self.keyNumberGlobal,
-                       "0": self.keyNumberGlobal,
                        "save": self.save,
                        "cancel": self.cancel,
                        "ok": self.save,
-               }, -1)
-       # FIX ME.
-       def keyNumberGlobal(self, number):
-               if self["config"].getCurrent()[1].parent.enabled == True:
-                       self["config"].handleKey(config.key[str(number)])
+               }, -2)
 
        def abort(self):
                print "aborting"
@@ -91,16 +69,20 @@ class FritzProtocol(LineReceiver):
 
                a = line.split(';')
                (date, event) = a[0:2]
+               line = a[2]
                
                if event == "RING":
                        phone = a[4]
                        number = a[3]
                        text = _("incoming call!\n%s calls on %s!") % (number, phone)
                        timeout = 10
+               elif event == "DISCONNECT":
+                       Notifications.RemovePopup("FritzCall_%s" % line)
+                       return
                else:   
                        return
                
-               Notifications.AddNotification(MessageBox, text, type=MessageBox.TYPE_INFO, timeout=timeout)
+               Notifications.AddPopup(text=text, type=MessageBox.TYPE_INFO, timeout=timeout, id="FritzCall_%s" % line)
 
 class FritzClientFactory(ReconnectingClientFactory):
 
@@ -111,20 +93,20 @@ class FritzClientFactory(ReconnectingClientFactory):
                self.hangup_ok = False
 
        def startedConnecting(self, connector):
-               Notifications.AddNotification(MessageBox, _("Connecting to Fritz!Box..."), type=MessageBox.TYPE_INFO, timeout=2)
-       
+               Notifications.AddPopup(text=_("Connecting to Fritz!Box..."), type=MessageBox.TYPE_INFO, timeout=2, id="FritzCallConnect")
+
        def buildProtocol(self, addr):
-               Notifications.AddNotification(MessageBox, _("Connected to Fritz!Box!"), type=MessageBox.TYPE_INFO, timeout=2)
+               Notifications.AddPopup(text=_("Connected to Fritz!Box!"), type=MessageBox.TYPE_INFO, timeout=2, id="FritzCallConnect")
                self.resetDelay()
                return FritzProtocol()
-       
+
        def clientConnectionLost(self, connector, reason):
                if not self.hangup_ok:
-                       Notifications.AddNotification(MessageBox, _("Disconnected from\nFritz!Box! (%s)\nretrying...") % reason.getErrorMessage(), type=MessageBox.TYPE_INFO, timeout=4)
+                       Notifications.AddPopup(text=_("Disconnected from\nFritz!Box! (%s)\nretrying...") % reason.getErrorMessage(), type=MessageBox.TYPE_INFO, timeout=4, id="FritzCallConnect")
                ReconnectingClientFactory.clientConnectionLost(self, connector, reason)
-       
+
        def clientConnectionFailed(self, connector, reason):
-               Notifications.AddNotification(MessageBox, _("Connection to Fritz!Box\nfailed! (%s)\nretrying...") % reason.getErrorMessage(), type=MessageBox.TYPE_INFO, timeout=4)
+               Notifications.AddPopup(text=_("Connection to Fritz!Box\nfailed! (%s)\nretrying...") % reason.getErrorMessage(), type=MessageBox.TYPE_INFO, timeout=4, id="FritzCallConnect")
                ReconnectingClientFactory.clientConnectionFailed(self, connector, reason)
 
 class FritzCall:
@@ -135,9 +117,9 @@ class FritzCall:
                
        def connect(self):      
                self.abort()
-               if config.FritzCall.enable.value:
+               if config.plugins.FritzCall.enable.value:
                        f = FritzClientFactory()
-                       self.d = (f, reactor.connectTCP("%d.%d.%d.%d" % tuple(config.FritzCall.hostname.value), 1012, f))
+                       self.d = (f, reactor.connectTCP("%d.%d.%d.%d" % tuple(config.plugins.FritzCall.hostname.value), 1012, f))
 
        def shutdown(self):
                self.abort()
@@ -149,7 +131,7 @@ class FritzCall:
                        self.d[1].disconnect()
                        self.d = None
 
-def main(session):
+def main(session, **kwargs):
        session.open(FritzCallSetup)
 
 fritz_call = None