diff options
Diffstat (limited to 'module/plugins')
| -rw-r--r-- | module/plugins/hooks/AndroidPhoneNotify.py | 70 | ||||
| -rw-r--r-- | module/plugins/hooks/WindowsPhoneToastNotify.py | 91 | 
2 files changed, 116 insertions, 45 deletions
| diff --git a/module/plugins/hooks/AndroidPhoneNotify.py b/module/plugins/hooks/AndroidPhoneNotify.py index d6bf64db4..18e1cce66 100644 --- a/module/plugins/hooks/AndroidPhoneNotify.py +++ b/module/plugins/hooks/AndroidPhoneNotify.py @@ -1,37 +1,79 @@  # -*- coding: utf-8 -*- +from time import time -from module.plugins.Hook import Hook  from module.network.RequestFactory import getURL +from module.plugins.Hook import Hook +  class AndroidPhoneNotify(Hook):      __name__    = "AndroidPhoneNotify"      __type__    = "hook" -    __version__ = "0.01" +    __version__ = "0.02" -    __config__ = [("apikey", "str", "apikey", ""), -                  ("appname", "str", "ApplicationName", "pyLoad"), -                  ("notifycaptcha", "bool", "Send captcha notifications (maybe usefull if premium fails)", False)] +    __config__ = [("apikey"         , "str" , "API key"                                  , ""   ), +                  ("notifycaptcha"  , "bool", "Notify captcha request"                   , True ), +                  ("notifypackage"  , "bool", "Notify package finished"                  , True ), +                  ("notifyprocessed", "bool", "Notify processed packages status"         , True ), +                  ("timeout"        , "int" , "Timeout between captchas in seconds"      , 5    ), +                  ("force"          , "bool", "Send notifications if client is connected", False)]      __description__ = """Send push notifications to your Android Phone using notifymyandroid.com"""      __license__     = "GPLv3" -    __authors__     = [("Steven Kosyra", "steven.kosyra@gmail.com")] +    __authors__     = [("Steven Kosyra", "steven.kosyra@gmail.com"), +                       ("Walter Purcaro", "vuolter@gmail.com")] -    def packageFinished(self, pypack): -                self.genUrl("Package finished:",pypack.name) +    event_list = ["allDownloadsProcessed"] + + +    #@TODO: Remove in 0.4.10 +    def initPeriodical(self): +        pass + + +    def setup(self): +        self.info = {}  #@TODO: Remove in 0.4.10      def newCaptchaTask(self, task): -        if self.getConfig("notifycaptcha"): -                self.genUrl("Captcha","new Captcha request") +        if not self.getConfig("notifycaptcha"): +            return False + +        if time() - float(self.getStorage("AndroidPhoneNotify", 0)) < self.getConf("timeout"): +            return False + +        self.notify(_("Captcha"), _("New request waiting user input")) + + +    def packageFinished(self, pypack): +        if self.getConfig("notifypackage"): +            self.notify(_("Package finished"), pypack.name) + + +    def allDownloadsProcessed(self, thread): +        if not self.getConfig("notifyprocessed"): +            return False + +        if any(True for pdata in self.core.api.getQueue() if pdata.linksdone < pdata.linkstotal): +            self.notify(_("Package failed"), _("One or more packages was not completed successfully")) +        else: +            self.notify(_("All packages finished")) +    def notify(self, event, msg=""): +        apikey = self.getConfig("apikey") -    def genUrl(self,event, msg): -                self.response(event, msg) +        if not apikey: +            return False +        if self.core.isClientConnected() and not self.getConfig("force"): +            return False +        getURL("http://www.notifymyandroid.com/publicapi/notify", +               get={'apikey'     : apikey, +                    'application': "pyLoad", +                    'event'      : event, +                    'description': msg}) -    def response(self, event, msg): -        html = getURL("http://www.notifymyandroid.com/publicapi/notify?apikey=" + self.getConfig("apikey") + "&application=" + self.getConfig("appname") + "&event=" + str(event) + "&description= " + str(msg) + "") +        self.setStorage("AndroidPhoneNotify", time()) diff --git a/module/plugins/hooks/WindowsPhoneToastNotify.py b/module/plugins/hooks/WindowsPhoneToastNotify.py index ed305778c..886d4ca6a 100644 --- a/module/plugins/hooks/WindowsPhoneToastNotify.py +++ b/module/plugins/hooks/WindowsPhoneToastNotify.py @@ -1,7 +1,8 @@  # -*- coding: utf-8 -*-  import httplib -import time + +from time import time  from module.plugins.Hook import Hook @@ -9,16 +10,23 @@ from module.plugins.Hook import Hook  class WindowsPhoneToastNotify(Hook):      __name__    = "WindowsPhoneToastNotify"      __type__    = "hook" -    __version__ = "0.03" +    __version__ = "0.04" -    __config__ = [("force", "bool", "Force even if client is connected", False), -                  ("pushId", "str", "pushId", ""), -                  ("pushUrl", "str", "pushUrl", ""), -                  ("pushTimeout", "int", "Timeout between notifications in seconds", 0)] +    __config__ = [("id"             , "str" , "Push ID"                                  , ""   ), +                  ("url"            , "str" , "Push url"                                 , ""   ), +                  ("notifycaptcha"  , "bool", "Notify captcha request"                   , True ), +                  ("notifypackage"  , "bool", "Notify package finished"                  , True ), +                  ("notifyprocessed", "bool", "Notify processed packages status"         , True ), +                  ("timeout"        , "int" , "Timeout between captchas in seconds"      , 5    ), +                  ("force"          , "bool", "Send notifications if client is connected", False)]      __description__ = """Send push notifications to Windows Phone"""      __license__     = "GPLv3" -    __authors__     = [("Andy Voigt", "phone-support@hotmail.de")] +    __authors__     = [("Andy Voigt", "phone-support@hotmail.de"), +                       ("Walter Purcaro", "vuolter@gmail.com")] + + +    event_list = ["allDownloadsProcessed"]      #@TODO: Remove in 0.4.10 @@ -30,37 +38,58 @@ class WindowsPhoneToastNotify(Hook):          self.info = {}  #@TODO: Remove in 0.4.10 -    def getXmlData(self): -        myxml = ("<?xml version='1.0' encoding='utf-8'?> <wp:Notification xmlns:wp='WPNotification'> " -                 "<wp:Toast> <wp:Text1>Pyload Mobile</wp:Text1> <wp:Text2>Captcha waiting!</wp:Text2> " -                 "</wp:Toast> </wp:Notification>") -        return myxml +    def newCaptchaTask(self, task): +        if not self.getConfig("notifycaptcha"): +            return False +        if time() - float(self.getStorage("WindowsPhoneToastNotify", 0)) < self.getConf("timeout"): +            return False -    def doRequest(self): -        URL = self.getConfig("pushUrl") -        request = self.getXmlData() -        webservice = httplib.HTTP(URL) -        webservice.putrequest("POST", self.getConfig("pushId")) -        webservice.putheader("Host", URL) -        webservice.putheader("Content-type", "text/xml") -        webservice.putheader("X-NotificationClass", "2") -        webservice.putheader("X-WindowsPhone-Target", "toast") -        webservice.putheader("Content-length", "%d" % len(request)) -        webservice.endheaders() -        webservice.send(request) -        webservice.close() -        self.setStorage("LAST_NOTIFY", time.time()) +        self.notify(_("Captcha"), _("New request waiting user input")) -    def newCaptchaTask(self, task): -        if not self.getConfig("pushId") or not self.getConfig("pushUrl"): +    def packageFinished(self, pypack): +        if self.getConfig("notifypackage"): +            self.notify(_("Package finished"), pypack.name) + + +    def allDownloadsProcessed(self, thread): +        if not self.getConfig("notifyprocessed"):              return False -        if self.core.isClientConnected() and not self.getConfig("force"): +        if any(True for pdata in self.core.api.getQueue() if pdata.linksdone < pdata.linkstotal): +            self.notify(_("Package failed"), _("One or more packages was not completed successfully")) +        else: +            self.notify(_("All packages finished")) + + +    def getXmlData(self, msg): +        return ("<?xml version='1.0' encoding='utf-8'?> <wp:Notification xmlns:wp='WPNotification'> " +                "<wp:Toast> <wp:Text1>pyLoad</wp:Text1> <wp:Text2>%s</wp:Text2> " +                "</wp:Toast> </wp:Notification>" % msg) + + +    def notify(self, event, msg=""): +        id  = self.getConfig("id") +        url = self.getConfig("url") + +        if not id or not url:              return False -        if (time.time() - float(self.getStorage("LAST_NOTIFY", 0))) < self.getConf("pushTimeout"): +        if self.core.isClientConnected() and not self.getConfig("force"):              return False -        self.doRequest() +        request    = self.getXmlData("%s: %s" % (event, msg) if msg else event) +        webservice = httplib.HTTP(url) + +        webservice.putrequest("POST", id) +        webservice.putheader("Host", url) +        webservice.putheader("Content-type", "text/xml") +        webservice.putheader("X-NotificationClass", "2") +        webservice.putheader("X-WindowsPhone-Target", "toast") +        webservice.putheader("Content-length", "%d" % len(request)) +        webservice.endheaders() +        webservice.send(request) +        webservice.close() + +        self.setStorage("WindowsPhoneToastNotify", time()) | 
