From a130e74abe914b58e468a49da15538043f906cb2 Mon Sep 17 00:00:00 2001 From: medariox Date: Fri, 4 Mar 2016 15:39:12 +0100 Subject: [PATCH 1/3] Improve subtitles sql and logging --- sickbeard/subtitles.py | 32 +++++++++++++++----------------- sickbeard/tv.py | 29 ++++++++--------------------- 2 files changed, 23 insertions(+), 38 deletions(-) diff --git a/sickbeard/subtitles.py b/sickbeard/subtitles.py index 62e1ef1215..08667cc009 100644 --- a/sickbeard/subtitles.py +++ b/sickbeard/subtitles.py @@ -32,7 +32,6 @@ from sickbeard import history from sickbeard import db from sickbeard import processTV -from sickbeard.common import Quality from sickbeard.helpers import remove_non_release_groups, isMediaFile, isRarFile from sickrage.helper.common import episode_num, dateTimeFormat, subtitle_extensions from sickrage.helper.exceptions import ex @@ -141,6 +140,11 @@ def download_subtitles(subtitles_info): # pylint: disable=too-many-locals, too- episode_num(subtitles_info['season'], subtitles_info['episode'], numbering='absolute')), logger.DEBUG) return existing_subtitles, None + logger.log(u'Checking subtitle candidates for {} {} ({})'.format + (subtitles_info['show_name'], episode_num(subtitles_info['season'], subtitles_info['episode']) or + episode_num(subtitles_info['season'], subtitles_info['episode'], numbering='absolute'), + os.path.basename(subtitles_info['location'])), logger.DEBUG) + subtitles_path = get_subtitles_path(subtitles_info['location']) video_path = subtitles_info['location'] @@ -180,7 +184,7 @@ def download_subtitles(subtitles_info): # pylint: disable=too-many-locals, too- if not subtitles_list: logger.log(u'No subtitles found for {} {}'.format (subtitles_info['show_name'], episode_num(subtitles_info['season'], subtitles_info['episode']) or - episode_num(subtitles_info['season'], subtitles_info['episode'], numbering='absolute')), logger.DEBUG) + episode_num(subtitles_info['season'], subtitles_info['episode'], numbering='absolute'))) return existing_subtitles, None for subtitle in subtitles_list: @@ -204,6 +208,12 @@ def download_subtitles(subtitles_info): # pylint: disable=too-many-locals, too- logger.log(traceback.format_exc(), logger.ERROR) return existing_subtitles, None + if not found_subtitles: + logger.log(u'No subtitles downloaded for {} {}'.format + (subtitles_info['show_name'], episode_num(subtitles_info['season'], subtitles_info['episode']) or + episode_num(subtitles_info['season'], subtitles_info['episode'], numbering='absolute'))) + return existing_subtitles, None + for subtitle in found_subtitles: subtitle_path = subliminal.subtitle.get_subtitle_path(video.name, None if not sickbeard.SUBTITLES_MULTI else @@ -480,8 +490,6 @@ def dhm(td): logger.log(u'Checking for missed subtitles', logger.INFO) - statuses = list({status for status in Quality.DOWNLOADED + Quality.ARCHIVED}) - database = db.DBConnection() # Shows with air date <= 30 days, have a limit of 100 results # Shows with air date > 30 days, have a limit of 200 results @@ -495,9 +503,8 @@ def dhm(td): "FROM tv_episodes AS e INNER JOIN tv_shows AS s " "ON (e.showid = s.indexer_id) " "WHERE s.subtitles = 1 AND age {} 30 AND e.subtitles NOT LIKE ? " - "AND e.location != '' AND e.status IN ({}) ORDER BY lastsearch ASC LIMIT {}".format - (args[0], ','.join(['?'] * len(statuses)), args[1]), - [datetime.datetime.now().toordinal(), wanted_languages(True)] + statuses + "AND e.status LIKE '%4' ORDER BY lastsearch ASC LIMIT {}".format + (args[0], args[1]), [datetime.datetime.now().toordinal(), wanted_languages(True)] ) if not sql_results: @@ -545,10 +552,6 @@ def dhm(td): dhm(lastsearched + delay_time - now)), logger.DEBUG) continue - logger.log(u'Searching for missing subtitles of {} {}'.format - (ep_to_sub['show_name'], episode_num(ep_to_sub['season'], ep_to_sub['episode']) or - episode_num(ep_to_sub['season'], ep_to_sub['episode'], numbering='absolute')), logger.INFO) - show_object = Show.find(sickbeard.showList, int(ep_to_sub['showid'])) if not show_object: logger.log(u'Show with ID {} not found in the database'.format(ep_to_sub['showid']), logger.DEBUG) @@ -562,18 +565,13 @@ def dhm(td): continue try: - new_subtitles = episode_object.download_subtitles() + episode_object.download_subtitles() except Exception as error: logger.log(u'Unable to find subtitles for {} {}. Error: {}'.format (ep_to_sub['show_name'], episode_num(ep_to_sub['season'], ep_to_sub['episode']) or episode_num(ep_to_sub['season'], ep_to_sub['episode'], numbering='absolute'), ex(error)), logger.ERROR) continue - if new_subtitles: - logger.log(u'Downloaded {} subtitles for {} {}'.format - (', '.join(new_subtitles), ep_to_sub['show_name'], episode_num(ep_to_sub['season'], ep_to_sub['episode']) or - episode_num(ep_to_sub['season'], ep_to_sub['episode'], numbering='absolute'))) - except Exception as error: logger.log(u'Error while searching subtitles for {} {}. Error: {}'.format (ep_to_sub['show_name'], episode_num(ep_to_sub['season'], ep_to_sub['episode']) or diff --git a/sickbeard/tv.py b/sickbeard/tv.py index 9cd9be0607..c85b110b38 100644 --- a/sickbeard/tv.py +++ b/sickbeard/tv.py @@ -1399,7 +1399,7 @@ def _set_location(self, new_location): location = property(lambda self: self._location, _set_location) def refreshSubtitles(self): - """Look for subtitles files and refresh the subtitles property""" + """Look for subtitles files and refresh the subtitles property.""" episode_info = {'show_name': self.show.name, 'location': self.location, 'season': self.season, 'episode': self.episode} self.subtitles, save_subtitles = subtitles.refresh_subtitles(episode_info, self.subtitles) @@ -1408,20 +1408,11 @@ def refreshSubtitles(self): def download_subtitles(self, force=False): if not ek(os.path.isfile, self.location): - logger.log(u"{id}: Episode file doesn't exist, can't download subtitles for {ep}".format - (id=self.show.indexerid, ep=episode_num(self.season, self.episode)), - logger.DEBUG) - return - - if not subtitles.needs_subtitles(self.subtitles): - logger.log(u'Episode already has all needed subtitles, skipping episode {ep} of show {show}'.format - (ep=episode_num(self.season, self.episode), show=self.show.name), logger.DEBUG) + logger.log(u"Episode file doesn't exist, can't download subtitles for {} {}".format + (self.show.name, episode_num(self.season, self.episode) or + episode_num(self.season, self.episode, numbering='absolute')), logger.DEBUG) return - logger.log(u"Checking subtitle candidates for {show} {ep} ({location})".format - (show=self.show.name, ep=episode_num(self.season, self.episode), - location=os.path.basename(self.location)), logger.DEBUG) - subtitles_info = {'location': self.location, 'subtitles': self.subtitles, 'season': self.season, 'episode': self.episode, 'name': self.name, 'show_name': self.show.name, 'show_indexerid': self.show.indexerid, 'status': self.status} @@ -1433,16 +1424,12 @@ def download_subtitles(self, force=False): self.saveToDB() if new_subtitles: - subtitle_list = ", ".join([subtitles.name_from_code(code) for code in new_subtitles]) - logger.log(u"{id}: Downloaded {subtitles} subtitles for {show} {ep}".format - (id=self.show.indexerid, subtitles=subtitle_list, show=self.show.name, - ep=episode_num(self.season, self.episode)), logger.DEBUG) + subtitle_list = ', '.join([subtitles.name_from_code(code) for code in new_subtitles]) + logger.log(u'Downloaded {} subtitles for {} {}'.format + (subtitle_list, self.show.name, episode_num(self.season, self.episode) or + episode_num(self.season, self.episode, numbering='absolute'))) notifiers.notify_subtitle_download(self.prettyName(), subtitle_list) - else: - logger.log(u"{id}: No subtitles downloaded for {show} {ep}".format - (id=self.show.indexerid, show=self.show.name, - ep=episode_num(self.season, self.episode)), logger.DEBUG) return new_subtitles From 9aa8b876939e952a3b268d0b5b3c30dd5fb9419a Mon Sep 17 00:00:00 2001 From: medariox Date: Fri, 4 Mar 2016 16:25:58 +0100 Subject: [PATCH 2/3] Adjust sql query --- sickbeard/subtitles.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sickbeard/subtitles.py b/sickbeard/subtitles.py index 08667cc009..372d60332a 100644 --- a/sickbeard/subtitles.py +++ b/sickbeard/subtitles.py @@ -502,8 +502,8 @@ def dhm(td): "e.subtitles_lastsearch AS lastsearch, e.location, (? - e.airdate) as age " "FROM tv_episodes AS e INNER JOIN tv_shows AS s " "ON (e.showid = s.indexer_id) " - "WHERE s.subtitles = 1 AND age {} 30 AND e.subtitles NOT LIKE ? " - "AND e.status LIKE '%4' ORDER BY lastsearch ASC LIMIT {}".format + "WHERE s.subtitles = 1 AND (e.status LIKE '%4' OR e.status LIKE '%6') AND e.season > 0 " + "AND e.location != '' AND age {} 30 AND e.subtitles NOT LIKE ? ORDER BY lastsearch ASC LIMIT {}".format (args[0], args[1]), [datetime.datetime.now().toordinal(), wanted_languages(True)] ) From e59fd72731e7e2b8ea0c7136be6ed9941d8cd4af Mon Sep 17 00:00:00 2001 From: medariox Date: Fri, 4 Mar 2016 20:36:18 +0100 Subject: [PATCH 3/3] downloaded > matched --- sickbeard/subtitles.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sickbeard/subtitles.py b/sickbeard/subtitles.py index 372d60332a..f24ff9270c 100644 --- a/sickbeard/subtitles.py +++ b/sickbeard/subtitles.py @@ -209,7 +209,7 @@ def download_subtitles(subtitles_info): # pylint: disable=too-many-locals, too- return existing_subtitles, None if not found_subtitles: - logger.log(u'No subtitles downloaded for {} {}'.format + logger.log(u'No subtitles matched for {} {}'.format (subtitles_info['show_name'], episode_num(subtitles_info['season'], subtitles_info['episode']) or episode_num(subtitles_info['season'], subtitles_info['episode'], numbering='absolute'))) return existing_subtitles, None