Add release.update event
Proof of concept commit. It updates the database and calls movie.update.id to refresh the entire movie in the frontend. It would be better to crease a static js file in the release folder and add release functionality there including updating one release only.
This commit is contained in:
@@ -397,17 +397,6 @@ MA.Release = new Class({
|
|||||||
'data': {
|
'data': {
|
||||||
'id': release.id
|
'id': release.id
|
||||||
},
|
},
|
||||||
'onComplete': function(){
|
|
||||||
var el = release.el;
|
|
||||||
if(el && (el.hasClass('failed') || el.hasClass('ignored'))){
|
|
||||||
el.removeClass('failed').removeClass('ignored');
|
|
||||||
el.getElement('.release_status').set('text', 'available');
|
|
||||||
}
|
|
||||||
else if(el) {
|
|
||||||
el.addClass('ignored');
|
|
||||||
el.getElement('.release_status').set('text', 'ignored');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -10,12 +10,21 @@ from sqlalchemy.orm import joinedload_all
|
|||||||
from sqlalchemy.sql.expression import and_, or_
|
from sqlalchemy.sql.expression import and_, or_
|
||||||
import os
|
import os
|
||||||
import traceback
|
import traceback
|
||||||
|
import time
|
||||||
|
|
||||||
log = CPLog(__name__)
|
log = CPLog(__name__)
|
||||||
|
|
||||||
|
|
||||||
class Release(Plugin):
|
class Release(Plugin):
|
||||||
|
|
||||||
|
default_movie_dict = {
|
||||||
|
'profile': {'types': {'quality': {}}},
|
||||||
|
'releases': {'status': {}, 'quality': {}, 'files':{}, 'info': {}},
|
||||||
|
'library': {'titles': {}, 'files':{}},
|
||||||
|
'files': {},
|
||||||
|
'status': {}
|
||||||
|
}
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
addEvent('release.add', self.add)
|
addEvent('release.add', self.add)
|
||||||
|
|
||||||
@@ -47,6 +56,7 @@ class Release(Plugin):
|
|||||||
addEvent('release.for_movie', self.forMovie)
|
addEvent('release.for_movie', self.forMovie)
|
||||||
addEvent('release.delete', self.delete)
|
addEvent('release.delete', self.delete)
|
||||||
addEvent('release.clean', self.clean)
|
addEvent('release.clean', self.clean)
|
||||||
|
addEvent('release.update', self.update_status)
|
||||||
|
|
||||||
def add(self, group):
|
def add(self, group):
|
||||||
|
|
||||||
@@ -159,8 +169,7 @@ class Release(Plugin):
|
|||||||
rel = db.query(Relea).filter_by(id = id).first()
|
rel = db.query(Relea).filter_by(id = id).first()
|
||||||
if rel:
|
if rel:
|
||||||
ignored_status, failed_status, available_status = fireEvent('status.get', ['ignored', 'failed', 'available'], single = True)
|
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')
|
self.update_status(id, available_status if rel.status_id in [ignored_status.get('id'), failed_status.get('id')] else ignored_status)
|
||||||
db.commit()
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'success': True
|
'success': True
|
||||||
@@ -199,14 +208,12 @@ class Release(Plugin):
|
|||||||
|
|
||||||
if success:
|
if success:
|
||||||
db.expunge_all()
|
db.expunge_all()
|
||||||
rel = db.query(Relea).filter_by(id = id).first() # Get release again
|
rel = db.query(Relea).filter_by(id = id).first() # Get release again @RuudBurger why do we need to get it again??
|
||||||
|
|
||||||
if rel.status_id != done_status.get('id'):
|
if rel.status_id != done_status.get('id'):
|
||||||
rel.status_id = snatched_status.get('id')
|
fireEvent('release.update', id = id, status = snatched_status, single = True)
|
||||||
db.commit()
|
|
||||||
|
|
||||||
fireEvent('notify.frontend', type = 'release.download', data = True, message = 'Successfully snatched "%s"' % item['name'])
|
fireEvent('notify.frontend', type = 'release.download', data = True, message = 'Successfully snatched "%s"' % item['name'])
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'success': success
|
'success': success
|
||||||
}
|
}
|
||||||
@@ -241,3 +248,25 @@ class Release(Plugin):
|
|||||||
'success': True
|
'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 = 'movie.update.%s' % rel.movie.id, data = rel.movie.to_dict(self.default_movie_dict))
|
||||||
|
|||||||
@@ -395,14 +395,8 @@ class Renamer(Plugin):
|
|||||||
break
|
break
|
||||||
elif release.status_id is snatched_status.get('id'):
|
elif release.status_id is snatched_status.get('id'):
|
||||||
if release.quality.id is group['meta_data']['quality']['id']:
|
if release.quality.id is group['meta_data']['quality']['id']:
|
||||||
log.debug('Marking release as downloaded')
|
# Set the release to downloaded
|
||||||
try:
|
fireEvent('release.update', id = release.id, status = downloaded_status, single = True)
|
||||||
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()
|
|
||||||
|
|
||||||
# Remove leftover files
|
# Remove leftover files
|
||||||
if not remove_leftovers: # Don't remove anything
|
if not remove_leftovers: # Don't remove anything
|
||||||
@@ -677,7 +671,6 @@ Remove it if you want it to be renamed (again, or at least let it try again)
|
|||||||
try:
|
try:
|
||||||
for rel in rels:
|
for rel in rels:
|
||||||
rel_dict = rel.to_dict({'info': {}})
|
rel_dict = rel.to_dict({'info': {}})
|
||||||
|
|
||||||
movie_dict = fireEvent('movie.get', rel.movie_id, single = True)
|
movie_dict = fireEvent('movie.get', rel.movie_id, single = True)
|
||||||
|
|
||||||
# check status
|
# check status
|
||||||
@@ -712,26 +705,22 @@ Remove it if you want it to be renamed (again, or at least let it try again)
|
|||||||
# Remove the downloading tag
|
# Remove the downloading tag
|
||||||
self.untagDir(item['folder'], 'downloading')
|
self.untagDir(item['folder'], 'downloading')
|
||||||
|
|
||||||
rel.status_id = seeding_status.get('id')
|
# Set the release to seeding
|
||||||
rel.last_edit = int(time.time())
|
fireEvent('release.update', id = rel.id, status = seeding_status, single = True)
|
||||||
db.commit()
|
|
||||||
|
|
||||||
# Scan and set the torrent to paused if required
|
# Scan and set the torrent to paused if required
|
||||||
item.update({'pause': True, 'scan': True, 'process_complete': False})
|
item.update({'pause': True, 'scan': True, 'process_complete': False})
|
||||||
scan_items.append(item)
|
scan_items.append(item)
|
||||||
else:
|
else:
|
||||||
if rel.status_id != seeding_status.get('id'):
|
# Set the release to seeding
|
||||||
rel.status_id = seeding_status.get('id')
|
fireEvent('release.update', id = rel.id, status = seeding_status, single = True)
|
||||||
rel.last_edit = int(time.time())
|
|
||||||
db.commit()
|
|
||||||
|
|
||||||
#let it seed
|
#let it seed
|
||||||
log.debug('%s is seeding with ratio: %s', (item['name'], item['seed_ratio']))
|
log.debug('%s is seeding with ratio: %s', (item['name'], item['seed_ratio']))
|
||||||
elif item['status'] == 'failed':
|
elif item['status'] == 'failed':
|
||||||
fireEvent('download.remove_failed', item, single = True)
|
fireEvent('download.remove_failed', item, single = True)
|
||||||
rel.status_id = failed_status.get('id')
|
# Set the release to failed
|
||||||
rel.last_edit = int(time.time())
|
fireEvent('release.update', id = rel.id, status = failed_status, single = True)
|
||||||
db.commit()
|
|
||||||
|
|
||||||
if self.conf('next_on_failed'):
|
if self.conf('next_on_failed'):
|
||||||
fireEvent('movie.searcher.try_next_release', movie_id = rel.movie_id)
|
fireEvent('movie.searcher.try_next_release', movie_id = rel.movie_id)
|
||||||
@@ -743,18 +732,14 @@ 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.status_id == seeding_status.get('id'):
|
||||||
if rel.movie.status_id == done_status.get('id'):
|
if rel.movie.status_id == done_status.get('id'):
|
||||||
# Set the release to done as the movie has already been renamed
|
# Set the release to done as the movie has already been renamed
|
||||||
rel.status_id = downloaded_status.get('id')
|
fireEvent('release.update', id = rel.id, status = downloaded_status, single = True)
|
||||||
rel.last_edit = int(time.time())
|
|
||||||
db.commit()
|
|
||||||
|
|
||||||
# Allow the downloader to clean-up
|
# Allow the downloader to clean-up
|
||||||
item.update({'pause': False, 'scan': False, 'process_complete': True})
|
item.update({'pause': False, 'scan': False, 'process_complete': True})
|
||||||
scan_items.append(item)
|
scan_items.append(item)
|
||||||
else:
|
else:
|
||||||
# Set the release to snatched so that the renamer can process the release as if it was never seeding
|
# 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')
|
fireEvent('release.update', id = rel.id, status = snatched_status, single = True)
|
||||||
rel.last_edit = int(time.time())
|
|
||||||
db.commit()
|
|
||||||
|
|
||||||
# Scan and Allow the downloader to clean-up
|
# Scan and Allow the downloader to clean-up
|
||||||
item.update({'pause': False, 'scan': True, 'process_complete': True})
|
item.update({'pause': False, 'scan': True, 'process_complete': True})
|
||||||
|
|||||||
Reference in New Issue
Block a user