Subtitle class
This commit is contained in:
		
							
								
								
									
										112
									
								
								seasonMover/subtitle.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								seasonMover/subtitle.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,112 @@ | |||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | import codecs | ||||||
|  | import logging | ||||||
|  | import os | ||||||
|  |  | ||||||
|  | import chardet | ||||||
|  | import pysrt | ||||||
|  | import hashlib | ||||||
|  |  | ||||||
|  | from video import Episode, Movie | ||||||
|  | from utils import sanitize | ||||||
|  |  | ||||||
|  | from langdetect import detect | ||||||
|  |  | ||||||
|  |  | ||||||
|  | logger = logging.getLogger(__name__) | ||||||
|  |  | ||||||
|  | #: Subtitle extensions | ||||||
|  | SUBTITLE_EXTENSIONS = ('.srt', '.sub', '.smi', '.txt', '.ssa', '.ass', '.mpl') | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Subtitle(object): | ||||||
|  |     """Base class for subtitle. | ||||||
|  |  | ||||||
|  |     :param language: language of the subtitle. | ||||||
|  |     :type language: :class:`~babelfish.language.Language` | ||||||
|  |     :param bool hearing_impaired: whether or not the subtitle is hearing impaired. | ||||||
|  |     :param page_link: URL of the web page from which the subtitle can be downloaded. | ||||||
|  |     :type page_link: str | ||||||
|  |     :param encoding: Text encoding of the subtitle. | ||||||
|  |     :type encoding: str | ||||||
|  |  | ||||||
|  |     """ | ||||||
|  |     #: Name of the provider that returns that class of subtitle | ||||||
|  |     provider_name = '' | ||||||
|  |  | ||||||
|  |     def __init__(self, name, parent_path, series, season, episode, language=None, hash=None, container=None, format=None, sdh=False): | ||||||
|  |         #: Language of the subtitle | ||||||
|  |          | ||||||
|  |         self.name = name | ||||||
|  |  | ||||||
|  |         self.parent_path = parent_path | ||||||
|  |          | ||||||
|  |         self.series = series | ||||||
|  |          | ||||||
|  |         self.season = season | ||||||
|  |  | ||||||
|  |         self.episode = episode | ||||||
|  |  | ||||||
|  |         self.language=language | ||||||
|  |  | ||||||
|  |         self.hash = hash | ||||||
|  |  | ||||||
|  |         self.container = container | ||||||
|  |          | ||||||
|  |         self.format = format | ||||||
|  |  | ||||||
|  |         self.sdh = sdh | ||||||
|  |  | ||||||
|  |     @classmethod | ||||||
|  |     def fromguess(cls, name, parent_path, guess): | ||||||
|  |         if not guess['type'] == 'movie' or guess['type'] == 'episode': | ||||||
|  |             raise ValueError('The guess must be an episode guess') | ||||||
|  |  | ||||||
|  |         if 'title' not in guess: | ||||||
|  |             raise ValueError('Insufficient data to process the guess') | ||||||
|  |  | ||||||
|  |         sdh = 'sdh' in name.lower() | ||||||
|  |  | ||||||
|  |         if guess['type'] is 'episode': | ||||||
|  |             return cls(name, parent_path, guess.get('title', 1), guess.get('season'), guess['episode'], | ||||||
|  |                 container=guess.get('container'), format=guess.get('format'), sdh=sdh) | ||||||
|  |         elif guess['type'] is 'movie': | ||||||
|  |             return cls(name, parent_path, guess.get('title', 1), container=guess.get('container'),  | ||||||
|  |                 format=guess.get('format'), sdh=sdh) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     def getLanguage(self): | ||||||
|  |         f = open(os.path.join(self.parent_path, self.name), 'r', encoding='ISO-8859-15') | ||||||
|  |         language = detect(f.read()) | ||||||
|  |         f.close() | ||||||
|  |  | ||||||
|  |         return language | ||||||
|  |  | ||||||
|  |     def __hash__(self): | ||||||
|  |         return hashlib.md5("b'{}'".format(self.series + str(self.season) + str(self.episode)).encode()).hexdigest() | ||||||
|  |  | ||||||
|  |     def __repr__(self): | ||||||
|  |         return '<%s %s [%ix%i]>' % (self.__class__.__name__, self.series, self.season, self.episode) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def get_subtitle_path(subtitles_path, language=None, extension='.srt'): | ||||||
|  |     """Get the subtitle path using the `subtitles_path` and `language`. | ||||||
|  |  | ||||||
|  |     :param str subtitles_path: path to the subtitle. | ||||||
|  |     :param language: language of the subtitle to put in the path. | ||||||
|  |     :type language: :class:`~babelfish.language.Language` | ||||||
|  |     :param str extension: extension of the subtitle. | ||||||
|  |     :return: path of the subtitle. | ||||||
|  |     :rtype: str | ||||||
|  |  | ||||||
|  |     """ | ||||||
|  |     subtitle_root = os.path.splitext(subtitles_path)[0] | ||||||
|  |  | ||||||
|  |     if language: | ||||||
|  |         subtitle_root += '.' + str(language) | ||||||
|  |  | ||||||
|  |     return subtitle_root + extension | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user