diff --git a/couchpotato/core/_base/scheduler/main.py b/couchpotato/core/_base/scheduler/main.py index 773213b..3d835f9 100644 --- a/couchpotato/core/_base/scheduler/main.py +++ b/couchpotato/core/_base/scheduler/main.py @@ -17,6 +17,7 @@ class Scheduler(Plugin): addEvent('schedule.cron', self.cron) addEvent('schedule.interval', self.interval) addEvent('schedule.remove', self.remove) + addEvent('schedule.queue', self.queue) self.sched = Sched(misfire_grace_time = 60) self.sched.start() @@ -64,3 +65,14 @@ class Scheduler(Plugin): '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 diff --git a/couchpotato/core/media/_base/media/main.py b/couchpotato/core/media/_base/media/main.py index 86d5a4b..206187f 100644 --- a/couchpotato/core/media/_base/media/main.py +++ b/couchpotato/core/media/_base/media/main.py @@ -1,8 +1,8 @@ -from couchpotato import get_session +from couchpotato import get_session, tryInt from couchpotato.api import addApiView from couchpotato.core.event import fireEvent, fireEventAsync, addEvent 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.media import MediaBase from couchpotato.core.settings.model import Library, LibraryTitle, Release, \ @@ -72,24 +72,39 @@ class MediaPlugin(MediaBase): def refresh(self, id = '', **kwargs): db = get_session() - for x in splitString(id): - media = db.query(Media).filter_by(id = x).first() + handlers = [] + ids = splitString(id) - if media: - # Get current selected title - default_title = '' - for title in media.library.titles: - if title.default: default_title = title.title + for x in ids: - fireEvent('notify.frontend', type = '%s.busy' % media.type, data = {'id': x}) - fireEventAsync('library.update.%s' % media.type, identifier = media.library.identifier, default_title = default_title, force = True, on_complete = self.createOnComplete(x)) + refresh_handler = self.createRefreshHandler(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 { '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): for media_type in fireEvent('media.types', merge = True): diff --git a/couchpotato/core/media/movie/_base/static/movie.js b/couchpotato/core/media/movie/_base/static/movie.js index 9c0ae01..3ca1912 100644 --- a/couchpotato/core/media/movie/_base/static/movie.js +++ b/couchpotato/core/media/movie/_base/static/movie.js @@ -36,10 +36,10 @@ var Movie = new Class({ App.on('movie.update', self.global_events['movie.update']); // 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){ - if(notification.data && self.data.id == notification.data.id) - self.busy(true) + 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); } App.on(listener, self.global_events[listener]); }) @@ -329,4 +329,4 @@ var Movie = new Class({ return this.el; } -}); \ No newline at end of file +}); diff --git a/couchpotato/static/scripts/page/home.js b/couchpotato/static/scripts/page/home.js index dee43c8..818ce0e 100644 --- a/couchpotato/static/scripts/page/home.js +++ b/couchpotato/static/scripts/page/home.js @@ -184,4 +184,4 @@ Page.Home = new Class({ } -}); \ No newline at end of file +});