diff --git a/gui/slick/interfaces/default/inc_qualityChooser.tmpl b/gui/slick/interfaces/default/inc_qualityChooser.tmpl index 329879c96aeed47bc68d9185f4c5e47d7a6bd23a..569667d8e85735d8682ff6cc59088f580353695d 100644 --- a/gui/slick/interfaces/default/inc_qualityChooser.tmpl +++ b/gui/slick/interfaces/default/inc_qualityChooser.tmpl @@ -36,7 +36,7 @@ <div style="text-align: left; float: left;"> <h5>Archive</h4> - #set $bestQualityList = filter(lambda x: x > $Quality.SDTV and x < $Quality.UNKNOWN, $Quality.qualityStrings) + #set $bestQualityList = filter(lambda x: x >= $Quality.SDTV and x < $Quality.UNKNOWN, $Quality.qualityStrings) <select id="bestQualities" name="bestQualities" multiple="multiple" size="$len($bestQualityList)" class="form-control form-control-inline input-sm"> #for $curQuality in sorted($bestQualityList): <option value="$curQuality" #if $curQuality in $bestQualities then "selected=\"selected\"" else ""#>$Quality.qualityStrings[$curQuality]</option> diff --git a/gui/slick/interfaces/default/manage_massEdit.tmpl b/gui/slick/interfaces/default/manage_massEdit.tmpl index ff01c02de9fd19874e19ab9ec73e7488477d8e90..bd899f3c29a8ee40c6875af844423a669210fbc6 100644 --- a/gui/slick/interfaces/default/manage_massEdit.tmpl +++ b/gui/slick/interfaces/default/manage_massEdit.tmpl @@ -62,7 +62,7 @@ </div> <div class="manageCustom pull-left"> <h4>Archive</h4> - #set $bestQualityList = filter(lambda x: x > $common.Quality.SDTV, $common.Quality.qualityStrings) + #set $bestQualityList = filter(lambda x: x >= $common.Quality.SDTV, $common.Quality.qualityStrings) <select id="bestQualities" name="bestQualities" multiple="multiple" size="len($bestQualityList)"> #for $curQuality in sorted($bestQualityList): <option value="$curQuality" #if $curQuality in $bestQualities then "selected=\"selected\"" else ""#>$common.Quality.qualityStrings[$curQuality]</option> diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py index 81c5473ff15e409b157bd08a0dda82a0bdbf69da..e44c7514f92fd4d3b05df63a22a02120a5e6d84b 100644 --- a/sickbeard/helpers.py +++ b/sickbeard/helpers.py @@ -106,12 +106,41 @@ def remove_non_release_groups(name): Remove non release groups from name """ - if name and "-" in name: - name_group = name.rsplit('-', 1) - if name_group[-1].upper() in ["RP", "NZBGEEK"]: - name = name_group[0] + if not name: + return name - return name + # Do not remove all [....] suffixes, or it will break anime releases ## Need to verify this is true now + # Check your database for funky release_names and add them here, to improve failed handling, archiving, and history. + # select release_name from tv_episodes WHERE LENGTH(release_name); + # [eSc], [SSG], [GWC] are valid release groups for non-anime + removeWordsList = {'\[rartv\]$': 'searchre', + '\[rarbg\]$': 'searchre', + '\[eztv\]$': 'searchre', + '\[ettv\]$': 'searchre', + '\[vtv\]$': 'searchre', + '\[GloDLS\]$': 'searchre', + '\[silv4\]$': 'searchre', + '\[Seedbox\]$': 'searchre', + '\[AndroidTwoU\]$': 'searchre', + '\.RiPSaLoT$': 'searchre', + '-NZBGEEK$': 'searchre', + '-RP$': 'searchre', + '-20-40$': 'searchre', + '^\[ www\.TorrentDay\.com \] - ': 'searchre', + '^\[ www\.Cpasbien\.pw \] ': 'searchre', + } + + _name = name + for remove_string, remove_type in removeWordsList.iteritems(): + if remove_type == 'search': + _name = _name.replace(remove_string, '') + elif remove_type == 'searchre': + _name = re.sub(r'(?i)' + remove_string, '', _name) + + #if _name != name: + # logger.log(u'Change title from {old_name} to {new_name}'.format(old_name=name, new_name=_name), logger.DEBUG) + + return _name def replaceExtension(filename, newExt): @@ -1584,7 +1613,7 @@ def isFileLocked(file, writeLockCheck=False): os.rename(file, lockFile) time.sleep(1) os.rename(lockFile, file) - except WindowsError: + except (OSError, IOError): return True return False diff --git a/sickbeard/providers/alpharatio.py b/sickbeard/providers/alpharatio.py index 91d006faece1fbb2981799d1ea2d47843bb7bb66..23cc8112447caddb0e41660fa8a7f1e18adc5bc9 100755 --- a/sickbeard/providers/alpharatio.py +++ b/sickbeard/providers/alpharatio.py @@ -222,8 +222,6 @@ class AlphaRatioProvider(generic.TorrentProvider): title, url, id, seeders, leechers = item if title: - title = u'' + title - title = title.replace(' ', '.') title = self._clean_title_from_provider(title) if url: diff --git a/sickbeard/providers/bitsoup.py b/sickbeard/providers/bitsoup.py index 080bcaf03f0a1f024d5ff7e33ad236e72c93206e..03a95bfc4b2a2f1a83cecd7b4bb77b1a006ddf08 100644 --- a/sickbeard/providers/bitsoup.py +++ b/sickbeard/providers/bitsoup.py @@ -228,8 +228,6 @@ class BitSoupProvider(generic.TorrentProvider): title, url, id, seeders, leechers = item if title: - title = u'' + title - title = title.replace(' ', '.') title = self._clean_title_from_provider(title) if url: diff --git a/sickbeard/providers/freshontv.py b/sickbeard/providers/freshontv.py index 24572d406e3c5dc4ef48315ee90a1157e198b4f0..d75474d5665736b485a3f50d0f2084280f42bd78 100755 --- a/sickbeard/providers/freshontv.py +++ b/sickbeard/providers/freshontv.py @@ -326,8 +326,6 @@ class FreshOnTVProvider(generic.TorrentProvider): title, url, id, seeders, leechers = item if title: - title = u'' + title - title = title.replace(' ', '.') title = self._clean_title_from_provider(title) if url: diff --git a/sickbeard/providers/generic.py b/sickbeard/providers/generic.py index 4f35c7b490ac7c636435af196ebffa6cf24ca0a9..7b6e8ca3ab3b6b148daa0a285d59aa3ee3369f51 100644 --- a/sickbeard/providers/generic.py +++ b/sickbeard/providers/generic.py @@ -499,31 +499,11 @@ class TorrentProvider(GenericProvider): GenericProvider.__init__(self, name) self.providerType = GenericProvider.TORRENT - - # Don't add a rule to remove everything between bracket, it will break anime release - self.removeWordsList = {'\[rartv\]$': 'searchre', - '\[rarbg\]$': 'searchre', - '\[eztv\]$': 'searchre', - '\[ettv\]$': 'searchre', - '\[GloDLS\]$': 'searchre', - '\[silv4\]$': 'searchre', - '\[Seedbox\]$': 'searchre', - '\[AndroidTwoU\]$': 'searchre', - '\.RiPSaLoT$': 'searchre', - } def _clean_title_from_provider(self, title): - torrent_title = title - for remove_string, remove_type in self.removeWordsList.iteritems(): - if remove_type == 'search': - torrent_title = torrent_title.replace(remove_string, '') - elif remove_type == 'searchre': - torrent_title = re.sub(remove_string, '', torrent_title) - - if torrent_title != title: - logger.log(u'Change title from {old_name} to {new_name}'.format(old_name=title, new_name=torrent_title), logger.DEBUG) - - return torrent_title + if title: + title = u'' + title.replace(' ', '.') + return title class ProviderProxy: diff --git a/sickbeard/providers/hdbits.py b/sickbeard/providers/hdbits.py index d5822bf8e851573a38825ad63bf3b5a7376fac56..fa3daa111d911880e82cca2a8d8e8ee45cd52619 100644 --- a/sickbeard/providers/hdbits.py +++ b/sickbeard/providers/hdbits.py @@ -84,8 +84,6 @@ class HDBitsProvider(generic.TorrentProvider): title = item['name'] if title: - title = u'' + title - title = title.replace(' ', '.') title = self._clean_title_from_provider(title) url = self.urls['download'] + urllib.urlencode({'id': item['id'], 'passkey': self.passkey}) diff --git a/sickbeard/providers/hdtorrents.py b/sickbeard/providers/hdtorrents.py index ffc3d49854fc5a14768d005efbfeb3fca2b976a6..f9a20749a885e7f481627c24b0e3a56709cb4257 100644 --- a/sickbeard/providers/hdtorrents.py +++ b/sickbeard/providers/hdtorrents.py @@ -292,8 +292,6 @@ class HDTorrentsProvider(generic.TorrentProvider): title, url, id, seeders, leechers = item if title: - title = u'' + title - title = title.replace(' ', '.') title = self._clean_title_from_provider(title) if url: diff --git a/sickbeard/providers/kat.py b/sickbeard/providers/kat.py index 672f69641f4011b363501d8cd285b69ecf577064..763091ddcebc6e4d7be4a733aa32ee5d551accd5 100644 --- a/sickbeard/providers/kat.py +++ b/sickbeard/providers/kat.py @@ -297,8 +297,6 @@ class KATProvider(generic.TorrentProvider): title, url, id, seeders, leechers, size, pubdate = item if title: - title = u'' + title - title = title.replace(' ', '.') title = self._clean_title_from_provider(title) if url: diff --git a/sickbeard/providers/morethantv.py b/sickbeard/providers/morethantv.py index d2db798c38e2fd500d4dffcf9aad34c7998d638e..e73f9a480a43635ac34187bf542ef4b49fb3a923 100755 --- a/sickbeard/providers/morethantv.py +++ b/sickbeard/providers/morethantv.py @@ -265,8 +265,6 @@ class MoreThanTVProvider(generic.TorrentProvider): title, url, id, seeders, leechers = item if title: - title = u'' + title - title = title.replace(' ', '.') title = self._clean_title_from_provider(title) if url: diff --git a/sickbeard/providers/oldpiratebay.py b/sickbeard/providers/oldpiratebay.py index 49381b2c80b26d3ef349fd3cd4be72a6a6a9b1da..d6de1213bdd364828a91946016bdf789f4b6bc51 100644 --- a/sickbeard/providers/oldpiratebay.py +++ b/sickbeard/providers/oldpiratebay.py @@ -293,7 +293,6 @@ class OldPirateBayProvider(generic.TorrentProvider): title, url, id, seeders, leechers = item if title: - title = u'' + title.replace(' ', '.') title = self._clean_title_from_provider(title) if url: diff --git a/sickbeard/providers/rarbg.py b/sickbeard/providers/rarbg.py index 7c2814905b09a0f03c9340f4f6baaf6fa35a296f..e0d938eea1769cfa59d05f1e1af71be80e231bc4 100644 --- a/sickbeard/providers/rarbg.py +++ b/sickbeard/providers/rarbg.py @@ -334,8 +334,6 @@ class RarbgProvider(generic.TorrentProvider): title, url = item if title: - title = u'' + title - title = title.replace(' ', '.') title = self._clean_title_from_provider(title) if url: diff --git a/sickbeard/providers/rsstorrent.py b/sickbeard/providers/rsstorrent.py index 8f6910c10c6b123b52a8544881ab1270225e9f74..807114e6f6083551374150c9da1e65203604cefd 100644 --- a/sickbeard/providers/rsstorrent.py +++ b/sickbeard/providers/rsstorrent.py @@ -78,8 +78,6 @@ class TorrentRssProvider(generic.TorrentProvider): title = item.get(self.titleTAG) if title: - title = u'' + title - title = title.replace(' ', '.') title = self._clean_title_from_provider(title) attempt_list = [lambda: item.get('torrent_magneturi'), diff --git a/sickbeard/providers/scc.py b/sickbeard/providers/scc.py index 3827abf90e01b63724832407d7c87955cd779f2f..5bbc224580fe9c2daebff0814aed7464703666c1 100644 --- a/sickbeard/providers/scc.py +++ b/sickbeard/providers/scc.py @@ -259,8 +259,6 @@ class SCCProvider(generic.TorrentProvider): title, url, id, seeders, leechers = item if title: - title = u'' + title - title = title.replace(' ', '.') title = self._clean_title_from_provider(title) if url: diff --git a/sickbeard/providers/scenetime.py b/sickbeard/providers/scenetime.py index ff572b3ed04cdd21a09f8ae384e379f12fb2a646..354615608e54de0916449d0ca54d6c28b940cb23 100644 --- a/sickbeard/providers/scenetime.py +++ b/sickbeard/providers/scenetime.py @@ -233,8 +233,6 @@ class SceneTimeProvider(generic.TorrentProvider): title, url, id, seeders, leechers = item if title: - title = u'' + title - title = title.replace(' ', '.') title = self._clean_title_from_provider(title) if url: diff --git a/sickbeard/providers/speedcd.py b/sickbeard/providers/speedcd.py index 0a83d9aafd38357109f97608d8d691b4c99a505d..9d92114f7e47b1898f37fd41ea36f33449a478f2 100644 --- a/sickbeard/providers/speedcd.py +++ b/sickbeard/providers/speedcd.py @@ -204,8 +204,6 @@ class SpeedCDProvider(generic.TorrentProvider): title, url, seeders, leechers = item if title: - title = u'' + title - title = title.replace(' ', '.') title = self._clean_title_from_provider(title) if url: diff --git a/sickbeard/providers/t411.py b/sickbeard/providers/t411.py index 6c0c7811759346db0d841ac86110404b23715639..e48778a15ec7d882abdeb00e2393e914495d9b4e 100644 --- a/sickbeard/providers/t411.py +++ b/sickbeard/providers/t411.py @@ -214,8 +214,6 @@ class T411Provider(generic.TorrentProvider): title, url = item if title: - title += u'' - title = title.replace(' ', '.') title = self._clean_title_from_provider(title) if url: diff --git a/sickbeard/providers/thepiratebay.py b/sickbeard/providers/thepiratebay.py index 08cbe2fbebaeef57f7854045e6664765b8767913..24d9aa11c2e805c99bb1a9c9c0ecee91380c489a 100644 --- a/sickbeard/providers/thepiratebay.py +++ b/sickbeard/providers/thepiratebay.py @@ -282,7 +282,6 @@ class ThePirateBayProvider(generic.TorrentProvider): title, url, id, seeders, leechers = item if title: - title = u'' + title.replace(' ', '.') title = self._clean_title_from_provider(title) if url: diff --git a/sickbeard/providers/tntvillage.py b/sickbeard/providers/tntvillage.py index f31b7c217db107fd9d268a918c5b2b486a75b5b1..fa9ddcc4ea1cd4fad77ab283423495d4f3650be3 100644 --- a/sickbeard/providers/tntvillage.py +++ b/sickbeard/providers/tntvillage.py @@ -439,8 +439,6 @@ class TNTVillageProvider(generic.TorrentProvider): title, url, id, seeders, leechers = item if title: - title = u'' + title - title = title.replace(' ', '.') title = self._clean_title_from_provider(title) if url: diff --git a/sickbeard/providers/tokyotoshokan.py b/sickbeard/providers/tokyotoshokan.py index ba9bbd7f1a8f319f74433c6d07ffcc576fbf3c1c..4d1c3680da956b9173c465b80b255a76f739c0f3 100644 --- a/sickbeard/providers/tokyotoshokan.py +++ b/sickbeard/providers/tokyotoshokan.py @@ -147,8 +147,6 @@ class TokyoToshokanCache(tvcache.TVCache): title = item.title if item.title else None if title: - title = u'' + title - title = title.replace(' ', '.') title = self._clean_title_from_provider(title) url = item.link if item.link else None diff --git a/sickbeard/providers/torrentbytes.py b/sickbeard/providers/torrentbytes.py index e52deb7fac0dc97e27595f84c7594a049c9e5760..6a6f5a210f76643107c7bf682e6dc2230789a5da 100644 --- a/sickbeard/providers/torrentbytes.py +++ b/sickbeard/providers/torrentbytes.py @@ -227,8 +227,6 @@ class TorrentBytesProvider(generic.TorrentProvider): title, url, id, seeders, leechers = item if title: - title = u'' + title - title = title.replace(' ', '.') title = self._clean_title_from_provider(title) if url: diff --git a/sickbeard/providers/torrentday.py b/sickbeard/providers/torrentday.py index 787d471b9aef6649d5fa1a737afa3c94831ebdab..6ba30f5044535a8ce90fdf888fab923a136498a5 100644 --- a/sickbeard/providers/torrentday.py +++ b/sickbeard/providers/torrentday.py @@ -236,8 +236,6 @@ class TorrentDayProvider(generic.TorrentProvider): title, url = item[0], item[1] if title: - title = u'' + title - title = title.replace(' ', '.') title = self._clean_title_from_provider(title) if url: diff --git a/sickbeard/providers/torrentleech.py b/sickbeard/providers/torrentleech.py index a52cbc1e95402ac1a3c9091ea5bc6a8300daba59..26c0b77803f399ed8cf34dfe1d0c642aefd2a820 100644 --- a/sickbeard/providers/torrentleech.py +++ b/sickbeard/providers/torrentleech.py @@ -229,8 +229,6 @@ class TorrentLeechProvider(generic.TorrentProvider): title, url, id, seeders, leechers = item if title: - title = u'' + title - title = title.replace(' ', '.') title = self._clean_title_from_provider(title) if url: diff --git a/sickbeard/tv.py b/sickbeard/tv.py index 4b8e0199d33e2d1fb4134b85f2b297e03e5ea400..727fb7a19fb103a3c1646361029333b7e6b171d0 100644 --- a/sickbeard/tv.py +++ b/sickbeard/tv.py @@ -1204,6 +1204,22 @@ class TVShow(object): return toReturn + def qualitiesToString(self, qualities=[]): + result = u'' + for quality in qualities: + if Quality.qualityStrings.has_key(quality): + result += Quality.qualityStrings[quality] + u', ' + else: + logger.log(u"Bad quality value: " + str(quality)) + + result = re.sub(', $', '', result) + + if not len(result): + result = u'None' + + return result + + def wantEpisode(self, season, episode, quality, manualSearch=False, downCurQuality=False): logger.log(u"Checking if found episode " + str(season) + "x" + str(episode) + " is wanted at quality " + @@ -1211,8 +1227,8 @@ class TVShow(object): # if the quality isn't one we want under any circumstances then just say no anyQualities, bestQualities = Quality.splitQuality(self.quality) - logger.log(u"any,best = " + str(anyQualities) + " " + str(bestQualities) + " and found " + str(quality), - logger.DEBUG) + logger.log(u"Any,Best = [ %s ] [ %s ] Found = [ %s ]" % (self.qualitiesToString(anyQualities), + self.qualitiesToString(bestQualities), self.qualitiesToString([quality])), logger.DEBUG) if quality not in anyQualities + bestQualities: logger.log(u"Don't want this quality, ignoring found episode", logger.DEBUG) @@ -1253,9 +1269,9 @@ class TVShow(object): logger.log(u"Quality is on wanted list, need to check if it's better than existing quality", logger.DEBUG) - # if we are re-downloading then we only want it if it's in our bestQualities list and better than what we have - if curStatus in Quality.DOWNLOADED + Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST and quality in bestQualities and quality > curQuality: - logger.log(u"Episode already exists but the found episode has better quality, getting found episode", + # if we are re-downloading then we only want it if it's in our bestQualities list and better than what we have, or we only have one bestQuality and we do not have that quality yet + if curStatus in Quality.DOWNLOADED + Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST and quality in bestQualities and (quality > curQuality or (quality != curQuality and len(bestQualities) == 1)) : + logger.log(u"Episode already exists but the found episode quality is wanted more, getting found episode", logger.DEBUG) return True elif curStatus == Quality.UNKNOWN and manualSearch: