From a63155103230653f6d307c62fda5ba7f16d0fb68 Mon Sep 17 00:00:00 2001 From: Ruud Date: Wed, 21 Dec 2011 17:30:58 +0100 Subject: [PATCH] Subtitle support base --- couchpotato/core/plugins/movie/main.py | 15 ++++-- couchpotato/core/plugins/subtitle/__init__.py | 32 ++++++++++++ couchpotato/core/plugins/subtitle/main.py | 50 +++++++++++++++++++ couchpotato/core/providers/subtitle/base.py | 3 +- .../providers/subtitle/subliminal/__init__.py | 4 +- .../providers/subtitle/subliminal/main.py | 18 ++++++- 6 files changed, 112 insertions(+), 10 deletions(-) create mode 100644 couchpotato/core/plugins/subtitle/__init__.py create mode 100644 couchpotato/core/plugins/subtitle/main.py diff --git a/couchpotato/core/plugins/movie/main.py b/couchpotato/core/plugins/movie/main.py index d4faf68f..6f6b0c6b 100644 --- a/couchpotato/core/plugins/movie/main.py +++ b/couchpotato/core/plugins/movie/main.py @@ -21,7 +21,7 @@ class MoviePlugin(Plugin): def __init__(self): addApiView('movie.search', self.search) - addApiView('movie.list', self.list) + addApiView('movie.list', self.listView) addApiView('movie.refresh', self.refresh) addApiView('movie.add', self.add) @@ -29,6 +29,7 @@ class MoviePlugin(Plugin): addApiView('movie.delete', self.delete) addEvent('movie.get', self.get) + addEvent('movie.list', self.list) def get(self, movie_id): @@ -37,13 +38,11 @@ class MoviePlugin(Plugin): return m.to_dict(self.default_dict) - def list(self): + def list(self, status = ['active']): - params = getParams() db = get_session() # Make a list from string - status = params.get('status', ['active']) if not isinstance(status, (list, tuple)): status = [status] @@ -54,6 +53,14 @@ class MoviePlugin(Plugin): temp = movie.to_dict(self.default_dict) movies.append(temp) + return movies + + def listView(self): + + params = getParams() + status = params.get('status', ['active']) + movies = self.list(status) + return jsonified({ 'success': True, 'empty': len(movies) == 0, diff --git a/couchpotato/core/plugins/subtitle/__init__.py b/couchpotato/core/plugins/subtitle/__init__.py new file mode 100644 index 00000000..231aebfe --- /dev/null +++ b/couchpotato/core/plugins/subtitle/__init__.py @@ -0,0 +1,32 @@ +from .main import Subtitle + +def start(): + return Subtitle() + +config = [{ + 'name': 'subtitle', + 'groups': [ + { + 'tab': 'renamer', + 'name': 'subtitle', + 'options': [ + { + 'name': 'enabled', + 'label': 'Search and download subtitles', + 'default': True, + 'type': 'enabler', + }, + { + 'name': 'languages', + 'description': 'The languages you want to download the sub', + }, + { + 'name': 'automatic', + 'default': True, + 'type': 'bool', + 'description': 'Automaticly search & download for movies in library', + }, + ], + }, + ], +}] diff --git a/couchpotato/core/plugins/subtitle/main.py b/couchpotato/core/plugins/subtitle/main.py new file mode 100644 index 00000000..066def83 --- /dev/null +++ b/couchpotato/core/plugins/subtitle/main.py @@ -0,0 +1,50 @@ +from couchpotato import get_session +from couchpotato.core.event import addEvent, fireEvent +from couchpotato.core.logger import CPLog +from couchpotato.core.plugins.base import Plugin +from couchpotato.core.settings.model import Library, FileType + +log = CPLog(__name__) + + +class Subtitle(Plugin): + + def __init__(self): + + addEvent('renamer.before', self.searchSingle) + + def searchLibrary(self): + + # Get all active and online movies + db = get_session() + + library = db.query(Library).all() + done_status = fireEvent('status.get', 'done', single = True) + + for movie in library.movies: + + for release in movie.releases: + + # get releases and their movie files + if release.status_id is done_status.get('id'): + + files = [] + for file in release.files.filter(FileType.status.has(identifier = 'movie')).all(): + files.append(file.path); + + # get subtitles for those files + subtitles = fireEvent('subtitle.search', files = files, languages = self.getLanguages(), merge = True) + + # do something with the returned subtitles + print subtitles + + + def searchSingle(self, group): + + subtitles = fireEvent('subtitle.search', files = group['files']['movie'], languages = self.getLanguages(), merge = True) + + # do something with the returned subtitles + print subtitles + + def getLanguages(self): + return self.conf('languages').split(',') diff --git a/couchpotato/core/providers/subtitle/base.py b/couchpotato/core/providers/subtitle/base.py index 46bfa81c..d26a6d1a 100644 --- a/couchpotato/core/providers/subtitle/base.py +++ b/couchpotato/core/providers/subtitle/base.py @@ -7,8 +7,7 @@ class SubtitleProvider(Provider): type = 'subtitle' def __init__(self): - - addEvent('renamer.before', self.search) + addEvent('subtitle.search', self.search) def search(self, group): pass diff --git a/couchpotato/core/providers/subtitle/subliminal/__init__.py b/couchpotato/core/providers/subtitle/subliminal/__init__.py index 6592c2fe..bc3cb856 100644 --- a/couchpotato/core/providers/subtitle/subliminal/__init__.py +++ b/couchpotato/core/providers/subtitle/subliminal/__init__.py @@ -1,6 +1,6 @@ -from .main import Subliminal +from .main import SubliminalProvider def start(): - return Subliminal() + return SubliminalProvider() config = [] diff --git a/couchpotato/core/providers/subtitle/subliminal/main.py b/couchpotato/core/providers/subtitle/subliminal/main.py index 0c0df7dc..9616aeac 100644 --- a/couchpotato/core/providers/subtitle/subliminal/main.py +++ b/couchpotato/core/providers/subtitle/subliminal/main.py @@ -1,8 +1,22 @@ from couchpotato.core.logger import CPLog from couchpotato.core.providers.subtitle.base import SubtitleProvider +from couchpotato.environment import Env +from libs import subliminal log = CPLog(__name__) -class Subliminal(SubtitleProvider): - pass +class SubliminalProvider(SubtitleProvider): + + plugins = ['OpenSubtitles', 'TheSubDB', 'SubsWiki'] + + def search(self, files = [], languages = []): + + # download subtitles + with subliminal.Subliminal(cache_dir = Env.get('cache_dir'), multi = True, + languages = self.getLanguages(), plugins = self.plugins) as subli: + subtitles = subli.downloadSubtitles(files) + + print subtitles + + return subtitles