Merge branch 'develop_release' of git://github.com/mano3m/CouchPotatoServer into mano3m-develop_release
This commit is contained in:
@@ -10,6 +10,7 @@ from sqlalchemy.orm import joinedload_all
|
||||
from sqlalchemy.sql.expression import and_, or_
|
||||
import os
|
||||
import traceback
|
||||
import time
|
||||
|
||||
log = CPLog(__name__)
|
||||
|
||||
@@ -47,6 +48,7 @@ class Release(Plugin):
|
||||
addEvent('release.for_movie', self.forMovie)
|
||||
addEvent('release.delete', self.delete)
|
||||
addEvent('release.clean', self.clean)
|
||||
addEvent('release.update', self.update_status)
|
||||
|
||||
def add(self, group):
|
||||
|
||||
@@ -159,8 +161,7 @@ class Release(Plugin):
|
||||
rel = db.query(Relea).filter_by(id = id).first()
|
||||
if rel:
|
||||
ignored_status, failed_status, available_status = fireEvent('status.get', ['ignored', 'failed', 'available'], single = True)
|
||||
rel.status_id = available_status.get('id') if rel.status_id in [ignored_status.get('id'), failed_status.get('id')] else ignored_status.get('id')
|
||||
db.commit()
|
||||
self.update_status(id, available_status if rel.status_id in [ignored_status.get('id'), failed_status.get('id')] else ignored_status)
|
||||
|
||||
return {
|
||||
'success': True
|
||||
@@ -199,14 +200,9 @@ class Release(Plugin):
|
||||
|
||||
if success:
|
||||
db.expunge_all()
|
||||
rel = db.query(Relea).filter_by(id = id).first() # Get release again
|
||||
|
||||
if rel.status_id != done_status.get('id'):
|
||||
rel.status_id = snatched_status.get('id')
|
||||
db.commit()
|
||||
rel = db.query(Relea).filter_by(id = id).first() # Get release again @RuudBurger why do we need to get it again??
|
||||
|
||||
fireEvent('notify.frontend', type = 'release.download', data = True, message = 'Successfully snatched "%s"' % item['name'])
|
||||
|
||||
return {
|
||||
'success': success
|
||||
}
|
||||
@@ -241,3 +237,25 @@ class Release(Plugin):
|
||||
'success': True
|
||||
}
|
||||
|
||||
def update_status(self, id = None, status = None):
|
||||
|
||||
db = get_session()
|
||||
|
||||
rel = db.query(Relea).filter_by(id = id).first()
|
||||
if rel and status and rel.status_id != status.get('id'):
|
||||
|
||||
item = {}
|
||||
for info in rel.info:
|
||||
item[info.identifier] = info.value
|
||||
|
||||
#update status in Db
|
||||
log.debug('Marking release %s as %s', (item['name'], status.get("label")))
|
||||
rel.status_id = status.get('id')
|
||||
rel.last_edit = int(time.time())
|
||||
db.commit()
|
||||
|
||||
#Notify frontend
|
||||
fireEvent('notify.frontend', type = 'release.download', data = True, message = '"%s" updated to %s' % (item['name'], status.get("label")))
|
||||
|
||||
#Update all movie info as there is no release update function
|
||||
fireEvent('notify.frontend', type = 'release.update.%s' % rel.id, data = status.get('id'))
|
||||
|
||||
@@ -395,14 +395,8 @@ class Renamer(Plugin):
|
||||
break
|
||||
elif release.status_id is snatched_status.get('id'):
|
||||
if release.quality.id is group['meta_data']['quality']['id']:
|
||||
log.debug('Marking release as downloaded')
|
||||
try:
|
||||
release.status_id = downloaded_status.get('id')
|
||||
release.last_edit = int(time.time())
|
||||
except Exception, e:
|
||||
log.error('Failed marking release as finished: %s %s', (e, traceback.format_exc()))
|
||||
|
||||
db.commit()
|
||||
# Set the release to downloaded
|
||||
fireEvent('release.update', id = release.id, status = downloaded_status, single = True)
|
||||
|
||||
# Remove leftover files
|
||||
if not remove_leftovers: # Don't remove anything
|
||||
@@ -663,12 +657,13 @@ Remove it if you want it to be renamed (again, or at least let it try again)
|
||||
|
||||
self.checking_snatched = True
|
||||
|
||||
snatched_status, ignored_status, failed_status, done_status, seeding_status, downloaded_status = \
|
||||
fireEvent('status.get', ['snatched', 'ignored', 'failed', 'done', 'seeding', 'downloaded'], single = True)
|
||||
snatched_status, ignored_status, failed_status, done_status, seeding_status, downloaded_status, missing_status = \
|
||||
fireEvent('status.get', ['snatched', 'ignored', 'failed', 'done', 'seeding', 'downloaded', 'missing'], single = True)
|
||||
|
||||
db = get_session()
|
||||
rels = db.query(Release).filter_by(status_id = snatched_status.get('id')).all()
|
||||
rels.extend(db.query(Release).filter_by(status_id = seeding_status.get('id')).all())
|
||||
rels.extend(db.query(Release).filter_by(status_id = missing_status.get('id')).all())
|
||||
|
||||
scan_items = []
|
||||
scan_required = False
|
||||
@@ -684,7 +679,6 @@ Remove it if you want it to be renamed (again, or at least let it try again)
|
||||
try:
|
||||
for rel in rels:
|
||||
rel_dict = rel.to_dict({'info': {}})
|
||||
|
||||
movie_dict = fireEvent('movie.get', rel.movie_id, single = True)
|
||||
|
||||
# check status
|
||||
@@ -706,11 +700,16 @@ Remove it if you want it to be renamed (again, or at least let it try again)
|
||||
log.debug('Found %s: %s, time to go: %s', (item['name'], item['status'].upper(), timeleft))
|
||||
|
||||
if item['status'] == 'busy':
|
||||
# Set the release to snatched if it was missing before
|
||||
fireEvent('release.update', id = rel.id, status = snatched_status, single = True)
|
||||
|
||||
# Tag folder if it is in the 'from' folder and it will not be processed because it is still downloading
|
||||
if item['folder'] and self.conf('from') in item['folder']:
|
||||
self.tagDir(item['folder'], 'downloading')
|
||||
|
||||
elif item['status'] == 'seeding':
|
||||
# Set the release to seeding
|
||||
fireEvent('release.update', id = rel.id, status = seeding_status, single = True)
|
||||
|
||||
#If linking setting is enabled, process release
|
||||
if self.conf('file_action') != 'move' and not rel.status_id == seeding_status.get('id') and self.statusInfoComplete(item):
|
||||
@@ -719,26 +718,18 @@ Remove it if you want it to be renamed (again, or at least let it try again)
|
||||
# Remove the downloading tag
|
||||
self.untagDir(item['folder'], 'downloading')
|
||||
|
||||
rel.status_id = seeding_status.get('id')
|
||||
rel.last_edit = int(time.time())
|
||||
db.commit()
|
||||
|
||||
# Scan and set the torrent to paused if required
|
||||
item.update({'pause': True, 'scan': True, 'process_complete': False})
|
||||
scan_items.append(item)
|
||||
else:
|
||||
if rel.status_id != seeding_status.get('id'):
|
||||
rel.status_id = seeding_status.get('id')
|
||||
rel.last_edit = int(time.time())
|
||||
db.commit()
|
||||
|
||||
#let it seed
|
||||
log.debug('%s is seeding with ratio: %s', (item['name'], item['seed_ratio']))
|
||||
|
||||
elif item['status'] == 'failed':
|
||||
# Set the release to failed
|
||||
fireEvent('release.update', id = rel.id, status = failed_status, single = True)
|
||||
|
||||
fireEvent('download.remove_failed', item, single = True)
|
||||
rel.status_id = failed_status.get('id')
|
||||
rel.last_edit = int(time.time())
|
||||
db.commit()
|
||||
|
||||
if self.conf('next_on_failed'):
|
||||
fireEvent('movie.searcher.try_next_release', movie_id = rel.movie_id)
|
||||
@@ -750,24 +741,23 @@ Remove it if you want it to be renamed (again, or at least let it try again)
|
||||
if rel.status_id == seeding_status.get('id'):
|
||||
if rel.movie.status_id == done_status.get('id'):
|
||||
# Set the release to done as the movie has already been renamed
|
||||
rel.status_id = downloaded_status.get('id')
|
||||
rel.last_edit = int(time.time())
|
||||
db.commit()
|
||||
fireEvent('release.update', id = rel.id, status = downloaded_status, single = True)
|
||||
|
||||
# Allow the downloader to clean-up
|
||||
item.update({'pause': False, 'scan': False, 'process_complete': True})
|
||||
scan_items.append(item)
|
||||
else:
|
||||
# Set the release to snatched so that the renamer can process the release as if it was never seeding
|
||||
rel.status_id = snatched_status.get('id')
|
||||
rel.last_edit = int(time.time())
|
||||
db.commit()
|
||||
fireEvent('release.update', id = rel.id, status = snatched_status, single = True)
|
||||
|
||||
# Scan and Allow the downloader to clean-up
|
||||
item.update({'pause': False, 'scan': True, 'process_complete': True})
|
||||
scan_items.append(item)
|
||||
|
||||
else:
|
||||
# Set the release to snatched if it was missing before
|
||||
fireEvent('release.update', id = rel.id, status = snatched_status, single = True)
|
||||
|
||||
# Remove the downloading tag
|
||||
self.untagDir(item['folder'], 'downloading')
|
||||
|
||||
@@ -783,6 +773,14 @@ Remove it if you want it to be renamed (again, or at least let it try again)
|
||||
if not found:
|
||||
log.info('%s not found in downloaders', nzbname)
|
||||
|
||||
#Check status if already missing and for how long, if > 1 week, set to ignored else to missing
|
||||
if rel.status_id == missing_status.get('id'):
|
||||
if rel.last_edit < int(time.time()) - 7*24*60*60:
|
||||
fireEvent('release.update', id = rel.id, status = ignored_status, single = True)
|
||||
else:
|
||||
# Set the release to missing
|
||||
fireEvent('release.update', id = rel.id, status = missing_status, single = True)
|
||||
|
||||
except:
|
||||
log.error('Failed checking for release in downloader: %s', traceback.format_exc())
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ class StatusPlugin(Plugin):
|
||||
'available': 'Available',
|
||||
'suggest': 'Suggest',
|
||||
'seeding': 'Seeding',
|
||||
'missing': 'Missing',
|
||||
}
|
||||
status_cached = {}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user