Merge branch 'develop' of https://github.com/clinton-hall/CouchPotatoServer into clinton-hall-develop
This commit is contained in:
@@ -24,6 +24,7 @@ class Downloader(Plugin):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
addEvent('download', self.download)
|
addEvent('download', self.download)
|
||||||
addEvent('download.status', self.getDownloadStatus)
|
addEvent('download.status', self.getDownloadStatus)
|
||||||
|
addEvent('download.remove', self.remove)
|
||||||
|
|
||||||
def download(self, data = {}, movie = {}, manual = False, filedata = None):
|
def download(self, data = {}, movie = {}, manual = False, filedata = None):
|
||||||
pass
|
pass
|
||||||
@@ -31,6 +32,9 @@ class Downloader(Plugin):
|
|||||||
def getDownloadStatus(self, data = {}, movie = {}):
|
def getDownloadStatus(self, data = {}, movie = {}):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def remove(self, name = {}, nzo_id = {}):
|
||||||
|
return False
|
||||||
|
|
||||||
def createNzbName(self, data, movie):
|
def createNzbName(self, data, movie):
|
||||||
tag = self.cpTag(movie)
|
tag = self.cpTag(movie)
|
||||||
return '%s%s' % (toSafeString(data.get('name')[:127 - len(tag)]), tag)
|
return '%s%s' % (toSafeString(data.get('name')[:127 - len(tag)]), tag)
|
||||||
|
|||||||
@@ -67,8 +67,7 @@ class Sabnzbd(Downloader):
|
|||||||
if self.isDisabled(manual = True) or not self.isCorrectType(data.get('type')):
|
if self.isDisabled(manual = True) or not self.isCorrectType(data.get('type')):
|
||||||
return
|
return
|
||||||
|
|
||||||
nzbname = self.createNzbName(data, movie)
|
log.info('Checking SABnzbd download status.')
|
||||||
log.info('Checking download status of "%s" at SABnzbd.', nzbname)
|
|
||||||
|
|
||||||
# Go through Queue
|
# Go through Queue
|
||||||
params = {
|
params = {
|
||||||
@@ -85,20 +84,12 @@ class Sabnzbd(Downloader):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
history = json.loads(sab)
|
queue = json.loads(sab)
|
||||||
except:
|
except:
|
||||||
log.debug("Result text from SAB: " + sab[:40])
|
log.debug("Result text from SAB: " + sab[:40])
|
||||||
log.error('Failed parsing json status: %s', traceback.format_exc())
|
log.error('Failed parsing json status: %s', traceback.format_exc())
|
||||||
return False
|
return False
|
||||||
|
|
||||||
try:
|
|
||||||
for slot in history['queue']['slots']:
|
|
||||||
log.debug('Found %s in SabNZBd queue, which is %s, with %s left', (slot['filename'], slot['status'], slot['timeleft']))
|
|
||||||
if slot['filename'] == nzbname:
|
|
||||||
return slot['status'].lower()
|
|
||||||
except:
|
|
||||||
log.debug('No items in queue: %s', (traceback.format_exc()))
|
|
||||||
|
|
||||||
# Go through history items
|
# Go through history items
|
||||||
params = {
|
params = {
|
||||||
'apikey': self.conf('api_key'),
|
'apikey': self.conf('api_key'),
|
||||||
@@ -112,57 +103,46 @@ class Sabnzbd(Downloader):
|
|||||||
sab = self.urlopen(url, timeout = 60, show_error = False)
|
sab = self.urlopen(url, timeout = 60, show_error = False)
|
||||||
except:
|
except:
|
||||||
log.error('Failed getting history: %s', traceback.format_exc())
|
log.error('Failed getting history: %s', traceback.format_exc())
|
||||||
return
|
return False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
history = json.loads(sab)
|
history = json.loads(sab)
|
||||||
except:
|
except:
|
||||||
log.debug("Result text from SAB: " + sab[:40])
|
log.debug("Result text from SAB: " + sab[:40])
|
||||||
log.error('Failed parsing history json: %s', traceback.format_exc())
|
log.error('Failed parsing history json: %s', traceback.format_exc())
|
||||||
|
return False
|
||||||
|
|
||||||
|
return queue, history
|
||||||
|
|
||||||
|
def remove(self, name = {}, nzo_id = {}):
|
||||||
|
# Delete failed download
|
||||||
|
if self.conf('delete_failed', default = True):
|
||||||
|
|
||||||
|
log.info('%s failed downloading, deleting...', name)
|
||||||
|
params = {
|
||||||
|
'apikey': self.conf('api_key'),
|
||||||
|
'mode': 'history',
|
||||||
|
'name': 'delete',
|
||||||
|
'del_files': '1',
|
||||||
|
'value': nzo_id
|
||||||
|
}
|
||||||
|
url = cleanHost(self.conf('host')) + "api?" + tryUrlencode(params)
|
||||||
|
|
||||||
|
try:
|
||||||
|
sab = self.urlopen(url, timeout = 60, show_error = False)
|
||||||
|
except:
|
||||||
|
log.error('Failed deleting: %s', traceback.format_exc())
|
||||||
|
return False
|
||||||
|
|
||||||
|
result = sab.strip()
|
||||||
|
if not result:
|
||||||
|
log.error("SABnzbd didn't return anything.")
|
||||||
|
|
||||||
|
log.debug("Result text from SAB: " + result[:40])
|
||||||
|
if result == "ok":
|
||||||
|
log.info('SabNZBd deleted failed release %s successfully.', name)
|
||||||
|
elif result == "Missing authentication":
|
||||||
|
log.error("Incorrect username/password or API?.")
|
||||||
|
else:
|
||||||
|
log.error("Unknown error: " + result[:40])
|
||||||
return
|
return
|
||||||
|
|
||||||
try:
|
|
||||||
for slot in history['history']['slots']:
|
|
||||||
log.debug('Found %s in SabNZBd history, which has %s', (slot['name'], slot['status']))
|
|
||||||
if slot['name'] == nzbname:
|
|
||||||
# Note: if post process even if failed is on in SabNZBd, it will complete with a fail message
|
|
||||||
if slot['status'] == 'Failed' or (slot['status'] == 'Completed' and slot['fail_message'].strip()):
|
|
||||||
|
|
||||||
# Delete failed download
|
|
||||||
if self.conf('delete_failed', default = True):
|
|
||||||
|
|
||||||
log.info('%s failed downloading, deleting...', slot['name'])
|
|
||||||
params = {
|
|
||||||
'apikey': self.conf('api_key'),
|
|
||||||
'mode': 'history',
|
|
||||||
'name': 'delete',
|
|
||||||
'del_files': '1',
|
|
||||||
'value': slot['nzo_id']
|
|
||||||
}
|
|
||||||
url = cleanHost(self.conf('host')) + "api?" + tryUrlencode(params)
|
|
||||||
|
|
||||||
try:
|
|
||||||
sab = self.urlopen(url, timeout = 60, show_error = False)
|
|
||||||
except:
|
|
||||||
log.error('Failed deleting: %s', traceback.format_exc())
|
|
||||||
return False
|
|
||||||
|
|
||||||
result = sab.strip()
|
|
||||||
if not result:
|
|
||||||
log.error("SABnzbd didn't return anything.")
|
|
||||||
|
|
||||||
log.debug("Result text from SAB: " + result[:40])
|
|
||||||
if result == "ok":
|
|
||||||
log.info('SabNZBd deleted failed release %s successfully.', slot['name'])
|
|
||||||
elif result == "Missing authentication":
|
|
||||||
log.error("Incorrect username/password or API?.")
|
|
||||||
else:
|
|
||||||
log.error("Unknown error: " + result[:40])
|
|
||||||
|
|
||||||
return 'failed'
|
|
||||||
else:
|
|
||||||
return slot['status'].lower()
|
|
||||||
except:
|
|
||||||
log.debug('No items in history: %s', (traceback.format_exc()))
|
|
||||||
|
|
||||||
return 'not_found'
|
|
||||||
|
|||||||
@@ -506,9 +506,11 @@ class Renamer(Plugin):
|
|||||||
|
|
||||||
if rels:
|
if rels:
|
||||||
log.debug('Checking status snatched releases...')
|
log.debug('Checking status snatched releases...')
|
||||||
|
# get queue and history (once) from SABnzbd
|
||||||
|
queue, history = fireEvent('download.status', data = {}, movie = {}, single = True)
|
||||||
|
|
||||||
scan_required = False
|
scan_required = False
|
||||||
|
|
||||||
for rel in rels:
|
for rel in rels:
|
||||||
|
|
||||||
# Get current selected title
|
# Get current selected title
|
||||||
@@ -530,7 +532,29 @@ class Renamer(Plugin):
|
|||||||
movie_dict = fireEvent('movie.get', rel.movie_id, single = True)
|
movie_dict = fireEvent('movie.get', rel.movie_id, single = True)
|
||||||
|
|
||||||
# check status
|
# check status
|
||||||
downloadstatus = fireEvent('download.status', data = item, movie = movie_dict, single = True)
|
nzbname = self.createNzbName(item, movie_dict)
|
||||||
|
try:
|
||||||
|
for slot in queue['queue']['slots']:
|
||||||
|
log.debug('Found %s in SabNZBd queue, which is %s, with %s left', (slot['filename'], slot['status'], slot['timeleft']))
|
||||||
|
if slot['filename'] == nzbname:
|
||||||
|
downloadstatus =['status'].lower()
|
||||||
|
except:
|
||||||
|
log.debug('No items in queue: %s', (traceback.format_exc()))
|
||||||
|
try:
|
||||||
|
for slot in history['history']['slots']:
|
||||||
|
log.debug('Found %s in SabNZBd history, which has %s', (slot['name'], slot['status']))
|
||||||
|
if slot['name'] == nzbname:
|
||||||
|
# Note: if post process even if failed is on in SabNZBd, it will complete with a fail message
|
||||||
|
if slot['status'] == 'Failed' or (slot['status'] == 'Completed' and slot['fail_message'].strip()):
|
||||||
|
|
||||||
|
# Delete failed download
|
||||||
|
rel_remove = fireEvent('download.remove', name = slot['name'], nzo_id = slot['nzo_id'], single = True)
|
||||||
|
downloadstatus = 'failed'
|
||||||
|
else:
|
||||||
|
downloadstatus = slot['status'].lower()
|
||||||
|
except:
|
||||||
|
log.debug('No items in history: %s', (traceback.format_exc()))
|
||||||
|
|
||||||
if not downloadstatus:
|
if not downloadstatus:
|
||||||
log.debug('Download status functionality is not implemented for active downloaders.')
|
log.debug('Download status functionality is not implemented for active downloaders.')
|
||||||
scan_required = True
|
scan_required = True
|
||||||
|
|||||||
Reference in New Issue
Block a user