From ed0e54d64dbecda13ae704f9841e282c8f1da7fd Mon Sep 17 00:00:00 2001 From: Ruud Date: Wed, 26 Sep 2012 20:59:03 +0200 Subject: [PATCH] Add force full search options to wanted list --- .../core/plugins/movie/static/movie.css | 2 +- couchpotato/core/plugins/searcher/main.py | 36 +++++++++++++- couchpotato/static/scripts/page/wanted.js | 49 ++++++++++++++++++- 3 files changed, 84 insertions(+), 3 deletions(-) diff --git a/couchpotato/core/plugins/movie/static/movie.css b/couchpotato/core/plugins/movie/static/movie.css index f809c579..0979ccf0 100644 --- a/couchpotato/core/plugins/movie/static/movie.css +++ b/couchpotato/core/plugins/movie/static/movie.css @@ -534,5 +534,5 @@ } .movies .alph_nav .more_menu > a { - background-position: center -157px; + background-position: center -158px; } diff --git a/couchpotato/core/plugins/searcher/main.py b/couchpotato/core/plugins/searcher/main.py index 41ae0d9c..76ee24d8 100644 --- a/couchpotato/core/plugins/searcher/main.py +++ b/couchpotato/core/plugins/searcher/main.py @@ -1,6 +1,6 @@ from couchpotato import get_session from couchpotato.api import addApiView -from couchpotato.core.event import addEvent, fireEvent +from couchpotato.core.event import addEvent, fireEvent, fireEventAsync from couchpotato.core.helpers.encoding import simplifyString, toUnicode from couchpotato.core.helpers.request import jsonified, getParam from couchpotato.core.helpers.variable import md5, getTitle @@ -36,9 +36,35 @@ class Searcher(Plugin): }, }) + addApiView('searcher.full_search', self.allMoviesView, docs = { + 'desc': 'Starts a full search for all wanted movies', + }) + + addApiView('searcher.progress', self.getProgress, docs = { + 'desc': 'Get the progress of current full search', + }) + # Schedule cronjob fireEvent('schedule.cron', 'searcher.all', self.allMovies, day = self.conf('cron_day'), hour = self.conf('cron_hour'), minute = self.conf('cron_minute')) + def allMoviesView(self): + + in_progress = self.in_progress + if not in_progress: + fireEventAsync('searcher.all') + fireEvent('notify.frontend', type = 'searcher.started', data = True, message = 'Full search started') + else: + fireEvent('notify.frontend', type = 'searcher.already_started', data = True, message = 'Full search already in progress') + + return jsonified({ + 'success': not in_progress + }) + + def getProgress(self): + + return jsonified({ + 'progress': self.in_progress + }) def allMovies(self): @@ -54,6 +80,11 @@ class Searcher(Plugin): Movie.status.has(identifier = 'active') ).all() + self.in_progress = { + 'total': len(movies), + 'to_go': len(movies), + } + for movie in movies: movie_dict = movie.to_dict({ 'profile': {'types': {'quality': {}}}, @@ -70,6 +101,9 @@ class Searcher(Plugin): except: log.error('Search failed for %s: %s', (movie_dict['library']['identifier'], traceback.format_exc())) + self.in_progress['to_go'] -= 1 + time.sleep(10) + # Break if CP wants to shut down if self.shuttingDown(): break diff --git a/couchpotato/static/scripts/page/wanted.js b/couchpotato/static/scripts/page/wanted.js index a50b1bd7..69743247 100644 --- a/couchpotato/static/scripts/page/wanted.js +++ b/couchpotato/static/scripts/page/wanted.js @@ -10,16 +10,63 @@ Page.Wanted = new Class({ if(!self.wanted){ + self.manual_search = new Element('a', { + 'title': 'Force a search for the full wanted list', + 'text': 'Search all wanted', + 'events':{ + 'click': self.doFullSearch.bind(self, true) + } + }); + // Wanted movies self.wanted = new MovieList({ 'identifier': 'wanted', 'status': 'active', 'actions': MovieActions, - 'add_new': true + 'add_new': true, + 'menu': [self.manual_search] }); $(self.wanted).inject(self.el); + + // Check if search is in progress + self.startProgressInterval(); } + }, + + doFullSearch: function(full){ + var self = this; + + if(!self.search_in_progress){ + + Api.request('searcher.full_search'); + self.startProgressInterval(); + + } + + }, + + startProgressInterval: function(){ + var self = this; + + var start_text = self.manual_search.get('text'); + self.progress_interval = setInterval(function(){ + Api.request('searcher.progress', { + 'onComplete': function(json){ + self.search_in_progress = true; + if(!json.progress){ + clearInterval(self.progress_interval); + self.search_in_progress = false; + self.manual_search.set('text', start_text); + } + else { + var progress = json.progress; + self.manual_search.set('text', 'Searching.. (' + (((progress.total-progress.to_go)/progress.total)*100).round() + '%)'); + } + } + }) + }, 1000); + } });