diff --git a/couchpotato/core/media/_base/searcher/main.py b/couchpotato/core/media/_base/searcher/main.py index a5a4c5f..810f754 100644 --- a/couchpotato/core/media/_base/searcher/main.py +++ b/couchpotato/core/media/_base/searcher/main.py @@ -236,7 +236,7 @@ class Searcher(SearcherBase): return False def correctWords(self, rel_name, media): - media_title = fireEvent('searcher.get_search_title', media) + media_title = fireEvent('searcher.get_search_title', media, single = True) media_words = re.split('\W+', simplifyString(media_title)) rel_name = simplifyString(rel_name) diff --git a/couchpotato/core/media/movie/searcher/main.py b/couchpotato/core/media/movie/searcher/main.py index f1b43ee..a79781c 100644 --- a/couchpotato/core/media/movie/searcher/main.py +++ b/couchpotato/core/media/movie/searcher/main.py @@ -270,6 +270,8 @@ class MovieSearcher(SearcherBase, MovieTypeBase): if media.get('type') != 'movie': return + media_title = fireEvent('searcher.get_search_title', media, single = True) + imdb_results = kwargs.get('imdb_results', False) retention = Env.setting('retention', section = 'nzb') @@ -330,7 +332,7 @@ class MovieSearcher(SearcherBase, MovieTypeBase): if len(movie_words) <= 2 and fireEvent('searcher.correct_year', nzb['name'], media['library']['year'], 0, single = True): return True - log.info("Wrong: %s, undetermined naming. Looking for '%s (%s)'", (nzb['name'], movie_name, media['library']['year'])) + log.info("Wrong: %s, undetermined naming. Looking for '%s (%s)'", (nzb['name'], media_title, media['library']['year'])) return False def couldBeReleased(self, is_pre_release, dates, year = None): diff --git a/couchpotato/core/providers/base.py b/couchpotato/core/providers/base.py index dc6ac81..249ae85 100644 --- a/couchpotato/core/providers/base.py +++ b/couchpotato/core/providers/base.py @@ -1,4 +1,3 @@ -import logging from couchpotato.core.event import addEvent, fireEvent from couchpotato.core.helpers.variable import tryFloat, mergeDicts, md5, \ possibleTitles, toIterable @@ -115,9 +114,7 @@ class YarrProvider(Provider): def __init__(self): addEvent('provider.enabled_protocols', self.getEnabledProtocol) addEvent('provider.belongs_to', self.belongsTo) - - for type in toIterable(self.type): - addEvent('provider.search.%s.%s' % (self.protocol, type), self.search) + addEvent('provider.search.%s.%s' % (self.protocol, self.type), self.search) def getEnabledProtocol(self): if self.isEnabled(): @@ -252,11 +249,11 @@ class YarrProvider(Provider): for group_name, group_cat_ids in self.cat_ids: if len(group_cat_ids) > 0: if type(group_cat_ids[0]) is tuple: - self.cat_ids_structure = 'groups' + self.cat_ids_structure = 'group' if type(group_cat_ids[0]) is str: self.cat_ids_structure = 'single' - def getCatId(self, identifier, media_type = 'movie'): + def getCatId(self, identifier, group = None): cat_ids = self.cat_ids @@ -264,9 +261,12 @@ class YarrProvider(Provider): self._discoverCatIdStructure() # If cat_ids is in a 'groups' structure, locate the media group - if self.cat_ids_structure == 'groups': + if self.cat_ids_structure == 'group': + if not group: + raise ValueError("group is required on group cat_ids structure") + for group_type, group_cat_ids in cat_ids: - if media_type in toIterable(group_type): + if group in toIterable(group_type): cat_ids = group_cat_ids for cats in cat_ids: diff --git a/couchpotato/core/providers/torrent/iptorrents/main.py b/couchpotato/core/providers/torrent/iptorrents/main.py index 42a8379..da3ccf4 100644 --- a/couchpotato/core/providers/torrent/iptorrents/main.py +++ b/couchpotato/core/providers/torrent/iptorrents/main.py @@ -2,44 +2,42 @@ from bs4 import BeautifulSoup from couchpotato.core.helpers.encoding import tryUrlencode from couchpotato.core.helpers.variable import tryInt from couchpotato.core.logger import CPLog +from couchpotato.core.providers.base import MultiProvider +from couchpotato.core.providers.info.base import MovieProvider, ShowProvider from couchpotato.core.providers.torrent.base import TorrentProvider import traceback log = CPLog(__name__) -class IPTorrents(TorrentProvider): +class IPTorrents(MultiProvider): - type = ['movie', 'season', 'episode'] + def getTypes(self): + return [Movie, Show] + + +class Base(TorrentProvider): urls = { 'test' : 'http://www.iptorrents.com/', 'base_url' : 'http://www.iptorrents.com', 'login' : 'http://www.iptorrents.com/torrents/', 'login_check': 'http://www.iptorrents.com/inbox.php', - 'search' : 'http://www.iptorrents.com/torrents/?l%d=1%s&q=%s&qf=ti&p=%d', + 'search' : 'http://www.iptorrents.com/torrents/?l%d=1%%s&q=%s&qf=ti&p=%%d', } - cat_ids = [ - ('movie', [ - ([48], ['720p', '1080p', 'bd50']), - ([72], ['cam', 'ts', 'tc', 'r5', 'scr']), - ([7], ['dvdrip', 'brrip']), - ([6], ['dvdr']), - ]), - ('season', [ - ([65], ['hdtv', '480p', '720p', '1080p']), - ]), - ('episode', [ - ([5], ['720p', '1080p']), - ([78], ['480p']), - ([4, 79], ['hdtv']) - ]) - ] - http_time_between_calls = 1 #seconds cat_backup_id = None + def _buildUrl(self, query, quality_identifier, cat_ids_group = None): + + cat_id = self.getCatId(quality_identifier, cat_ids_group)[0] + if not cat_id: + log.warning('Unable to find category for quality %s', quality_identifier) + return + + return self.urls['search'] % (cat_id, tryUrlencode(query)) + def _searchOnTitle(self, title, media, quality, results): freeleech = '' if not self.conf('freeleech') else '&free=on' @@ -47,17 +45,11 @@ class IPTorrents(TorrentProvider): pages = 1 current_page = 1 while current_page <= pages and not self.shuttingDown(): + url = self.buildUrl(title, media, quality) + if not url: return - query = title.replace(':', '') - if media['type'] == 'movie': - query = '%s %s' % (title.replace(':', ''), media['library']['year']) - - cat_id = self.getCatId(quality['identifier'], media['type'])[0] - if not cat_id: - log.warning('Unable to find category for quality %s and media type %s', (quality['identifier'], media['type'])) - return + url = url % (freeleech, current_page) - url = self.urls['search'] % (cat_id, freeleech, tryUrlencode(query), current_page) data = self.getHTMLData(url, opener = self.login_opener) if data: @@ -122,3 +114,38 @@ class IPTorrents(TorrentProvider): def loginCheckSuccess(self, output): return '/logout.php' in output.lower() + + +class Movie(MovieProvider, Base): + + cat_ids = [ + ([48], ['720p', '1080p', 'bd50']), + ([72], ['cam', 'ts', 'tc', 'r5', 'scr']), + ([7], ['dvdrip', 'brrip']), + ([6], ['dvdr']), + ] + + def buildUrl(self, title, media, quality): + query = '%s %s' % (title.replace(':', ''), media['library']['year']) + + return self._buildUrl(query, quality['identifier']) + + +class Show(ShowProvider, Base): + + cat_ids = [ + ('season', [ + ([65], ['hdtv', '480p', '720p', '1080p']), + ]), + ('episode', [ + ([5], ['720p', '1080p']), + ([78], ['480p']), + ([4, 79], ['hdtv']) + ]) + ] + + def buildUrl(self, title, media, quality): + if media['type'] not in ['season', 'episode']: + return + + return self._buildUrl(title.replace(':', ''), quality['identifier'], media['type']) \ No newline at end of file diff --git a/couchpotato/core/providers/torrent/sceneaccess/main.py b/couchpotato/core/providers/torrent/sceneaccess/main.py index f3c6ebd..cd02169 100644 --- a/couchpotato/core/providers/torrent/sceneaccess/main.py +++ b/couchpotato/core/providers/torrent/sceneaccess/main.py @@ -102,7 +102,7 @@ class Base(TorrentProvider): loginCheckSuccess = loginSuccess -class Movie(Base, MovieProvider): +class Movie(MovieProvider, Base): cat_ids = [ ([22], ['720p', '1080p']),