diff --git a/libs/subliminal_patch/providers/subssabbz.py b/libs/subliminal_patch/providers/subssabbz.py index 171b0aded..f524a382b 100644 --- a/libs/subliminal_patch/providers/subssabbz.py +++ b/libs/subliminal_patch/providers/subssabbz.py @@ -62,6 +62,7 @@ class SubsSabBzSubtitle(Subtitle): return self.fps def make_picklable(self): + self.content = None return self def get_matches(self, video): diff --git a/libs/subliminal_patch/providers/subsunacs.py b/libs/subliminal_patch/providers/subsunacs.py index 1d5187895..6fccbdba5 100644 --- a/libs/subliminal_patch/providers/subsunacs.py +++ b/libs/subliminal_patch/providers/subsunacs.py @@ -42,18 +42,23 @@ class SubsUnacsSubtitle(Subtitle): """SubsUnacs Subtitle.""" provider_name = 'subsunacs' - def __init__(self, langauge, filename, type, video, link): + def __init__(self, langauge, filename, type, video, link, fps, num_cds): super(SubsUnacsSubtitle, self).__init__(langauge) self.langauge = langauge self.filename = filename self.page_link = link self.type = type self.video = video + self.fps = fps + self.num_cds = num_cds self.release_info = os.path.splitext(filename)[0] @property def id(self): - return self.filename + return self.page_link + self.filename + + def get_fps(self): + return self.fps def make_picklable(self): self.content = None @@ -75,6 +80,10 @@ class SubsUnacsSubtitle(Subtitle): if video_filename == subtitle_filename: matches.add('hash') + if video.year and self.year == video.year: + matches.add('year') + + matches |= guess_matches(video, guessit(self.title, {'type': self.type})) matches |= guess_matches(video, guessit(self.filename, {'type': self.type})) return matches @@ -146,11 +155,43 @@ class SubsUnacsProvider(Provider): element = a_element_wrapper.find('a', {'class': 'tooltip'}) if element: link = element.get('href') - element = row.find('a', href = re.compile(r'.*/search\.php\?t=1\&(memid|u)=.*')) - uploader = element.get_text() if element else None + notes = element.get('title') + title = element.get_text() + + try: + year = int(element.find_next_sibling('span', {'class' : 'smGray'}).text.strip('\xa0()')) + except: + year = None + + td = row.findAll('td') + + try: + num_cds = int(td[1].get_text()) + except: + num_cds = None + + try: + fps = float(td[2].get_text()) + except: + fps = None + + try: + rating = float(td[3].find('img').get('title')) + except: + rating = None + + try: + uploader = td[5].get_text() + except: + uploader = None + logger.info('Found subtitle link %r', link) - sub = self.download_archive_and_add_subtitle_files('https://subsunacs.net' + link, language, video) - for s in sub: + sub = self.download_archive_and_add_subtitle_files('https://subsunacs.net' + link, language, video, fps, num_cds) + for s in sub: + s.title = title + s.notes = notes + s.year = year + s.rating = rating s.uploader = uploader subtitles = subtitles + sub return subtitles @@ -163,12 +204,13 @@ class SubsUnacsProvider(Provider): pass else: seeking_subtitle_file = subtitle.filename - arch = self.download_archive_and_add_subtitle_files(subtitle.page_link, subtitle.language, subtitle.video) + arch = self.download_archive_and_add_subtitle_files(subtitle.page_link, subtitle.language, subtitle.video, + subtitle.fps, subtitle.num_cds) for s in arch: if s.filename == seeking_subtitle_file: subtitle.content = s.content - def process_archive_subtitle_files(self, archiveStream, language, video, link): + def process_archive_subtitle_files(self, archiveStream, language, video, link, fps, num_cds): subtitles = [] type = 'episode' if isinstance(video, Episode) else 'movie' for file_name in archiveStream.namelist(): @@ -178,13 +220,13 @@ class SubsUnacsProvider(Provider): logger.info('Ignore readme txt file %r', file_name) continue logger.info('Found subtitle file %r', file_name) - subtitle = SubsUnacsSubtitle(language, file_name, type, video, link) + subtitle = SubsUnacsSubtitle(language, file_name, type, video, link, fps, num_cds) subtitle.content = archiveStream.read(file_name) if file_is_txt == False or subtitle.is_valid(): subtitles.append(subtitle) return subtitles - def download_archive_and_add_subtitle_files(self, link, language, video ): + def download_archive_and_add_subtitle_files(self, link, language, video, fps, num_cds): logger.info('Downloading subtitle %r', link) request = self.session.get(link, headers={ 'Referer': 'https://subsunacs.net/search.php' @@ -193,9 +235,9 @@ class SubsUnacsProvider(Provider): archive_stream = io.BytesIO(request.content) if is_rarfile(archive_stream): - return self.process_archive_subtitle_files( RarFile(archive_stream), language, video, link ) + return self.process_archive_subtitle_files(RarFile(archive_stream), language, video, link, fps, num_cds) elif is_zipfile(archive_stream): - return self.process_archive_subtitle_files( ZipFile(archive_stream), language, video, link ) + return self.process_archive_subtitle_files(ZipFile(archive_stream), language, video, link, fps, num_cds) else: logger.error('Ignore unsupported archive %r', request.headers) return [] diff --git a/libs/subliminal_patch/providers/yavkanet.py b/libs/subliminal_patch/providers/yavkanet.py index c9d6e8ee7..74198550e 100644 --- a/libs/subliminal_patch/providers/yavkanet.py +++ b/libs/subliminal_patch/providers/yavkanet.py @@ -45,6 +45,7 @@ class YavkaNetSubtitle(Subtitle): return self.fps def make_picklable(self): + self.content = None return self def get_matches(self, video):