Source code for couchpotato.core.plugins.subtitle

import traceback

from couchpotato.core.event import addEvent
from couchpotato.core.helpers.encoding import toUnicode, sp
from couchpotato.core.helpers.variable import splitString
from couchpotato.core.logger import CPLog
from couchpotato.core.plugins.base import Plugin
from couchpotato.environment import Env
import subliminal


log = CPLog(__name__)

autoload = 'Subtitle'


[docs]class Subtitle(Plugin):
services = ['opensubtitles', 'thesubdb', 'subswiki', 'subscenter'] def __init__(self): addEvent('renamer.before', self.searchSingle) def searchSingle(self, group): if self.isDisabled(): return try: available_languages = sum(group['subtitle_language'].values(), []) downloaded = [] files = [toUnicode(x) for x in group['files']['movie']] log.debug('Searching for subtitles for: %s', files) for lang in self.getLanguages(): if lang not in available_languages: download = subliminal.download_subtitles(files, multi = True, force = self.conf('force'), languages = [lang], services = self.services, cache_dir = Env.get('cache_dir')) for subtitle in download: downloaded.extend(download[subtitle]) for d_sub in downloaded: log.info('Found subtitle (%s): %s', (d_sub.language.alpha2, files)) group['files']['subtitle'].append(sp(d_sub.path)) group['before_rename'].append(sp(d_sub.path)) group['subtitle_language'][sp(d_sub.path)] = [d_sub.language.alpha2] return True except: log.error('Failed searching for subtitle: %s', (traceback.format_exc())) return False def getLanguages(self): return splitString(self.conf('languages')) config = [{ 'name': 'subtitle', 'groups': [ { 'tab': 'renamer', 'name': 'subtitle', 'label': 'Download subtitles', 'description': 'after rename', 'options': [ { 'name': 'enabled', 'label': 'Search and download subtitles', 'default': False, 'type': 'enabler', }, { 'name': 'languages', 'description': ('Comma separated, 2 letter country code.', 'Example: en, nl. See the codes at <a href="http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes">on Wikipedia</a>'), }, { 'advanced': True, 'name': 'force', 'label': 'Force', 'description': ('Force download all languages (including embedded).', 'This will also <strong>overwrite</strong> all existing subtitles.'), 'default': False, 'type': 'bool', }, ], }, ], }]