Private GIT

Skip to content
Snippets Groups Projects
Select Git revision
  • 7146315fef7d097aa8ee78753cd90ff003b8f688
  • master default protected
  • fix_nzb_cat
  • develop
  • guessit2-minimal
  • ssl_warning
  • UHD-qualities
  • fix_providers8
  • !
  • tvvault
  • provider_alpharatio
  • v5.1.1
  • v5.1
  • v5.0.3
  • v5.0.2
  • v5.0.1
  • v5.0
  • v4.2.1.07
  • v4.2.1.06
  • v4.2.1.05
  • v4.2.1.04
  • v4.2.1.03
  • v4.2.1.02
  • v4.2.1.01
  • v4.2.1.0
  • v4.2.0.6
  • v4.2.0.5
  • v4.2.0.4
  • v4.2.0.3
  • v4.2.0.2
  • v4.2.0.1
31 results

pushover.py

Blame
  • pushover.py 6.14 KiB
    # Author: Marvin Pinto <me@marvinp.ca>
    # Author: Dennis Lutter <lad1337@gmail.com>
    # Author: Aaron Bieber <deftly@gmail.com>
    # URL: http://code.google.com/p/sickbeard/
    #
    # This file is part of SickRage.
    #
    # SickRage is free software: you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation, either version 3 of the License, or
    # (at your option) any later version.
    #
    # SickRage is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    # GNU General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
    import httplib
    import urllib, urllib2
    import time
    
    import sickbeard
    from sickbeard import logger
    from sickbeard.common import notifyStrings, NOTIFY_SNATCH, NOTIFY_DOWNLOAD, NOTIFY_SUBTITLE_DOWNLOAD, NOTIFY_GIT_UPDATE, NOTIFY_GIT_UPDATE_TEXT
    from sickbeard.exceptions import ex
    
    API_URL = "https://api.pushover.net/1/messages.json"
    
    
    class PushoverNotifier:
        def test_notify(self, userKey=None, apiKey=None):
            return self._notifyPushover("This is a test notification from SickRage", 'Test', userKey, apiKey, force=True)
    
        def _sendPushover(self, msg, title, userKey=None, apiKey=None):
            """
            Sends a pushover notification to the address provided
            
            msg: The message to send (unicode)
            title: The title of the message
            userKey: The pushover user id to send the message to (or to subscribe with)
            
            returns: True if the message succeeded, False otherwise
            """
    
            if userKey == None:
                userKey = sickbeard.PUSHOVER_USERKEY
    
            if apiKey == None:
                apiKey = sickbeard.PUSHOVER_APIKEY
    
            logger.log("Pushover API KEY in use: " + apiKey, logger.DEBUG)
    
            # build up the URL and parameters
            msg = msg.strip()
    
            # send the request to pushover
            try:
                args = {
                        "token": apiKey,
                        "user": userKey,
                        "title": title.encode('utf-8'),
                        "message": msg.encode('utf-8'),
                        "timestamp": int(time.time()),
                        "retry": 60,
                        "expire": 3600,
                       }
    
                if sickbeard.PUSHOVER_DEVICE:
                    args["device"] = sickbeard.PUSHOVER_DEVICE
    
                conn = httplib.HTTPSConnection("api.pushover.net:443")
                conn.request("POST", "/1/messages.json",
                             urllib.urlencode(args), {"Content-type": "application/x-www-form-urlencoded"})
    
            except urllib2.HTTPError, e:
                # if we get an error back that doesn't have an error code then who knows what's really happening
                if not hasattr(e, 'code'):
                    logger.log("Pushover notification failed." + ex(e), logger.ERROR)
                    return False
                else:
                    logger.log("Pushover notification failed. Error code: " + str(e.code), logger.ERROR)
    
                # HTTP status 404 if the provided email address isn't a Pushover user.
                if e.code == 404:
                    logger.log("Username is wrong/not a pushover email. Pushover will send an email to it", logger.WARNING)
                    return False
    
                # For HTTP status code 401's, it is because you are passing in either an invalid token, or the user has not added your service.
                elif e.code == 401:
    
                    #HTTP status 401 if the user doesn't have the service added
                    subscribeNote = self._sendPushover(msg, title, userKey, apiKey)
                    if subscribeNote:
                        logger.log("Subscription send", logger.DEBUG)
                        return True
                    else:
                        logger.log("Subscription could not be send", logger.ERROR)
                        return False
    
                # If you receive an HTTP status code of 400, it is because you failed to send the proper parameters
                elif e.code == 400:
                    logger.log("Wrong data sent to pushover", logger.ERROR)
                    return False
    
                # If you receive a HTTP status code of 429, it is because the message limit has been reached (free limit is 7,500)
                elif e.code == 429:
                    logger.log("Pushover API message limit reached - try a different API key", logger.ERROR)
                    return False
    
            logger.log("Pushover notification successful.", logger.INFO)
            return True
    
        def notify_snatch(self, ep_name, title=notifyStrings[NOTIFY_SNATCH]):
            if sickbeard.PUSHOVER_NOTIFY_ONSNATCH:
                self._notifyPushover(title, ep_name)
    
    
        def notify_download(self, ep_name, title=notifyStrings[NOTIFY_DOWNLOAD]):
            if sickbeard.PUSHOVER_NOTIFY_ONDOWNLOAD:
                self._notifyPushover(title, ep_name)
    
        def notify_subtitle_download(self, ep_name, lang, title=notifyStrings[NOTIFY_SUBTITLE_DOWNLOAD]):
            if sickbeard.PUSHOVER_NOTIFY_ONSUBTITLEDOWNLOAD:
                self._notifyPushover(title, ep_name + ": " + lang)
                
        def notify_git_update(self, new_version = "??"):
            if sickbeard.USE_PUSHOVER:
                update_text=notifyStrings[NOTIFY_GIT_UPDATE_TEXT]
                title=notifyStrings[NOTIFY_GIT_UPDATE]
                self._notifyPushover(title, update_text + new_version) 
    
        def _notifyPushover(self, title, message, userKey=None, apiKey=None, force=False):
            """
            Sends a pushover notification based on the provided info or SB config
    
            title: The title of the notification to send
            message: The message string to send
            userKey: The userKey to send the notification to 
            force: Enforce sending, for instance for testing
            """
    
            if not sickbeard.USE_PUSHOVER and not force:
                logger.log("Notification for Pushover not enabled, skipping this notification", logger.DEBUG)
                return False
    
            logger.log("Sending notification for " + message, logger.DEBUG)
    
            return self._sendPushover(message, title, userKey, apiKey)
    
    
    notifier = PushoverNotifier