Queue multiple media refresh
This commit is contained in:
@@ -17,6 +17,7 @@ class Scheduler(Plugin):
|
|||||||
addEvent('schedule.cron', self.cron)
|
addEvent('schedule.cron', self.cron)
|
||||||
addEvent('schedule.interval', self.interval)
|
addEvent('schedule.interval', self.interval)
|
||||||
addEvent('schedule.remove', self.remove)
|
addEvent('schedule.remove', self.remove)
|
||||||
|
addEvent('schedule.queue', self.queue)
|
||||||
|
|
||||||
self.sched = Sched(misfire_grace_time = 60)
|
self.sched = Sched(misfire_grace_time = 60)
|
||||||
self.sched.start()
|
self.sched.start()
|
||||||
@@ -64,3 +65,14 @@ class Scheduler(Plugin):
|
|||||||
'seconds': seconds,
|
'seconds': seconds,
|
||||||
'job': self.sched.add_interval_job(handle, hours = hours, minutes = minutes, seconds = seconds)
|
'job': self.sched.add_interval_job(handle, hours = hours, minutes = minutes, seconds = seconds)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def queue(self, handlers = None):
|
||||||
|
if not handlers: handlers = []
|
||||||
|
|
||||||
|
for h in handlers:
|
||||||
|
h()
|
||||||
|
|
||||||
|
if self.shuttingDown():
|
||||||
|
break
|
||||||
|
|
||||||
|
return True
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
from couchpotato import get_session
|
from couchpotato import get_session, tryInt
|
||||||
from couchpotato.api import addApiView
|
from couchpotato.api import addApiView
|
||||||
from couchpotato.core.event import fireEvent, fireEventAsync, addEvent
|
from couchpotato.core.event import fireEvent, fireEventAsync, addEvent
|
||||||
from couchpotato.core.helpers.encoding import toUnicode
|
from couchpotato.core.helpers.encoding import toUnicode
|
||||||
from couchpotato.core.helpers.variable import mergeDicts, splitString, getImdb
|
from couchpotato.core.helpers.variable import mergeDicts, splitString, getImdb, getTitle
|
||||||
from couchpotato.core.logger import CPLog
|
from couchpotato.core.logger import CPLog
|
||||||
from couchpotato.core.media import MediaBase
|
from couchpotato.core.media import MediaBase
|
||||||
from couchpotato.core.settings.model import Library, LibraryTitle, Release, \
|
from couchpotato.core.settings.model import Library, LibraryTitle, Release, \
|
||||||
@@ -72,24 +72,39 @@ class MediaPlugin(MediaBase):
|
|||||||
def refresh(self, id = '', **kwargs):
|
def refresh(self, id = '', **kwargs):
|
||||||
db = get_session()
|
db = get_session()
|
||||||
|
|
||||||
for x in splitString(id):
|
handlers = []
|
||||||
media = db.query(Media).filter_by(id = x).first()
|
ids = splitString(id)
|
||||||
|
|
||||||
if media:
|
for x in ids:
|
||||||
# Get current selected title
|
|
||||||
default_title = ''
|
|
||||||
for title in media.library.titles:
|
|
||||||
if title.default: default_title = title.title
|
|
||||||
|
|
||||||
fireEvent('notify.frontend', type = '%s.busy' % media.type, data = {'id': x})
|
refresh_handler = self.createRefreshHandler(x)
|
||||||
fireEventAsync('library.update.%s' % media.type, identifier = media.library.identifier, default_title = default_title, force = True, on_complete = self.createOnComplete(x))
|
if refresh_handler:
|
||||||
|
handlers.append(refresh_handler)
|
||||||
|
|
||||||
db.expire_all()
|
fireEvent('notify.frontend', type = 'media.busy', data = {'id': [tryInt(x) for x in ids]})
|
||||||
|
fireEventAsync('schedule.queue', handlers = handlers)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'success': True,
|
'success': True,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def createRefreshHandler(self, id):
|
||||||
|
db = get_session()
|
||||||
|
|
||||||
|
media = db.query(Media).filter_by(id = id).first()
|
||||||
|
|
||||||
|
if media:
|
||||||
|
|
||||||
|
default_title = getTitle(media.library)
|
||||||
|
identifier = media.library.identifier
|
||||||
|
db.expire_all()
|
||||||
|
|
||||||
|
def handler():
|
||||||
|
fireEvent('library.update.%s' % media.type, identifier = identifier, default_title = default_title, force = True, on_complete = self.createOnComplete(id))
|
||||||
|
|
||||||
|
|
||||||
|
return handler
|
||||||
|
|
||||||
def addSingleRefreshView(self):
|
def addSingleRefreshView(self):
|
||||||
|
|
||||||
for media_type in fireEvent('media.types', merge = True):
|
for media_type in fireEvent('media.types', merge = True):
|
||||||
|
|||||||
@@ -36,10 +36,10 @@ var Movie = new Class({
|
|||||||
App.on('movie.update', self.global_events['movie.update']);
|
App.on('movie.update', self.global_events['movie.update']);
|
||||||
|
|
||||||
// Add spinner on load / search
|
// Add spinner on load / search
|
||||||
['movie.busy', 'movie.searcher.started'].each(function(listener){
|
['media.busy', 'movie.searcher.started'].each(function(listener){
|
||||||
self.global_events[listener] = function(notification){
|
self.global_events[listener] = function(notification){
|
||||||
if(notification.data && self.data.id == notification.data.id)
|
if(notification.data && (self.data.id == notification.data.id || (typeOf(notification.data.id) == 'array' && notification.data.id.indexOf(self.data.id) > -1)))
|
||||||
self.busy(true)
|
self.busy(true);
|
||||||
}
|
}
|
||||||
App.on(listener, self.global_events[listener]);
|
App.on(listener, self.global_events[listener]);
|
||||||
})
|
})
|
||||||
@@ -329,4 +329,4 @@ var Movie = new Class({
|
|||||||
return this.el;
|
return this.el;
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -184,4 +184,4 @@ Page.Home = new Class({
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user