diff --git a/sickchill/oldbeard/classes.py b/sickchill/oldbeard/classes.py index 1726f9a156..a33fd1a9d3 100644 --- a/sickchill/oldbeard/classes.py +++ b/sickchill/oldbeard/classes.py @@ -18,14 +18,14 @@ class SearchResult(object): Represents a search result from an indexer. """ - def __init__(self, episodes): - self.provider: Union["GenericProvider", None] = None + def __init__(self, episodes, provider=None, url=""): + self.provider: Union["GenericProvider", None] = provider # release show object self.show: Union["TVShow", None] = None # URL to the NZB/torrent file - self.url: str = "" + self.url: str = url # used by some providers to store extra info associated with the result self.extraInfo = [] @@ -62,12 +62,10 @@ def __init__(self, episodes): def from_json(self, result_dict): self.name = result_dict.get("name") - self.url = result_dict.get("url") self.size = result_dict.get("size") self.version = result_dict.get("version") self.release_group = result_dict.get("release_group") self.quality = int(result_dict.get("quality")) - self.provider = sickchill.oldbeard.providers.getProviderClass(result_dict.get("provider")) @classmethod def make_result(cls, result_dict): @@ -76,8 +74,12 @@ def make_result(cls, result_dict): return show[0] show = show[1] + episode_objects = [show.get_episode(result_dict.get("season"), ep) for ep in result_dict.get("episodes").split("|") if ep] - result = cls(episode_objects) + provider = sickchill.oldbeard.providers.getProviderClass(result_dict.get("provider")) + url = result_dict.get("url") + result = cls(episode_objects, provider, url) + result.from_json(result_dict) result.show = show @@ -86,7 +88,7 @@ def make_result(cls, result_dict): def __check_url(self): if not self.__checked_url and self.url and "jackett_apikey" in self.url: response = self.provider.get_url(self.url, allow_redirects=False, returns="response") - if response.next and response.next.url and response.next.url.startswith("magnet:") and re.search(r"urn:btih:(\w{32,40})", self.url): + if response.next and response.next.url and response.next.url.startswith("magnet:") and re.search(r"urn:btih:(\w{32,40})", response.next.url): self.url = response.next.url self.__checked_url = True @@ -142,8 +144,8 @@ class NZBSearchResult(SearchResult): Regular NZB result with a URL to the NZB """ - def __init__(self, episodes): - super().__init__(episodes) + def __init__(self, episodes, provider, url): + super().__init__(episodes, provider, url) self.result_type = "nzb" @@ -152,8 +154,8 @@ class NZBDataSearchResult(SearchResult): NZB result where the actual NZB XML data is stored in the extraInfo """ - def __init__(self, episodes): - super().__init__(episodes) + def __init__(self, episodes, provider, url): + super().__init__(episodes, provider, url) self.result_type = "nzbdata" @@ -162,8 +164,8 @@ class TorrentSearchResult(SearchResult): Torrent result with a URL to the torrent """ - def __init__(self, episodes): - super().__init__(episodes) + def __init__(self, episodes, provider, url): + super().__init__(episodes, provider, url) self.result_type = "torrent" diff --git a/sickchill/oldbeard/properFinder.py b/sickchill/oldbeard/properFinder.py index ddc5e4ea27..5d2a91e94a 100644 --- a/sickchill/oldbeard/properFinder.py +++ b/sickchill/oldbeard/properFinder.py @@ -225,9 +225,8 @@ def _download_propers(self, proper_list): episode_object = proper.show.get_episode(proper.season, proper.episode) # make the result object - result = proper.provider.get_result([episode_object]) + result = proper.provider.get_result([episode_object], proper.url) result.show = proper.show - result.url = proper.url result.name = proper.name result.quality = proper.quality result.release_group = proper.release_group diff --git a/sickchill/oldbeard/tvcache.py b/sickchill/oldbeard/tvcache.py index 99666f7b46..72d0d8b853 100644 --- a/sickchill/oldbeard/tvcache.py +++ b/sickchill/oldbeard/tvcache.py @@ -489,9 +489,8 @@ def find_needed_episodes(self, episode, manual_search=False, down_cur_quality=Fa logger.info("Found result " + title + " at " + url) - result = self.provider.get_result([episode_object]) + result = self.provider.get_result([episode_object], url) result.show = show_obj - result.url = url result.name = title result.quality = cur_quality result.release_group = cur_release_group diff --git a/sickchill/providers/GenericProvider.py b/sickchill/providers/GenericProvider.py index dcdd5870f6..52a829dbf1 100644 --- a/sickchill/providers/GenericProvider.py +++ b/sickchill/providers/GenericProvider.py @@ -295,9 +295,8 @@ def find_search_results(self, show, episodes, search_mode, manual_search=False, for current_episode in actual_episodes: episode_objects.append(show_object.get_episode(actual_season, current_episode)) - result = self.get_result(episode_objects) + result = self.get_result(episode_objects, url) result.show = show_object - result.url = url result.name = title result.quality = quality result.release_group = release_group @@ -338,11 +337,8 @@ def get_quality(self, item, anime=False): return quality - def get_result(self, episodes): - result = self._get_result(episodes) - result.provider = self - - return result + def get_result(self, episodes, url): + return self._get_result(episodes, self, url) # noinspection PyUnusedLocal @staticmethod @@ -413,8 +409,8 @@ def login(self): def search(self, strings): return [] - def _get_result(self, episodes): - return SearchResult(episodes) + def _get_result(self, episodes, provider, url): + return SearchResult(episodes, provider, url) def get_episode_search_strings(self, episode: "TVEpisode", add_string: str = "") -> Union[List[Dict], Iterable]: if not episode: diff --git a/sickchill/providers/nzb/NZBProvider.py b/sickchill/providers/nzb/NZBProvider.py index 341df3ef81..752805953b 100644 --- a/sickchill/providers/nzb/NZBProvider.py +++ b/sickchill/providers/nzb/NZBProvider.py @@ -15,8 +15,8 @@ def __init__(self, name): def is_active(self): return bool(settings.USE_NZBS) and self.is_enabled - def _get_result(self, episodes): - result = NZBSearchResult(episodes) + def _get_result(self, episodes, provider, url): + result = NZBSearchResult(episodes, provider, url) if result.is_torrent: result.result_type = GenericProvider.TORRENT diff --git a/sickchill/providers/torrent/TorrentProvider.py b/sickchill/providers/torrent/TorrentProvider.py index 1a9f4c2931..ab95e5815d 100644 --- a/sickchill/providers/torrent/TorrentProvider.py +++ b/sickchill/providers/torrent/TorrentProvider.py @@ -55,8 +55,8 @@ def _custom_trackers(self): return "&tr=" + "&tr=".join({x.strip() for x in settings.TRACKERS_LIST.split(",") if x.strip()}) - def _get_result(self, episodes): - return TorrentSearchResult(episodes) + def _get_result(self, episodes, provider, url): + return TorrentSearchResult(episodes, provider, url) def _get_size(self, item): if isinstance(item, dict):