From ec68e429014b49e4f4923dcbe8ccd588ebfe059d Mon Sep 17 00:00:00 2001 From: Ruud Date: Tue, 25 Aug 2015 12:02:38 +0200 Subject: [PATCH] Move suggestion class --- couchpotato/core/media/movie/suggestion.py | 141 +++++++++++++++++++++ .../core/media/movie/suggestion/__init__.py | 0 couchpotato/core/media/movie/suggestion/main.py | 141 --------------------- 3 files changed, 141 insertions(+), 141 deletions(-) create mode 100644 couchpotato/core/media/movie/suggestion.py delete mode 100644 couchpotato/core/media/movie/suggestion/__init__.py delete mode 100755 couchpotato/core/media/movie/suggestion/main.py diff --git a/couchpotato/core/media/movie/suggestion.py b/couchpotato/core/media/movie/suggestion.py new file mode 100644 index 0000000..2b4fd7b --- /dev/null +++ b/couchpotato/core/media/movie/suggestion.py @@ -0,0 +1,141 @@ +import time +from couchpotato.api import addApiView +from couchpotato.core.event import fireEvent, addEvent +from couchpotato.core.helpers.variable import splitString, removeDuplicate, getIdentifier, getTitle +from couchpotato.core.plugins.base import Plugin +from couchpotato.environment import Env + + +autoload = 'Suggestion' + + +class Suggestion(Plugin): + + def __init__(self): + + addApiView('suggestion.view', self.suggestView) + addApiView('suggestion.ignore', self.ignoreView) + + def test(): + time.sleep(1) + self.suggestView() + + addEvent('app.load', test) + + def suggestView(self, limit = 6, **kwargs): + + movies = splitString(kwargs.get('movies', '')) + ignored = splitString(kwargs.get('ignored', '')) + seen = splitString(kwargs.get('seen', '')) + + cached_suggestion = self.getCache('suggestion_cached') + if cached_suggestion: + suggestions = cached_suggestion + else: + + if not movies or len(movies) == 0: + active_movies = fireEvent('media.with_status', ['active', 'done'], types = 'movie', single = True) + movies = [getIdentifier(x) for x in active_movies] + + if not ignored or len(ignored) == 0: + ignored = splitString(Env.prop('suggest_ignore', default = '')) + if not seen or len(seen) == 0: + movies.extend(splitString(Env.prop('suggest_seen', default = ''))) + + suggestions = fireEvent('movie.suggest', movies = movies, ignore = ignored, single = True) + self.setCache('suggestion_cached', suggestions, timeout = 6048000) # Cache for 10 weeks + + medias = [] + for suggestion in suggestions[:int(limit)]: + + # Cache poster + posters = suggestion.get('images', {}).get('poster', []) + poster = [x for x in posters if 'tmdb' in x] + posters = poster if len(poster) > 0 else posters + + cached_poster = fireEvent('file.download', url = posters[0], single = True) if len(posters) > 0 else False + files = {'image_poster': [cached_poster] } if cached_poster else {} + + medias.append({ + 'status': 'suggested', + 'title': getTitle(suggestion), + 'type': 'movie', + 'info': suggestion, + 'files': files, + 'identifiers': { + 'imdb': suggestion.get('imdb') + } + }) + + return { + 'success': True, + 'movies': medias + } + + def ignoreView(self, imdb = None, limit = 6, remove_only = False, mark_seen = False, **kwargs): + + ignored = splitString(Env.prop('suggest_ignore', default = '')) + seen = splitString(Env.prop('suggest_seen', default = '')) + + new_suggestions = [] + if imdb: + if mark_seen: + seen.append(imdb) + Env.prop('suggest_seen', ','.join(set(seen))) + elif not remove_only: + ignored.append(imdb) + Env.prop('suggest_ignore', ','.join(set(ignored))) + + new_suggestions = self.updateSuggestionCache(ignore_imdb = imdb, limit = limit, ignored = ignored, seen = seen) + + if len(new_suggestions) <= limit: + return { + 'result': False + } + + # Only return new (last) item + media = { + 'status': 'suggested', + 'title': getTitle(new_suggestions[limit]), + 'type': 'movie', + 'info': new_suggestions[limit], + 'identifiers': { + 'imdb': new_suggestions[limit].get('imdb') + } + } + + return { + 'result': True, + 'movie': media + } + + def updateSuggestionCache(self, ignore_imdb = None, limit = 6, ignored = None, seen = None): + + # Combine with previous suggestion_cache + cached_suggestion = self.getCache('suggestion_cached') or [] + new_suggestions = [] + ignored = [] if not ignored else ignored + seen = [] if not seen else seen + + if ignore_imdb: + suggested_imdbs = [] + for cs in cached_suggestion: + if cs.get('imdb') != ignore_imdb and cs.get('imdb') not in suggested_imdbs: + suggested_imdbs.append(cs.get('imdb')) + new_suggestions.append(cs) + + # Get new results and add them + if len(new_suggestions) - 1 < limit: + active_movies = fireEvent('media.with_status', ['active', 'done'], single = True) + movies = [getIdentifier(x) for x in active_movies] + movies.extend(seen) + + ignored.extend([x.get('imdb') for x in cached_suggestion]) + suggestions = fireEvent('movie.suggest', movies = movies, ignore = removeDuplicate(ignored), single = True) + + if suggestions: + new_suggestions.extend(suggestions) + + self.setCache('suggestion_cached', new_suggestions, timeout = 3024000) + + return new_suggestions diff --git a/couchpotato/core/media/movie/suggestion/__init__.py b/couchpotato/core/media/movie/suggestion/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/couchpotato/core/media/movie/suggestion/main.py b/couchpotato/core/media/movie/suggestion/main.py deleted file mode 100755 index 2b4fd7b..0000000 --- a/couchpotato/core/media/movie/suggestion/main.py +++ /dev/null @@ -1,141 +0,0 @@ -import time -from couchpotato.api import addApiView -from couchpotato.core.event import fireEvent, addEvent -from couchpotato.core.helpers.variable import splitString, removeDuplicate, getIdentifier, getTitle -from couchpotato.core.plugins.base import Plugin -from couchpotato.environment import Env - - -autoload = 'Suggestion' - - -class Suggestion(Plugin): - - def __init__(self): - - addApiView('suggestion.view', self.suggestView) - addApiView('suggestion.ignore', self.ignoreView) - - def test(): - time.sleep(1) - self.suggestView() - - addEvent('app.load', test) - - def suggestView(self, limit = 6, **kwargs): - - movies = splitString(kwargs.get('movies', '')) - ignored = splitString(kwargs.get('ignored', '')) - seen = splitString(kwargs.get('seen', '')) - - cached_suggestion = self.getCache('suggestion_cached') - if cached_suggestion: - suggestions = cached_suggestion - else: - - if not movies or len(movies) == 0: - active_movies = fireEvent('media.with_status', ['active', 'done'], types = 'movie', single = True) - movies = [getIdentifier(x) for x in active_movies] - - if not ignored or len(ignored) == 0: - ignored = splitString(Env.prop('suggest_ignore', default = '')) - if not seen or len(seen) == 0: - movies.extend(splitString(Env.prop('suggest_seen', default = ''))) - - suggestions = fireEvent('movie.suggest', movies = movies, ignore = ignored, single = True) - self.setCache('suggestion_cached', suggestions, timeout = 6048000) # Cache for 10 weeks - - medias = [] - for suggestion in suggestions[:int(limit)]: - - # Cache poster - posters = suggestion.get('images', {}).get('poster', []) - poster = [x for x in posters if 'tmdb' in x] - posters = poster if len(poster) > 0 else posters - - cached_poster = fireEvent('file.download', url = posters[0], single = True) if len(posters) > 0 else False - files = {'image_poster': [cached_poster] } if cached_poster else {} - - medias.append({ - 'status': 'suggested', - 'title': getTitle(suggestion), - 'type': 'movie', - 'info': suggestion, - 'files': files, - 'identifiers': { - 'imdb': suggestion.get('imdb') - } - }) - - return { - 'success': True, - 'movies': medias - } - - def ignoreView(self, imdb = None, limit = 6, remove_only = False, mark_seen = False, **kwargs): - - ignored = splitString(Env.prop('suggest_ignore', default = '')) - seen = splitString(Env.prop('suggest_seen', default = '')) - - new_suggestions = [] - if imdb: - if mark_seen: - seen.append(imdb) - Env.prop('suggest_seen', ','.join(set(seen))) - elif not remove_only: - ignored.append(imdb) - Env.prop('suggest_ignore', ','.join(set(ignored))) - - new_suggestions = self.updateSuggestionCache(ignore_imdb = imdb, limit = limit, ignored = ignored, seen = seen) - - if len(new_suggestions) <= limit: - return { - 'result': False - } - - # Only return new (last) item - media = { - 'status': 'suggested', - 'title': getTitle(new_suggestions[limit]), - 'type': 'movie', - 'info': new_suggestions[limit], - 'identifiers': { - 'imdb': new_suggestions[limit].get('imdb') - } - } - - return { - 'result': True, - 'movie': media - } - - def updateSuggestionCache(self, ignore_imdb = None, limit = 6, ignored = None, seen = None): - - # Combine with previous suggestion_cache - cached_suggestion = self.getCache('suggestion_cached') or [] - new_suggestions = [] - ignored = [] if not ignored else ignored - seen = [] if not seen else seen - - if ignore_imdb: - suggested_imdbs = [] - for cs in cached_suggestion: - if cs.get('imdb') != ignore_imdb and cs.get('imdb') not in suggested_imdbs: - suggested_imdbs.append(cs.get('imdb')) - new_suggestions.append(cs) - - # Get new results and add them - if len(new_suggestions) - 1 < limit: - active_movies = fireEvent('media.with_status', ['active', 'done'], single = True) - movies = [getIdentifier(x) for x in active_movies] - movies.extend(seen) - - ignored.extend([x.get('imdb') for x in cached_suggestion]) - suggestions = fireEvent('movie.suggest', movies = movies, ignore = removeDuplicate(ignored), single = True) - - if suggestions: - new_suggestions.extend(suggestions) - - self.setCache('suggestion_cached', new_suggestions, timeout = 3024000) - - return new_suggestions