mirror of
https://github.com/SickGear/SickGear.git
synced 2024-12-01 08:53:37 +00:00
e4282df953
This adds a priority option that allows the user to specify the priority to be used for daily/recent snatches instead of the default high value ‘100’. This also includes the use of priority ‘force’ which will let nzbget download the task even if the queue is paused.
145 lines
6.1 KiB
Python
145 lines
6.1 KiB
Python
# Author: Nic Wolfe <nic@wolfeden.ca>
|
|
# 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 datetime
|
|
import re
|
|
|
|
import sickbeard
|
|
|
|
from base64 import standard_b64encode
|
|
import xmlrpclib
|
|
|
|
from sickbeard.providers.generic import GenericProvider
|
|
|
|
from sickbeard import logger, helpers
|
|
|
|
from common import Quality
|
|
|
|
|
|
def sendNZB(nzb, proper=False):
|
|
addToTop = False
|
|
nzbgetprio = 0
|
|
|
|
if sickbeard.NZBGET_USE_HTTPS:
|
|
nzbgetXMLrpc = "https://%(username)s:%(password)s@%(host)s/xmlrpc"
|
|
else:
|
|
nzbgetXMLrpc = "http://%(username)s:%(password)s@%(host)s/xmlrpc"
|
|
|
|
if sickbeard.NZBGET_HOST == None:
|
|
logger.log(u"No NZBget host found in configuration. Please configure it.", logger.ERROR)
|
|
return False
|
|
|
|
url = nzbgetXMLrpc % {"host": sickbeard.NZBGET_HOST, "username": sickbeard.NZBGET_USERNAME,
|
|
"password": sickbeard.NZBGET_PASSWORD}
|
|
|
|
nzbGetRPC = xmlrpclib.ServerProxy(url)
|
|
try:
|
|
if nzbGetRPC.writelog("INFO", "SickRage connected to drop of %s any moment now." % (nzb.name + ".nzb")):
|
|
logger.log(u"Successful connected to NZBget", logger.DEBUG)
|
|
else:
|
|
logger.log(u"Successful connected to NZBget, but unable to send a message", logger.ERROR)
|
|
|
|
except httplib.socket.error:
|
|
logger.log(
|
|
u"Please check your NZBget host and port (if it is running). NZBget is not responding to this combination",
|
|
logger.ERROR)
|
|
return False
|
|
|
|
except xmlrpclib.ProtocolError, e:
|
|
if (e.errmsg == "Unauthorized"):
|
|
logger.log(u"NZBget username or password is incorrect.", logger.ERROR)
|
|
else:
|
|
logger.log(u"Protocol Error: " + e.errmsg, logger.ERROR)
|
|
return False
|
|
|
|
dupekey = ""
|
|
dupescore = 0
|
|
# if it aired recently make it high priority and generate DupeKey/Score
|
|
for curEp in nzb.episodes:
|
|
if dupekey == "":
|
|
if curEp.show.indexer == 1:
|
|
dupekey = "SickRage-" + str(curEp.show.indexerid)
|
|
elif curEp.show.indexer == 2:
|
|
dupekey = "SickRage-tvr" + str(curEp.show.indexerid)
|
|
dupekey += "-" + str(curEp.season) + "." + str(curEp.episode)
|
|
if datetime.date.today() - curEp.airdate <= datetime.timedelta(days=7):
|
|
addToTop = True
|
|
nzbgetprio = sickbeard.NZBGET_PRIORITY
|
|
|
|
if nzb.quality != Quality.UNKNOWN:
|
|
dupescore = nzb.quality * 100
|
|
if proper:
|
|
dupescore += 10
|
|
|
|
nzbcontent64 = None
|
|
if nzb.resultType == "nzbdata":
|
|
data = nzb.extraInfo[0]
|
|
nzbcontent64 = standard_b64encode(data)
|
|
|
|
logger.log(u"Sending NZB to NZBget")
|
|
logger.log(u"URL: " + url, logger.DEBUG)
|
|
|
|
try:
|
|
# Find out if nzbget supports priority (Version 9.0+), old versions beginning with a 0.x will use the old command
|
|
nzbget_version_str = nzbGetRPC.version()
|
|
nzbget_version = helpers.tryInt(nzbget_version_str[:nzbget_version_str.find(".")])
|
|
if nzbget_version == 0:
|
|
if nzbcontent64 is not None:
|
|
nzbget_result = nzbGetRPC.append(nzb.name + ".nzb", sickbeard.NZBGET_CATEGORY, addToTop, nzbcontent64)
|
|
else:
|
|
if nzb.resultType == "nzb":
|
|
genProvider = GenericProvider("")
|
|
data = genProvider.getURL(nzb.url)
|
|
if (data == None):
|
|
return False
|
|
nzbcontent64 = standard_b64encode(data)
|
|
nzbget_result = nzbGetRPC.append(nzb.name + ".nzb", sickbeard.NZBGET_CATEGORY, addToTop, nzbcontent64)
|
|
elif nzbget_version == 12:
|
|
if nzbcontent64 is not None:
|
|
nzbget_result = nzbGetRPC.append(nzb.name + ".nzb", sickbeard.NZBGET_CATEGORY, nzbgetprio, False,
|
|
nzbcontent64, False, dupekey, dupescore, "score")
|
|
else:
|
|
nzbget_result = nzbGetRPC.appendurl(nzb.name + ".nzb", sickbeard.NZBGET_CATEGORY, nzbgetprio, False,
|
|
nzb.url, False, dupekey, dupescore, "score")
|
|
# v13+ has a new combined append method that accepts both (url and content)
|
|
# also the return value has changed from boolean to integer
|
|
# (Positive number representing NZBID of the queue item. 0 and negative numbers represent error codes.)
|
|
elif nzbget_version >= 13:
|
|
nzbget_result = True if nzbGetRPC.append(nzb.name + ".nzb", nzbcontent64 if nzbcontent64 is not None else nzb.url,
|
|
sickbeard.NZBGET_CATEGORY, nzbgetprio, False, False, dupekey, dupescore,
|
|
"score") > 0 else False
|
|
else:
|
|
if nzbcontent64 is not None:
|
|
nzbget_result = nzbGetRPC.append(nzb.name + ".nzb", sickbeard.NZBGET_CATEGORY, nzbgetprio, False,
|
|
nzbcontent64)
|
|
else:
|
|
nzbget_result = nzbGetRPC.appendurl(nzb.name + ".nzb", sickbeard.NZBGET_CATEGORY, nzbgetprio, False,
|
|
nzb.url)
|
|
|
|
if nzbget_result:
|
|
logger.log(u"NZB sent to NZBget successfully", logger.DEBUG)
|
|
return True
|
|
else:
|
|
logger.log(u"NZBget could not add %s to the queue" % (nzb.name + ".nzb"), logger.ERROR)
|
|
return False
|
|
except:
|
|
logger.log(u"Connect Error to NZBget: could not add %s to the queue" % (nzb.name + ".nzb"), logger.ERROR)
|
|
return False
|