diff --git a/.travis.yml b/.travis.yml index 2799cf2f9fe24ec3a2551150c6035202a36e3de4..dc702dde4bb4d50b6565b1c5e9ba7912f3bf021c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,12 +7,7 @@ branches: only: - develop -install: - - pip install cheetah pyopenssl==0.13.1 - -cache: - directories: - - $HOME/.cache/pip +cache: pip before_script: - chmod +x ./tests/all_tests.py diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..0257d09bc2fd1718965df5fe4d5097a07178234f --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +cheetah +pyopenssl==0.13.1 diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py index de0087f0d6d5ad71365e27f1a16090620be0390c..62da1dd1896e3e250aeab8c7523df61dce54dd78 100644 --- a/sickbeard/helpers.py +++ b/sickbeard/helpers.py @@ -49,7 +49,7 @@ import subprocess from sickbeard.exceptions import MultipleShowObjectsException, ex from sickbeard import logger, classes -from sickbeard.common import USER_AGENT, mediaExtensions, subtitleExtensions +from sickbeard.common import USER_AGENT, cpu_presets, mediaExtensions, subtitleExtensions from sickbeard import db from sickbeard import encodingKludge as ek from sickbeard import notifiers @@ -708,7 +708,7 @@ def sanitizeSceneName(name, anime=False): """ if not name: - return u'' + return '' bad_chars = u',:()!?\u2019' if not anime: @@ -716,7 +716,7 @@ def sanitizeSceneName(name, anime=False): # strip out any bad chars for x in bad_chars: - name = u'' + name.replace(x, "") + name = name.replace(x, "") # tidy up stuff that doesn't belong in scene names name = name.replace("- ", ".").replace(" ", ".").replace("&", "and").replace('/', '.') diff --git a/sickbeard/providers/__init__.py b/sickbeard/providers/__init__.py index cca817b2257de0177b1ecfa10cbeeba4b0c38db9..a20125b0c13ddfda6b91fdfaf458d497a9a93768 100644 --- a/sickbeard/providers/__init__.py +++ b/sickbeard/providers/__init__.py @@ -201,7 +201,11 @@ def makeTorrentRssProvider(configString): def getDefaultNewznabProviders(): - return 'Sick Beard Index|http://lolo.sickbeard.com/|0|5030,5040|0|eponly|0|0|0!!!NZBs.org|https://nzbs.org/||5030,5040|0|eponly|0|0|0!!!Usenet-Crawler|https://www.usenet-crawler.com/||5030,5040|0|eponly|0|0|0' + #name|url|key|catIDs|enabled|search_mode|search_fallback|enable_daily|enable_backlog + return 'NZB.Cat|https://nzb.cat/||5030,5040,5010,5060|0|eponly|1|1|1!!!' + \ + 'Sick Beard Index|http://lolo.sickbeard.com/|0|5030,5040|0|eponly|0|0|0!!!' + \ + 'NZBs.org|https://nzbs.org/||5030,5040|0|eponly|0|0|0!!!' + \ + 'Usenet-Crawler|https://www.usenet-crawler.com/||5030,5040|0|eponly|0|0|0' def getProviderModule(name): diff --git a/sickbeard/providers/rarbg.py b/sickbeard/providers/rarbg.py index 6ee82f094880d11224de8420d5d4ab1355283587..2f54cad0aca448c1ad2fe0354a9e2f9f59cecd9d 100644 --- a/sickbeard/providers/rarbg.py +++ b/sickbeard/providers/rarbg.py @@ -65,7 +65,7 @@ class RarbgProvider(generic.TorrentProvider): self.tokenExpireDate = None self.urls = {'url': u'https://rarbg.com', - 'token': u'https://torrentapi.org/pubapi_v2.php?get_token=get_token&format=json&app_id=sickrage', + 'token': u'http://torrentapi.org/pubapi_v2.php?get_token=get_token&format=json&app_id=sickrage', 'listing': u'https://torrentapi.org/pubapi_v2.php?mode=list&app_id=sickrage', 'search': u'https://torrentapi.org/pubapi_v2.php?mode=search&app_id=sickrage&search_string={search_string}', 'search_tvdb': u'https://torrentapi.org/pubapi_v2.php?mode=search&app_id=sickrage&search_tvdb={tvdb}&search_string={search_string}', diff --git a/sickbeard/providers/scc.py b/sickbeard/providers/scc.py index 5bbc224580fe9c2daebff0814aed7464703666c1..54a75ae8ddf5db58dc81ecb53feceb1d07fe2961 100644 --- a/sickbeard/providers/scc.py +++ b/sickbeard/providers/scc.py @@ -20,6 +20,8 @@ import re import traceback import datetime +import time + import urlparse import sickbeard import generic @@ -147,7 +149,10 @@ class SCCProvider(generic.TorrentProvider): for show_name in set(show_name_helpers.allPossibleShowNames(self.show)): ep_string = show_name_helpers.sanitizeSceneName(show_name) + ' ' + \ sickbeard.config.naming_ep_type[2] % {'seasonnumber': ep_obj.scene_season, - 'episodenumber': ep_obj.scene_episode} + ' %s' % add_string + 'episodenumber': ep_obj.scene_episode} + + if len(add_string): + ep_string += ' %s' % add_string search_string['Episode'].append(re.sub('\s+', ' ', ep_string)) @@ -188,6 +193,7 @@ class SCCProvider(generic.TorrentProvider): logger.log(u"Search string: " + searchURL, logger.DEBUG) try: data += [x for x in [self.getURL(searchURL)] if x] + time.sleep(cpu_presets[sickbeard.CPU_PRESET]) except Exception as e: logger.log(u"Unable to fetch data reason: {0}".format(str(e)), logger.WARNING) diff --git a/sickbeard/search.py b/sickbeard/search.py index b8e8d0b9fcc9c70d9324abaa481d04833605a16f..318745a9e2d3fd88764d5a51beeca9c3f01ffcf4 100644 --- a/sickbeard/search.py +++ b/sickbeard/search.py @@ -199,10 +199,6 @@ def pickBestResult(results, show): if show and cur_result.show is not show: continue - if not cur_result.url.startswith('magnet'): - cur_result.content = cur_result.provider.getURL(cur_result.url) - if not cur_result.content: - continue # build the black And white list if show.is_anime: @@ -238,6 +234,14 @@ def pickBestResult(results, show): logger.log(cur_result.name + u" has previously failed, rejecting it") continue + # Download the torrent file contents only if it has passed all other checks! + # Must be done before setting bestResult + if cur_result.resultType == "torrent" and sickbeard.TORRENT_METHOD != "blackhole": + if len(cur_result.url) and not cur_result.url.startswith('magnet'): + cur_result.content = cur_result.provider.getURL(cur_result.url) + if not cur_result.content: + continue + if cur_result.quality in bestQualities and (not bestResult or bestResult.quality < cur_result.quality or bestResult not in bestQualities): bestResult = cur_result elif cur_result.quality in anyQualities and (not bestResult or bestResult not in bestQualities) and (not bestResult or bestResult.quality < cur_result.quality): @@ -652,6 +656,7 @@ def searchProviders(show, episodes, manualSearch=False, downCurQuality=False): for epObj in multiResult.episodes: if not multiResult.url.startswith('magnet'): multiResult.content = multiResult.provider.getURL(cur_result.url) + multiResults[epObj.episode] = multiResult # don't bother with the single result if we're going to get it with a multi result