Example #1
0
    def _get_episode_search_strings(self, ep_obj):
        search_string = []

        if not ep_obj:
            return []

        if ep_obj.show.air_by_date:
            for show_name in set(show_name_helpers.allPossibleShowNames(ep_obj.show)):
                search_string.append(
                    "{0} {1}".format(
                        show_name_helpers.sanitizeSceneName(show_name),
                        str(ep_obj.airdate).replace('-', '.')
                    )
                )
        else:
            for show_name in set(show_name_helpers.allPossibleShowNames(ep_obj.show)):
                search_string.append(
                    "{0} {1}".format(
                        show_name_helpers.sanitizeSceneName(show_name),
                        sickbeard.config.naming_ep_type[2] % {
                            'seasonnumber': ep_obj.season,
                            'episodenumber':  ep_obj.episode
                        }
                    )
                )
        return search_string
Example #2
0
    def _get_episode_search_strings(self, ep_obj, add_string=""):

        search_string = {"Episode": []}

        if not ep_obj:
            return []

        if self.show.air_by_date:
            for show_name in set(show_name_helpers.allPossibleShowNames(self.show)):
                ep_string = show_name + " " + str(ep_obj.airdate).replace("-", "|")
                search_string["Episode"].append(ep_string)
        elif self.show.sports:
            for show_name in set(show_name_helpers.allPossibleShowNames(self.show)):
                ep_string = (
                    show_name + " " + str(ep_obj.airdate).replace("-", "|") + "|" + ep_obj.airdate.strftime("%b")
                )
                search_string["Episode"].append(ep_string)
        elif self.show.anime:
            for show_name in set(show_name_helpers.allPossibleShowNames(self.show)):
                ep_string = show_name + " " + "%i" % int(ep_obj.scene_absolute_number)
                search_string["Episode"].append(ep_string)
        else:
            for show_name in set(show_name_helpers.allPossibleShowNames(self.show)):
                ep_string = (
                    show_name
                    + " "
                    + sickbeard.config.naming_ep_type[2]
                    % {"seasonnumber": ep_obj.scene_season, "episodenumber": ep_obj.scene_episode}
                )
                if add_string:
                    ep_string = ep_string + " %s" % add_string

                search_string["Episode"].append(ep_string)

        return [search_string]
Example #3
0
    def _get_episode_search_strings(self, ep_obj, add_string=''):
        search_string = {'Episode': []}

        if self.show.air_by_date:
            for show_name in set(allPossibleShowNames(self.show)):
                ep_string = sanitizeSceneName(show_name) + ' ' + \
                            str(ep_obj.airdate).replace('-','|')
                search_string['Episode'].append(ep_string)
        elif self.show.sports:
            for show_name in set(allPossibleShowNames(self.show)):
                ep_string = sanitizeSceneName(show_name) + ' ' + \
                            str(ep_obj.airdate).replace('-', '|') + '|' + \
                            ep_obj.airdate.strftime('%b')
                search_string['Episode'].append(ep_string)
        else:
            for show_name in set(allPossibleShowNames(self.show)):
                ep_string = sanitizeSceneName(show_name) + ' ' + \
                            sickbeard.config.naming_ep_type[2] % {'seasonnumber': ep_obj.scene_season,
                                                                  'episodenumber': ep_obj.scene_episode} + '|' + \
                            sickbeard.config.naming_ep_type[0] % {'seasonnumber': ep_obj.scene_season,
                                                                  'episodenumber': ep_obj.scene_episode} + '|' + \
                            sickbeard.config.naming_ep_type[3] % {'seasonnumber': ep_obj.scene_season,
                                                                  'episodenumber': ep_obj.scene_episode} + ' %s category:tv' % add_string
                search_string['Episode'].append(re.sub('\s+', ' ', ep_string))

        return [search_string]
Example #4
0
    def _get_episode_search_strings(self, show, season, episode, abd=False, add_string=""):

        search_string = {"Episode": []}

        if not episode:
            return []

        if abd:
            for show_name in set(show_name_helpers.allPossibleShowNames(show)):
                ep_string = (
                    sanitizeSceneName(show_name)
                    + " "
                    + str(episode).replace("-", "|")
                    + "|"
                    + helpers.custom_strftime("%b", episode)
                )
                search_string["Episode"].append(ep_string)
        else:
            for show_name in set(show_name_helpers.allPossibleShowNames(show)):
                ep_string = (
                    show_name_helpers.sanitizeSceneName(show_name)
                    + " "
                    + sickbeard.config.naming_ep_type[2] % {"seasonnumber": season, "episodenumber": episode}
                )

                search_string["Episode"].append(re.sub("\s+", " ", ep_string))

        return [search_string]
Example #5
0
 def _get_season_search_strings(self, show, season=None):
     search_string = []
 
     if not show:
         return []
   
     myDB = db.DBConnection()
     
     if show.air_by_date:
         (min_date, max_date) = self._get_airbydate_season_range(season)
         sqlResults = myDB.select("SELECT * FROM tv_episodes WHERE showid = ? AND airdate >= ? AND airdate <= ?", [show.tvdbid,  min_date.toordinal(), max_date.toordinal()])
     else:
         sqlResults = myDB.select("SELECT * FROM tv_episodes WHERE showid = ? AND season = ?", [show.tvdbid, season])
         
     for sqlEp in sqlResults:
         if show.getOverview(int(sqlEp["status"])) in (Overview.WANTED, Overview.QUAL):
             if show.air_by_date:
                 for show_name in set(show_name_helpers.allPossibleShowNames(show)):
                     ep_string = show_name_helpers.sanitizeSceneName(show_name) +' '+ str(datetime.date.fromordinal(sqlEp["airdate"])).replace('-', '.')
                     search_string.append(ep_string)
             else:
                 for show_name in set(show_name_helpers.allPossibleShowNames(show)):
                     ep_string = show_name_helpers.sanitizeSceneName(show_name) +' '+ sickbeard.config.naming_ep_type[2] % {'seasonnumber': season, 'episodenumber': int(sqlEp["episode"])}
                     search_string.append(ep_string)                       
     return search_string
Example #6
0
    def _get_episode_search_strings(self, show, season, episode, add_string=''):

        search_string = {'Episode': []}

        if not episode:
            return []

        if show.air_by_date:
            for show_name in set(show_name_helpers.allPossibleShowNames(show)):
                ep_string = sanitizeSceneName(show_name) + ' ' + \
                            str(episode).replace('-', '|') + '|' + \
                            episode.strftime('%b')
                search_string['Episode'].append(ep_string)
        elif show.sports:
            for show_name in set(show_name_helpers.allPossibleShowNames(show)):
                ep_string = sanitizeSceneName(show_name) + ' ' + \
                            str(episode).replace('-', '|') + '|' + \
                            episode.strftime('%b')
                search_string['Episode'].append(ep_string)
        else:
            for show_name in set(show_name_helpers.allPossibleShowNames(show)):
                ep_string = show_name_helpers.sanitizeSceneName(show_name) + ' ' + \
                            sickbeard.config.naming_ep_type[2] % {'seasonnumber': season,
                                                                  'episodenumber': episode}

                search_string['Episode'].append(re.sub('\s+', ' ', ep_string))

        return [search_string]
Example #7
0
    def _get_episode_search_strings(self, show, season, episode, abd=False, add_string=''):
        search_string = {'Episode': []}

        if not show:
            return []

        self.show = show

        if abd:
            for show_name in set(allPossibleShowNames(show)):

                ep_string = sanitizeSceneName(show_name) + ' ' + \
                            str(episode).replace('-','|') + '|' + \
                            helpers.custom_strftime('%b', episode)
                search_string['Episode'].append(ep_string)
        else:
            for show_name in set(allPossibleShowNames(show)):
                ep_string = sanitizeSceneName(show_name) + ' ' + \
                            sickbeard.config.naming_ep_type[2] % {'seasonnumber': season,
                                                                  'episodenumber': episode} + '|' + \
                            sickbeard.config.naming_ep_type[0] % {'seasonnumber': season,
                                                                  'episodenumber': episode} + '|' + \
                            sickbeard.config.naming_ep_type[3] % {'seasonnumber': season,
                                                                  'episodenumber': episode} + ' %s category:tv' % add_string
                search_string['Episode'].append(re.sub('\s+', ' ', ep_string))

        return [search_string]
Example #8
0
    def _get_episode_search_strings(self, ep_obj, add_string=""):

        search_string = {"Episode": []}

        if not ep_obj:
            return []

        self.show = ep_obj.show

        if ep_obj.show.air_by_date:
            for show_name in set(allPossibleShowNames(ep_obj.show)):
                ep_string = sanitizeSceneName(show_name) + " " + str(ep_obj.airdate)
                search_string["Episode"].append(ep_string)
        else:
            for show_name in set(allPossibleShowNames(ep_obj.show)):
                ep_string = (
                    sanitizeSceneName(show_name)
                    + " "
                    + sickbeard.config.naming_ep_type[2]
                    % {"seasonnumber": ep_obj.season, "episodenumber": ep_obj.episode}
                )

                for x in add_string.split("|"):
                    to_search = re.sub("\s+", " ", ep_string + " %s" % x)
                    search_string["Episode"].append(to_search)

        return [search_string]
Example #9
0
    def _get_episode_search_strings(self, ep_obj, add_string=''):

        search_string = {'Episode': []}

        if not ep_obj:
            return []

        if self.show.air_by_date:
            for show_name in set(show_name_helpers.allPossibleShowNames(self.show)):
                ep_string = sanitizeSceneName(show_name) + '.' + \
                            str(ep_obj.airdate).replace('-', '|')
                search_string['Episode'].append(ep_string)
        elif self.show.sports:
            for show_name in set(show_name_helpers.allPossibleShowNames(self.show)):
                ep_string = sanitizeSceneName(show_name) + '.' + \
                            str(ep_obj.airdate).replace('-', '|') + '|' + \
                            ep_obj.airdate.strftime('%b')
                search_string['Episode'].append(ep_string)
        elif self.show.anime:
            for show_name in set(show_name_helpers.allPossibleShowNames(self.show)):
                ep_string = sanitizeSceneName(show_name) + '.' + \
                            "%i" % int(ep_obj.scene_absolute_number)
                search_string['Episode'].append(ep_string)
        else:
            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

                search_string['Episode'].append(re.sub('\s+', '.', ep_string))

        return [search_string]
Example #10
0
    def _get_episode_search_strings(self, ep_obj, add_string=''):

        search_string = {'Episode': []}

        if not ep_obj:
            return []

        self.show = ep_obj.show

        if ep_obj.show.air_by_date:
            for show_name in set(allPossibleShowNames(ep_obj.show)):
                ep_string = sanitizeSceneName(show_name) + ' ' + \
                            str(ep_obj.airdate) + '|' + \
                            helpers.custom_strftime('%Y %b {S}', ep_obj.airdate)

                search_string['Episode'].append(ep_string)
        else:
            for show_name in set(allPossibleShowNames(ep_obj.show)):
                ep_string = sanitizeSceneName(show_name) + ' ' + \
                            sickbeard.config.naming_ep_type[2] % {'seasonnumber': ep_obj.season,
                                                                  'episodenumber': ep_obj.episode} + '|' + \
                            sickbeard.config.naming_ep_type[0] % {'seasonnumber': ep_obj.season,
                                                                  'episodenumber': ep_obj.episode} + '|' + \
                            sickbeard.config.naming_ep_type[3] % {'seasonnumber': ep_obj.season,
                                                                  'episodenumber': ep_obj.episode} + ' %s category:tv' % add_string
                search_string['Episode'].append(re.sub('\s+', ' ', ep_string))

        return [search_string]
Example #11
0
    def _get_episode_search_strings(self, ep_obj, add_string=""):

        search_string = {"Episode": []}

        if not ep_obj:
            return []

        if self.show.air_by_date:
            for show_name in set(show_name_helpers.allPossibleShowNames(self.show)):
                ep_string = sanitizeSceneName(show_name) + " " + str(ep_obj.airdate).replace("-", "|")
                search_string["Episode"].append(ep_string)
        elif self.show.sports:
            for show_name in set(show_name_helpers.allPossibleShowNames(self.show)):
                ep_string = (
                    sanitizeSceneName(show_name)
                    + " "
                    + str(ep_obj.airdate).replace("-", "|")
                    + "|"
                    + ep_obj.airdate.strftime("%b")
                )
                search_string["Episode"].append(ep_string)
        else:
            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}
                )

                search_string["Episode"].append(re.sub("\s+", " ", ep_string))

        return [search_string]
Example #12
0
    def _get_episode_search_strings(self, ep_obj, add_string=""):

        search_string = {"Episode": []}

        if not ep_obj:
            return []

        if ep_obj.show.air_by_date:
            for show_name in set(show_name_helpers.allPossibleShowNames(ep_obj.show)):
                ep_string = (
                    show_name_helpers.sanitizeSceneName(show_name)
                    + " "
                    + str(ep_obj.airdate)
                    + "|"
                    + helpers.custom_strftime("%Y %b {S}", ep_obj.airdate)
                )
                search_string["Episode"].append(ep_string)
        else:
            for show_name in set(show_name_helpers.allPossibleShowNames(ep_obj.show)):
                ep_string = (
                    show_name_helpers.sanitizeSceneName(show_name)
                    + " "
                    + sickbeard.config.naming_ep_type[2]
                    % {"seasonnumber": ep_obj.season, "episodenumber": ep_obj.episode}
                    + " %s" % add_string
                )

                search_string["Episode"].append(re.sub("\s+", " ", ep_string))

        return [search_string]
Example #13
0
    def _get_episode_search_strings(self, ep_obj, add_string=""):

        search_string = {"Episode": []}

        if not ep_obj:
            return []

        for show_name in set(show_name_helpers.allPossibleShowNames(self.show)):
            for sep in " ", " - ":
                ep_string = sanitizeSceneName(show_name) + sep
                if self.show.air_by_date:
                    ep_string += str(ep_obj.airdate).replace("-", "|")
                elif self.show.sports:
                    ep_string += str(ep_obj.airdate).replace("-", "|") + "|" + ep_obj.airdate.strftime("%b")
                elif self.show.anime:
                    ep_string += "%i" % int(ep_obj.scene_absolute_number)
                else:
                    ep_string += sickbeard.config.naming_ep_type[2] % {
                        "seasonnumber": ep_obj.scene_season,
                        "episodenumber": ep_obj.scene_episode,
                    }

                if add_string:
                    ep_string += " %s" % add_string

                search_string["Episode"].append(re.sub(r"\s+", " ", ep_string.replace(".", " ").strip()))

        return [search_string]
Example #14
0
    def _retrieve_show_images_from_tmdb(self, show, backdrop=False, poster=False):
        # get TMDB configuration info
        tmdb = TMDB(sickbeard.TMDB_API_KEY)
        config = tmdb.Configuration()
        response = config.info()
        base_url = response['images']['base_url']
        sizes = response['images']['poster_sizes']

        def size_str_to_int(x):
            return float("inf") if x == 'original' else int(x[1:])

        max_size = max(sizes, key=size_str_to_int)

        try:
            search = tmdb.Search()
            for show_name in set(allPossibleShowNames(show)):
                for result in search.collection({'query': show_name})['results'] + search.tv({'query': show_name})[
                    'results']:
                    if backdrop and result['backdrop_path']:
                        return "{0}{1}{2}".format(base_url, max_size, result['backdrop_path'])
                    elif poster and result['poster_path']:
                        return "{0}{1}{2}".format(base_url, max_size, result['poster_path'])

        except Exception, e:
            pass
Example #15
0
    def _get_season_search_strings(self, show, season, wantedEp, searchSeason=False):

        search_string = {'Episode': []}

        if not show:
            return []

        self.show = show

        if searchSeason:
            search_string = {'Season': [], 'Episode': []}
            for show_name in set(allPossibleShowNames(show)):
                ep_string = show_name + ' S%02d' % int(season) #1) ShowName SXX
                search_string['Season'].append(ep_string)

                ep_string = show_name + ' Season ' + str(season) + ' -Ep*' #2) ShowName Season X
                search_string['Season'].append(ep_string)

        for ep_obj in wantedEp:
            search_string['Episode'] += self._get_episode_search_strings(ep_obj)[0]['Episode']

        if not search_string['Episode']:
            return []

        return [search_string]
    def _get_season_search_strings(self, show, season=None):

        search_string = {'Episode': []}
    
        if not show:
            return []

        seasonEp = show.getAllEpisodes(season)

        wantedEp = [x for x in seasonEp if show.getOverview(x.status) in (Overview.WANTED, Overview.QUAL)]          

        #If Every episode in Season is a wanted Episode then search for Season first
        if wantedEp == seasonEp and not show.air_by_date:
            search_string = {'Season': [], 'Episode': []}
            for show_name in set(show_name_helpers.allPossibleShowNames(show)):
                ep_string = show_name +' S%02d' % int(season) #1) ShowName SXX   
                search_string['Season'].append(ep_string)
                      
                ep_string = show_name+' Season '+str(season)+' -Ep*' #2) ShowName Season X  
                search_string['Season'].append(ep_string)

        #Building the search string with the episodes we need         
        for ep_obj in wantedEp:
            search_string['Episode'] += self._get_episode_search_strings(ep_obj)[0]['Episode']
        
        #If no Episode is needed then return an empty list
        if not search_string['Episode']:
            return []
        
        return [search_string]
Example #17
0
    def _get_episode_search_strings(self, episode, add_string=''):
        if not episode:
            return []

        search_string = {
            'Episode': []
        }

        for show_name in set(allPossibleShowNames(episode.show)):
            episode_string = show_name + ' '

            if episode.show.air_by_date:
                episode_string += str(episode.airdate).replace('-', ' ')
            elif episode.show.sports:
                episode_string += str(episode.airdate).replace('-', ' ')
                episode_string += ('|', ' ')[len(self.proper_strings) > 1]
                episode_string += episode.airdate.strftime('%b')
            elif episode.show.anime:
                episode_string += '%02d' % int(episode.scene_absolute_number)
            else:
                episode_string += sickbeard.config.naming_ep_type[2] % {
                    'seasonnumber': episode.scene_season,
                    'episodenumber': episode.scene_episode,
                }

            if add_string:
                episode_string += ' ' + add_string

            search_string['Episode'].append(episode_string.encode('utf-8').strip())

        return [search_string]
Example #18
0
    def _get_season_search_strings(self, show, season):

        showNames = show_name_helpers.allPossibleShowNames(show)
        result = []
        for showName in showNames:
            result.append( showName + " S%02d" % season )
        return result
Example #19
0
    def _get_season_search_strings(self, ep_obj):
        search_string = {'Season': [], 'Langcat' : ''}
        
        if ep_obj.show.audio_lang=='fr':
            langtext=' french'
        else:
            langtext=''

        for show_name in set(allPossibleShowNames(self.show)):
            if ep_obj.show.air_by_date or ep_obj.show.sports:
                ep_string = show_name + ' ' + str(ep_obj.airdate).split('-')[0]+langtext
                search_string['Season'].append(ep_string)
                ep_string = show_name + ' Season ' + str(ep_obj.airdate).split('-')[0]+langtext
                search_string['Season'].append(ep_string)
            elif ep_obj.show.anime:
                ep_string = show_name + ' ' + "%02d" % ep_obj.scene_absolute_number+langtext
                search_string['Season'].append(ep_string)
            else:
                ep_string = show_name + ' S%02d' % int(ep_obj.scene_season) + ' -S%02d' % int(
                    ep_obj.scene_season) + 'E' + ' category:tv'  #1) showName SXX -SXXE
                search_string['Season'].append(ep_string)
                ep_string = show_name + ' Season ' + str(
                    ep_obj.scene_season) + ' -Ep*' +langtext+ ' category:tv'  # 2) showName Season X
                search_string['Season'].append(ep_string)
        
        search_string['Langcat']=ep_obj.show.audio_lang
        
        return [search_string]
Example #20
0
    def _get_season_search_strings(self, show, season=None):

        search_string = {"Episode": []}

        if not show:
            return []

        self.show = show
        seasonEp = show.getAllEpisodes(season)

        wantedEp = [x for x in seasonEp if show.getOverview(x.status) in (Overview.WANTED, Overview.QUAL)]

        # If Every episode in Season is a wanted Episode then search for Season first
        if wantedEp == seasonEp and not show.air_by_date:
            search_string = {"Season": [], "Episode": []}
            for show_name in set(allPossibleShowNames(show)):
                ep_string = show_name + " S%02d" % int(season)  # 1) ShowName SXX -SXXE
                search_string["Season"].append(ep_string)

                ep_string = show_name + " Season " + str(season)  # 2) ShowName Season X
                search_string["Season"].append(ep_string)

        # Building the search string with the episodes we need
        for ep_obj in wantedEp:
            search_string["Episode"] += self._get_episode_search_strings(ep_obj)[0]["Episode"]

        # If no Episode is needed then return an empty list
        if not search_string["Episode"]:
            return []

        return [search_string]
Example #21
0
    def _get_season_search_strings(self, show, season=None):
        search_string = []

        if not (show and season):
            return []

        myDB = db.DBConnection()

        if show.air_by_date:
            (min_date, max_date) = self._get_airbydate_season_range(season)
            sqlResults = myDB.select(
                "SELECT DISTINCT airdate FROM tv_episodes WHERE showid = ? AND airdate >= ? AND airdate <= ? AND status = ?",
                [show.tvdbid, min_date.toordinal(), max_date.toordinal(), WANTED],
            )
        else:
            sqlResults = myDB.select(
                "SELECT DISTINCT season FROM tv_episodes WHERE showid = ? AND season = ? AND status = ?",
                [show.tvdbid, season, WANTED],
            )

        for sqlEp in sqlResults:
            for show_name in set(show_name_helpers.allPossibleShowNames(show)):
                if show.air_by_date:
                    ep_string = (
                        sanitizeSceneName(show_name)
                        + " "
                        + str(datetime.date.fromordinal(sqlEp["airdate"])).replace("-", ".")
                    )
                    search_string.append(ep_string)
                else:
                    ep_string = sanitizeSceneName(show_name) + " S%02d" % sqlEp["season"]
                    search_string.append(ep_string)

        return search_string
Example #22
0
    def _get_episode_search_strings(self, ep_obj, add_string=""):
        search_string = {"Episode": []}

        for show_name in set(allPossibleShowNames(self.show)):
            ep_string = sanitizeSceneName(show_name) + " "
            if self.show.air_by_date:
                ep_string += str(ep_obj.airdate).replace("-", " ")
            elif self.show.sports:
                ep_string += str(ep_obj.airdate).replace("-", " ") + "|" + ep_obj.airdate.strftime("%b")
            elif self.show.anime:
                ep_string += "%02d" % ep_obj.scene_absolute_number
            else:
                ep_string += (
                    sickbeard.config.naming_ep_type[2]
                    % {"seasonnumber": ep_obj.scene_season, "episodenumber": ep_obj.scene_episode}
                    + "|"
                    + sickbeard.config.naming_ep_type[0]
                    % {"seasonnumber": ep_obj.scene_season, "episodenumber": ep_obj.scene_episode}
                    + " category:tv"
                )
            if add_string:
                ep_string += " " + add_string

            search_string["Episode"].append(re.sub("\s+", " ", ep_string))

        return [search_string]
Example #23
0
    def _get_season_search_strings(self, ep_obj):
        search_string = {"Season": []}

        for show_name in set(allPossibleShowNames(self.show)):
            ep_string = sanitizeSceneName(show_name) + " "
            if ep_obj.show.air_by_date or ep_obj.show.sports:
                ep_string += str(ep_obj.airdate).split("-")[0]
                search_string["Season"].append(ep_string)
            elif ep_obj.show.anime:
                ep_string += "%02d" % ep_obj.scene_absolute_number
                search_string["Season"].append(ep_string)
            else:
                ep_string = "%s S%02d -S%02dE category:tv" % (
                    sanitizeSceneName(show_name),
                    ep_obj.scene_season,
                    ep_obj.scene_season,
                )  # 1) showName SXX -SXXE
                search_string["Season"].append(ep_string)
                ep_string = '%s "Season %d" -Ep* category:tv' % (
                    sanitizeSceneName(show_name),
                    ep_obj.scene_season,
                )  # 2) showName "Season X"
                search_string["Season"].append(ep_string)

        return [search_string]
Example #24
0
    def _get_episode_search_strings(self, ep_obj, add_string=""):

        search_string = {"Episode": []}

        if not ep_obj:
            return []

        for show_name in set(show_name_helpers.allPossibleShowNames(ep_obj.show)):
            ep_string = show_name + " "
            if ep_obj.show.air_by_date:
                ep_string += str(ep_obj.airdate).replace("-", " ")
            elif ep_obj.show.sports:
                ep_string += (
                    str(ep_obj.airdate).replace("-", " ")
                    + ("|", " ")[len(self.proper_strings) > 1]
                    + ep_obj.airdate.strftime("%b")
                )
            elif ep_obj.show.anime:
                ep_string += "%02d" % int(ep_obj.scene_absolute_number)
            else:
                ep_string += sickbeard.config.naming_ep_type[2] % {
                    "seasonnumber": ep_obj.scene_season,
                    "episodenumber": ep_obj.scene_episode,
                }
            if add_string:
                ep_string = ep_string + " %s" % add_string

            search_string["Episode"].append(ep_string.encode("utf-8").strip())

        return [search_string]
Example #25
0
    def _get_episode_search_strings(self, ep_obj, add_string=''):

        search_string = {'Episode': []}

        if not ep_obj:
            return []

        for show_name in set(show_name_helpers.allPossibleShowNames(ep_obj.show)):
            ep_string = show_name + ' '
            if ep_obj.show.air_by_date:
                ep_string += str(ep_obj.airdate).replace('-', '|')
            elif ep_obj.show.sports:
                ep_string += str(ep_obj.airdate).replace('-', '|') + '|' + \
                        ep_obj.airdate.strftime('%b')
            elif ep_obj.show.anime:
                ep_string += "%02d" % int(ep_obj.scene_absolute_number)
            else:
                ep_string += sickbeard.config.naming_ep_type[2] % {'seasonnumber': ep_obj.scene_season,
                                                              'episodenumber': ep_obj.scene_episode}
            if add_string:
                ep_string = ep_string + ' %s' % add_string

            search_string['Episode'].append(ep_string)

        return [search_string]
Example #26
0
 def _get_episode_search_strings(self, ep_obj, french=None):
     strings = []
     showNam = show_name_helpers.allPossibleShowNames(ep_obj.show)
     showNames = list(set(showNam))
     global globepid
     myDB = db.DBConnection()
     epidr = myDB.select("SELECT episode_id from tv_episodes where tvdbid=?", [ep_obj.tvdbid])
     globepid = epidr[0][0]
     for showName in showNames:
         strings.append("%s S%02dE%02d" % (showName, ep_obj.season, ep_obj.episode))
         strings.append("%s S%02dE%d" % (showName, ep_obj.season, ep_obj.episode))
         strings.append("%s S%dE%02d" % (showName, ep_obj.season, ep_obj.episode))
         strings.append("%s %dx%d" % (showName, ep_obj.season, ep_obj.episode))
         strings.append("%s S%02d E%02d" % (showName, ep_obj.season, ep_obj.episode))
         strings.append("%s S%02d E%d" % (showName, ep_obj.season, ep_obj.episode))
         strings.append("%s S%d E%02d" % (showName, ep_obj.season, ep_obj.episode))
         strings.append("%s S%02dEp%02d" % (showName, ep_obj.season, ep_obj.episode))
         strings.append("%s S%02dEp%d" % (showName, ep_obj.season, ep_obj.episode))
         strings.append("%s S%dEp%02d" % (showName, ep_obj.season, ep_obj.episode))
         strings.append("%s S%02d Ep%02d" % (showName, ep_obj.season, ep_obj.episode))
         strings.append("%s S%02d Ep%d" % (showName, ep_obj.season, ep_obj.episode))
         strings.append("%s S%d Ep%02d" % (showName, ep_obj.season, ep_obj.episode))
         strings.append("%s S%02d Ep %02d" % (showName, ep_obj.season, ep_obj.episode))
         strings.append("%s S%02d Ep %d" % (showName, ep_obj.season, ep_obj.episode))
         strings.append("%s S%d Ep %02d" % (showName, ep_obj.season, ep_obj.episode))
     return strings
Example #27
0
    def _retrieve_show_images_from_tmdb(self, show, type):
        types = {
            "poster": "poster_path",
            "banner": None,
            "fanart": "backdrop_path",
            "poster_thumb": "poster_path",
            "banner_thumb": None,
        }

        # get TMDB configuration info
        tmdb = TMDB(sickbeard.TMDB_API_KEY)
        config = tmdb.Configuration()
        response = config.info()
        base_url = response["images"]["base_url"]
        sizes = response["images"]["poster_sizes"]

        def size_str_to_int(x):
            return float("inf") if x == "original" else int(x[1:])

        max_size = max(sizes, key=size_str_to_int)

        try:
            search = tmdb.Search()
            for show_name in set(allPossibleShowNames(show)):
                for result in (
                    search.collection({"query": show_name})["results"] + search.tv({"query": show_name})["results"]
                ):
                    if types[type] and getattr(result, types[type]):
                        return "{0}{1}{2}".format(base_url, max_size, result[types[type]])

        except Exception as e:
            pass

        logger.log(u"Could not find any " + type + " images on TMDB for " + show.name, logger.DEBUG)
Example #28
0
    def _get_episode_search_strings(self, ep_obj, add_string=''):

        search_strings = []

        if not ep_obj:
            return []

        for show_name in set(show_name_helpers.allPossibleShowNames(self.show)):
            if self.show.air_by_date:
                ep_string = sanitizeSceneName(show_name) + ' ' + str(ep_obj.airdate).replace('-', '.')
            elif self.show.sports:
                ep_string = sanitizeSceneName(show_name) + ' ' + str(ep_obj.airdate).replace('-', '.') + '|' + \
                        ep_obj.airdate.strftime('%b')
            elif self.show.anime:
                ep_string = sanitizeSceneName(show_name) + ' %i' % int(ep_obj.scene_absolute_number)
            else:
                ep_string = sanitizeSceneName(show_name) + ' ' + \
                        sickbeard.config.naming_ep_type[2] % {'seasonnumber': ep_obj.scene_season,
                                                                  'episodenumber': ep_obj.scene_episode}

            if len(add_string):
                ep_string += ' %s' % add_string

            search_strings.append(ep_string)

        return search_strings
Example #29
0
    def _retrieve_show_images_from_tmdb(self, show, img_type):
        types = {'poster': 'poster_path',
                 'banner': None,
                 'fanart': 'backdrop_path',
                 'poster_thumb': 'poster_path',
                 'banner_thumb': None}

        # get TMDB configuration info
        tmdb = TMDB(sickbeard.TMDB_API_KEY)
        config = tmdb.Configuration()
        response = config.info()
        base_url = response['images']['base_url']
        sizes = response['images']['poster_sizes']

        def size_str_to_int(x):
            return float("inf") if x == 'original' else int(x[1:])

        max_size = max(sizes, key=size_str_to_int)

        try:
            search = tmdb.Search()
            for show_name in set(allPossibleShowNames(show)):
                for result in search.collection({'query': show_name})['results'] + search.tv({'query': show_name})['results']:
                    if types[img_type] and getattr(result, types[img_type]):
                        return "{0}{1}{2}".format(base_url, max_size, result[types[img_type]])

        except Exception:
            pass

        logger.log(u"Could not find any " + img_type + " images on TMDB for " + show.name, logger.INFO)
Example #30
0
    def _doSearch(self, search_params, epcount=0, age=0):

        results = []
        items = {'Season': [], 'Episode': [], 'RSS': []}

        for mode in search_params.keys():
            for search_string in search_params[mode]:

                if mode != 'RSS':
                    searchURL = self.proxy._buildURL(self.searchurl % (urllib.quote(unidecode(search_string))))
                else:
                    searchURL = self.proxy._buildURL(self.url + 'tv/latest/')

                logger.log(u"Search string: " + searchURL, logger.DEBUG)

                data = self.getURL(searchURL)
                if not data:
                    continue

                re_title_url = self.proxy._buildRE(self.re_title_url)

                #Extracting torrent information from data returned by searchURL                   
                match = re.compile(re_title_url, re.DOTALL).finditer(urllib.unquote(data))
                for torrent in match:

                    title = torrent.group('title').replace('_',
                                                           '.')  #Do not know why but SickBeard skip release with '_' in name
                    url = torrent.group('url')
                    id = int(torrent.group('id'))
                    seeders = int(torrent.group('seeders'))
                    leechers = int(torrent.group('leechers'))

                    #Filter unseeded torrent
                    if mode != 'RSS' and seeders == 0:
                        continue

                        #Accept Torrent only from Good People for every Episode Search
                    if self.confirmed and re.search('(VIP|Trusted|Helper)', torrent.group(0)) is None:
                        logger.log(u"ThePirateBay Provider found result " + torrent.group(
                            'title') + " but that doesn't seem like a trusted result so I'm ignoring it", logger.DEBUG)
                        continue

                    #Check number video files = episode in season and find the real Quality for full season torrent analyzing files in torrent 
                    if mode == 'Season':
                        ep_number = int(epcount / len(set(allPossibleShowNames(self.show))))
                        title = self._find_season_quality(title, id, ep_number)

                    if not title or not url:
                        continue

                    item = title, url, id, seeders, leechers

                    items[mode].append(item)

            #For each search mode sort all the items by seeders
            items[mode].sort(key=lambda tup: tup[3], reverse=True)

            results += items[mode]

        return results
Example #31
0
    def _search_provider(self, search_params, search_mode='eponly', epcount=0, **kwargs):

        results = []
        items = {'Cache': [], 'Season': [], 'Episode': [], 'Propers': []}

        rc = dict((k, re.compile('(?i)' + v)) for (k, v) in {'link': 'normal', 'get': '^magnet', 'verif': 'verif'}.items())
        url = 0
        for mode in search_params.keys():
            search_show = mode in ['Season', 'Episode']
            if not search_show and has_anime():
                search_params[mode] *= (1, 2)['Cache' == mode]
                'Propers' == mode and search_params[mode].append('v1|v2|v3|v4|v5')

            for enum, search_string in enumerate(search_params[mode]):
                search_string = isinstance(search_string, unicode) and unidecode(search_string) or search_string

                self.url = self.urls['base'][url]
                search_url = self.url + (self.urls['search'] % urllib.quote('%scategory:%s' % (
                    ('', '%s ' % search_string)['Cache' != mode],
                    ('tv', 'anime')[(search_show and bool(self.show and self.show.is_anime)) or bool(enum)])))

                self.session.headers.update({'Referer': search_url})
                html = self.get_url(search_url + self.urls['sorted'])

                cnt = len(items[mode])
                try:
                    if not html or 'kastatic' not in html or self._has_no_results(html) or re.search(r'(?is)<(?:h\d)[^>]*>.*?(?:did\snot\smatch)', html):
                        if html and 'kastatic' not in html:
                            url += (1, 0)[url == len(self.urls['base'])]
                        raise generic.HaltParseException

                    with BS4Parser(html, features=['html5lib', 'permissive']) as soup:
                        torrent_table = soup.find('table', attrs={'class': 'data'})
                        torrent_rows = [] if not torrent_table else torrent_table.find_all('tr')

                        if 2 > len(torrent_rows):
                            raise generic.HaltParseException

                        for tr in torrent_rows[1:]:
                            try:
                                seeders, leechers, size = [tryInt(n, n) for n in [
                                    tr.find_all('td')[x].get_text().strip() for x in (-2, -1, -5)]]
                                if self._peers_fail(mode, seeders, leechers):
                                    continue

                                info = tr.find('div', {'class': 'torrentname'})
                                title = (info.find_all('a')[1].get_text() or info.find('a', 'cellMainLink').get_text())\
                                    .strip()
                                link = self.url + info.find('a', {'class': rc['link']})['href'].lstrip('/')

                                download_magnet = tr.find('a', href=rc['get'])['href']
                            except (AttributeError, TypeError, ValueError):
                                continue

                            if self.confirmed and not (tr.find('a', title=rc['verif']) or tr.find('i', title=rc['verif'])):
                                logger.log(u'Skipping untrusted non-verified result: %s' % title, logger.DEBUG)
                                continue

                            # Check number video files = episode in season and find the real Quality for full season torrent analyzing files in torrent
                            if 'Season' == mode and 'sponly' == search_mode:
                                ep_number = int(epcount / len(set(show_name_helpers.allPossibleShowNames(self.show))))
                                title = self._find_season_quality(title, link, ep_number)

                            if title and download_magnet:
                                items[mode].append((title, download_magnet, seeders, self._bytesizer(size)))

                except generic.HaltParseException:
                    pass
                except Exception:
                    logger.log(u'Failed to parse. Traceback: %s' % traceback.format_exc(), logger.ERROR)
                self._log_search(mode, len(items[mode]) - cnt, search_url)

            self._sort_seeders(mode, items)

            results = list(set(results + items[mode]))

        return results
Example #32
0
    def _get_episode_search_strings(self, ep_obj, french=None):

        showNam = show_name_helpers.allPossibleShowNames(ep_obj.show)
        showNames = list(set(showNam))
        results = []
        for showName in showNames:
            results.append(
                self.getSearchParams(
                    "%s S%02dE%02d" %
                    (showName, ep_obj.scene_season, ep_obj.scene_episode),
                    ep_obj.show.audio_lang, 433, french))
            if (int(ep_obj.scene_season) < 31
                    and int(ep_obj.scene_episode) < 61):
                results.append(
                    self.getSearchParams(showName, ep_obj.show.audio_lang, 433,
                                         french) + "&" +
                    urllib.urlencode({
                        'term[46][]':
                        self.episodeValue(ep_obj.scene_episode),
                        'term[45][]':
                        self.seasonValue(ep_obj.scene_season)
                    }))
            #results.append( self.getSearchParams( "%s %dx%d" % ( showName, ep_obj.season, ep_obj.episode ), ep_obj.show.audio_lang , 433 )) MAY RETURN 1x12 WHEN SEARCHING 1x1
            results.append(
                self.getSearchParams(
                    "%s %dx%02d" %
                    (showName, ep_obj.scene_season, ep_obj.scene_episode),
                    ep_obj.show.audio_lang, 433, french))
            results.append(
                self.getSearchParams(
                    "%s S%02dE%02d" %
                    (showName, ep_obj.scene_season, ep_obj.scene_episode),
                    ep_obj.show.audio_lang, 637, french))
            if (int(ep_obj.scene_season) < 31
                    and int(ep_obj.scene_episode) < 61):
                results.append(
                    self.getSearchParams(showName, ep_obj.show.audio_lang, 637,
                                         french) + "&" +
                    urllib.urlencode({
                        'term[46][]':
                        self.episodeValue(ep_obj.scene_episode),
                        'term[45][]':
                        self.seasonValue(ep_obj.scene_season)
                    }))
            #results.append( self.getSearchParams( "%s %dx%d" % ( showName, ep_obj.season, ep_obj.episode ), ep_obj.show.audio_lang, 637 ))
            results.append(
                self.getSearchParams(
                    "%s %dx%02d" %
                    (showName, ep_obj.scene_season, ep_obj.scene_episode),
                    ep_obj.show.audio_lang, 637, french))
            results.append(
                self.getSearchParams(
                    "%s S%02dE%02d" %
                    (showName, ep_obj.scene_season, ep_obj.scene_episode),
                    ep_obj.show.audio_lang, 634, french))
            #results.append( self.getSearchParams( "%s %dx%d" % ( showName, ep_obj.season, ep_obj.episode ), ep_obj.show.audio_lang, 634 ))
            results.append(
                self.getSearchParams(
                    "%s %dx%02d" %
                    (showName, ep_obj.scene_season, ep_obj.scene_episode),
                    ep_obj.show.audio_lang, 634, french))
            results.append(
                self.getSearchParams(
                    "%s S%02dE%02d" %
                    (showName, ep_obj.scene_season, ep_obj.scene_episode),
                    ep_obj.show.audio_lang, 639, french))
            #results.append( self.getSearchParams( "%s %dx%d" % ( showName, ep_obj.season, ep_obj.episode ), ep_obj.show.audio_lang, 634 ))
            results.append(
                self.getSearchParams(
                    "%s %dx%02d" %
                    (showName, ep_obj.scene_season, ep_obj.scene_episode),
                    ep_obj.show.audio_lang, 639, french))
        return results
Example #33
0
    def _doSearch(self, search_params, search_mode='eponly', epcount=0, age=0):

        results = []
        items = {'Season': [], 'Episode': [], 'RSS': []}

        for mode in search_params.keys():
            for search_string in search_params[mode]:

                for url in self.urls:
                    if mode != 'RSS':
                        searchURL = url + 'usearch/%s/?field=seeders&sorder=desc' % (
                            urllib.quote(unidecode(search_string)))
                        logger.log(u"Search string: " + searchURL,
                                   logger.DEBUG)
                    else:
                        searchURL = url + 'tv/?field=time_add&sorder=desc'
                        logger.log(u"KAT cache update URL: " + searchURL,
                                   logger.DEBUG)

                    html = self.getURL(searchURL)
                    if html:
                        self.url = url
                        break

                if not html:
                    continue

                try:
                    with BS4Parser(html, features=["html5lib",
                                                   "permissive"]) as soup:
                        torrent_table = soup.find('table',
                                                  attrs={'class': 'data'})
                        torrent_rows = torrent_table.find_all(
                            'tr') if torrent_table else []

                        #Continue only if one Release is found
                        if len(torrent_rows) < 2:
                            logger.log(
                                u"The data returned from " + self.name +
                                " does not contain any torrents",
                                logger.WARNING)
                            continue

                        for tr in torrent_rows[1:]:
                            try:
                                link = urlparse.urljoin(
                                    self.url, (tr.find('div', {
                                        'class': 'torrentname'
                                    }).find_all('a')[1])['href'])
                                id = tr.get('id')[-7:]
                                title = (tr.find('div', {'class': 'torrentname'}).find_all('a')[1]).text \
                                        or (tr.find('div', {'class': 'torrentname'}).find_all('a')[2]).text
                                url = tr.find('a', 'imagnet')['href']
                                verified = True if tr.find(
                                    'a', 'iverify') else False
                                trusted = True if tr.find(
                                    'img', {'alt': 'verified'}) else False
                                seeders = int(tr.find_all('td')[-2].text)
                                leechers = int(tr.find_all('td')[-1].text)
                            except (AttributeError, TypeError):
                                continue

                            if mode != 'RSS' and (seeders < self.minseed
                                                  or leechers < self.minleech):
                                continue

                            if self.confirmed and not verified:
                                logger.log(
                                    u"KAT Provider found result " + title +
                                    " but that doesn't seem like a verified result so I'm ignoring it",
                                    logger.DEBUG)
                                continue

                            #Check number video files = episode in season and find the real Quality for full season torrent analyzing files in torrent
                            if mode == 'Season' and search_mode == 'sponly':
                                ep_number = int(
                                    epcount /
                                    len(set(allPossibleShowNames(self.show))))
                                title = self._find_season_quality(
                                    title, link, ep_number)

                            if not title or not url:
                                continue

                            item = title, url, id, seeders, leechers

                            items[mode].append(item)

                except Exception, e:
                    logger.log(
                        u"Failed to parsing " + self.name + " Traceback: " +
                        traceback.format_exc(), logger.ERROR)

            #For each search mode sort all the items by seeders
            items[mode].sort(key=lambda tup: tup[3], reverse=True)

            results += items[mode]
    def _doSearch(self, search_params, show=None, age=None):

        results = []
        items = {'Season': [], 'Episode': [], 'RSS': []}

        for mode in search_params.keys():
            for search_string in search_params[mode]:

                if mode != 'RSS':
                    searchURL = self.proxy._buildURL(
                        self.searchurl %
                        (urllib.quote(unidecode(search_string))))
                else:
                    searchURL = self.proxy._buildURL(self.url + 'tv/latest/')

                logger.log(u"Search string: " + searchURL, logger.DEBUG)

                data = self.getURL(searchURL)
                if not data:
                    continue

                re_title_url = self.proxy._buildRE(self.re_title_url)

                #Extracting torrent information from data returned by searchURL
                match = re.compile(re_title_url,
                                   re.DOTALL).finditer(urllib.unquote(data))
                for torrent in match:

                    title = torrent.group('title').replace(
                        '_', '.'
                    )  #Do not know why but SickBeard skip release with '_' in name
                    url = torrent.group('url')
                    id = int(torrent.group('id'))
                    seeders = int(torrent.group('seeders'))
                    leechers = int(torrent.group('leechers'))

                    #Filter unseeded torrent
                    if mode != 'RSS' and seeders == 0:
                        continue

                        #Accept Torrent only from Good People for every Episode Search
                    if sickbeard.THEPIRATEBAY_TRUSTED and re.search(
                            '(VIP|Trusted|Helper)', torrent.group(0)) is None:
                        logger.log(
                            u"ThePirateBay Provider found result " +
                            torrent.group('title') +
                            " but that doesn't seem like a trusted result so I'm ignoring it",
                            logger.DEBUG)
                        continue

                    #Check number video files = episode in season and find the real Quality for full season torrent analyzing files in torrent
                    if mode == 'Season':
                        ep_number = int(
                            len(search_params['Episode']) /
                            len(set(allPossibleShowNames(self.show))))
                        title = self._find_season_quality(title, id, ep_number)

                    if not title or not url:
                        continue

                    item = title, url, id, seeders, leechers

                    items[mode].append(item)

            #For each search mode sort all the items by seeders
            items[mode].sort(key=lambda tup: tup[3], reverse=True)

            results += items[mode]

        return results
Example #35
0
 def _test_allPossibleShowNames(self, name, tvdbid=0, tvrname=None, expected=[]):
     
     result = show_name_helpers.allPossibleShowNames(Show(name, tvdbid, tvrname))
     self.assertTrue(len(set(expected).intersection(set(result))) == len(expected))