示例#1
0
    def test_get_quality_string(self):
        """
        Test get quality string
        """
        tests = {
            ANY: "Any",
            HD: "HD",
            HD720p: "HD720p",
            HD1080p: "HD1080p",
            Quality.FULLHDBLURAY: "1080p BluRay",
            Quality.FULLHDTV: "1080p HDTV",
            Quality.FULLHDWEBDL: "1080p WEB-DL",
            Quality.HDBLURAY: "720p BluRay",
            Quality.HDTV: "720p HDTV",
            Quality.HDWEBDL: "720p WEB-DL",
            Quality.NONE: "N/A",
            Quality.RAWHDTV: "RawHD",
            Quality.SDDVD: "SD DVD",
            Quality.SDTV: "SDTV",
            Quality.UNKNOWN: "Unknown",
            SD: "SD",
            1000000: "Custom",  # An invalid quality number to test the default case
        }

        for (quality, result) in tests.items():
            assert get_quality_string(quality) == result
示例#2
0
    def test_get_quality_string(self):
        """
        Test get quality string
        """
        tests = {
            ANY: 'Any',
            HD: 'HD',
            HD720p: 'HD720p',
            HD1080p: 'HD1080p',
            Quality.FULLHDBLURAY: '1080p BluRay',
            Quality.FULLHDTV: '1080p HDTV',
            Quality.FULLHDWEBDL: '1080p WEB-DL',
            Quality.HDBLURAY: '720p BluRay',
            Quality.HDTV: '720p HDTV',
            Quality.HDWEBDL: '720p WEB-DL',
            Quality.NONE: 'N/A',
            Quality.RAWHDTV: 'RawHD',
            Quality.SDDVD: 'SD DVD',
            Quality.SDTV: 'SDTV',
            Quality.UNKNOWN: 'Unknown',
            SD: 'SD',
            1000000: 'Custom',  # An invalid quality number to test the default case
        }

        for (quality, result) in six.iteritems(tests):
            self.assertEqual(get_quality_string(quality), result)
示例#3
0
    def test_get_quality_string(self):
        """
        Test get quality string
        """
        tests = {
            ANY: 'Any',
            HD: 'HD',
            HD720p: 'HD720p',
            HD1080p: 'HD1080p',
            Quality.FULLHDBLURAY: '1080p BluRay',
            Quality.FULLHDTV: '1080p HDTV',
            Quality.FULLHDWEBDL: '1080p WEB-DL',
            Quality.HDBLURAY: '720p BluRay',
            Quality.HDTV: '720p HDTV',
            Quality.HDWEBDL: '720p WEB-DL',
            Quality.NONE: 'N/A',
            Quality.RAWHDTV: 'RawHD',
            Quality.SDDVD: 'SD DVD',
            Quality.SDTV: 'SDTV',
            Quality.UNKNOWN: 'Unknown',
            SD: 'SD',
            1000000: 'Custom',  # An invalid quality number to test the default case
        }

        for (quality, result) in tests.items():
            self.assertEqual(get_quality_string(quality), result)
示例#4
0
    def get_coming_episodes(categories,
                            sort,
                            group,
                            paused=sickbeard.COMING_EPS_DISPLAY_PAUSED):
        """
        :param categories: The categories of coming episodes. See ``ComingEpisodes.categories``
        :param sort: The sort to apply to the coming episodes. See ``ComingEpisodes.sorts``
        :param group: ``True`` to group the coming episodes by category, ``False`` otherwise
        :param paused: ``True`` to include paused shows, ``False`` otherwise
        :return: The list of coming episodes
        """

        categories = ComingEpisodes._get_categories(categories)
        sort = ComingEpisodes._get_sort(sort)

        today = date.today().toordinal()
        recently = (
            date.today() -
            timedelta(days=sickbeard.COMING_EPS_MISSED_RANGE)).toordinal()
        next_week = (date.today() + timedelta(days=7)).toordinal()

        db = DBConnection(row_type='dict')
        fields_to_select = ', '.join([
            'airdate', 'airs', 'e.description as description', 'episode',
            'imdb_id', 'e.indexer', 'indexer_id', 'e.location', 'name',
            'network', 'paused', 'quality', 'runtime', 'season', 'show_name',
            'showid', 'e.status as epstatus', 's.status'
        ])

        status_list = [WANTED, UNAIRED] + SNATCHED

        sql_l = []
        for show_obj in sickbeard.showList:
            next_air_date = show_obj.nextEpisode()
            sql_l.append([
                'SELECT DISTINCT {0} '.format(fields_to_select) +
                'FROM tv_episodes e, tv_shows s '
                'WHERE showid = ? '
                'AND airdate <= ? '
                'AND airdate >= ? '
                'AND s.indexer_id = e.showid '
                'AND e.status IN (' + ','.join(['?'] * len(status_list)) + ')',
                [show_obj.indexerid, next_air_date or today, recently] +
                status_list
            ])

        results = []
        for sql_i in sql_l:
            if results:
                results += db.select(*sql_i)
            else:
                results = db.select(*sql_i)

        for index, item in enumerate(results):
            results[index][b'localtime'] = sbdatetime.convert_to_setting(
                parse_date_time(item[b'airdate'], item[b'airs'],
                                item[b'network']))
            results[index][b'snatchedsort'] = int(
                not results[index][b'epstatus'] in SNATCHED)

        results.sort(key=ComingEpisodes.sorts[sort])

        if not group:
            return results

        grouped_results = ComingEpisodes._get_categories_map(categories)

        for result in results:
            if result[b'paused'] and not paused:
                continue

            result[b'airs'] = str(result[b'airs']).replace(
                'am', ' AM').replace('pm', ' PM').replace('  ', ' ')
            result[b'airdate'] = result[b'localtime'].toordinal()

            if result[b'epstatus'] in SNATCHED:
                if result[b'location']:
                    continue
                else:
                    category = 'snatched'
            elif result[b'airdate'] < today:
                category = 'missed'
            elif result[b'airdate'] >= next_week:
                category = 'later'
            elif result[b'airdate'] == today:
                category = 'today'
            else:
                category = 'soon'

            if len(categories) > 0 and category not in categories:
                continue

            if not result[b'network']:
                result[b'network'] = ''

            result[b'quality'] = get_quality_string(result[b'quality'])
            result[b'airs'] = sbdatetime.sbftime(
                result[b'localtime'],
                t_preset=timeFormat).lstrip('0').replace(' 0', ' ')
            result[b'weekday'] = 1 + result[b'localtime'].weekday()
            result[b'tvdbid'] = result[b'indexer_id']
            result[b'airdate'] = sbdatetime.sbfdate(result[b'localtime'],
                                                    d_preset=dateFormat)
            result[b'localtime'] = result[b'localtime'].toordinal()

            grouped_results[category].append(result)

        return grouped_results
示例#5
0
    def get_coming_episodes(categories,
                            sort,
                            group,
                            paused=settings.COMING_EPS_DISPLAY_PAUSED):
        """
        :param categories: The categories of coming episodes. See ``ComingEpisodes.categories``
        :param sort: The sort to apply to the coming episodes. See ``ComingEpisodes.sorts``
        :param group: ``True`` to group the coming episodes by category, ``False`` otherwise
        :param paused: ``True`` to include paused shows, ``False`` otherwise
        :return: The list of coming episodes
        """

        categories = ComingEpisodes._get_categories(categories)
        sort = ComingEpisodes._get_sort(sort)

        today = date.today().toordinal()
        recently = (
            date.today() -
            timedelta(days=settings.COMING_EPS_MISSED_RANGE)).toordinal()
        next_week = (date.today() + timedelta(days=7)).toordinal()

        db = DBConnection(row_type="dict")
        fields_to_select = ", ".join([
            "airdate",
            "airs",
            "e.description as description",
            "episode",
            "imdb_id",
            "e.indexer",
            "indexer_id",
            "e.location",
            "name",
            "network",
            "paused",
            "quality",
            "runtime",
            "season",
            "show_name",
            "showid",
            "e.status as epstatus",
            "s.status",
        ])

        status_list = [WANTED, UNAIRED] + SNATCHED

        sql_l = []
        for show_obj in settings.showList:
            next_air_date = show_obj.nextEpisode()
            sql_l.append([
                "SELECT DISTINCT {0} ".format(fields_to_select) +
                "FROM tv_episodes e, tv_shows s "
                "WHERE showid = ? "
                "AND airdate <= ? "
                "AND airdate >= ? "
                "AND s.indexer_id = e.showid "
                "AND e.status IN (" + ",".join(["?"] * len(status_list)) + ")",
                [show_obj.indexerid, next_air_date or today, recently] +
                status_list,
            ])

        results = []
        for sql_i in sql_l:
            if results:
                results += db.select(*sql_i)
            else:
                results = db.select(*sql_i)

        for index, item in enumerate(results):
            results[index]["localtime"] = sbdatetime.convert_to_setting(
                parse_date_time(item["airdate"], item["airs"],
                                item["network"]))
            results[index]["snatchedsort"] = int(
                not results[index]["epstatus"] in SNATCHED)

        results.sort(key=ComingEpisodes.sorts[sort])

        if not group:
            return results

        grouped_results = ComingEpisodes._get_categories_map(categories)

        for result in results:
            if result["paused"] and not paused:
                continue

            result["airs"] = str(result["airs"]).replace("am", " AM").replace(
                "pm", " PM").replace("  ", " ")
            result["airdate"] = result["localtime"].toordinal()

            if result["epstatus"] in SNATCHED:
                if result["location"]:
                    continue
                else:
                    category = "snatched"
            elif result["airdate"] < today:
                category = "missed"
            elif result["airdate"] >= next_week:
                category = "later"
            elif result["airdate"] == today:
                category = "today"
            else:
                category = "soon"

            if categories and category not in categories:
                continue

            if not result["network"]:
                result["network"] = ""

            result["quality"] = get_quality_string(result["quality"])
            result["airs"] = sbdatetime.sbftime(
                result["localtime"],
                t_preset=timeFormat).lstrip("0").replace(" 0", " ")
            result["weekday"] = 1 + result["localtime"].weekday()
            result["tvdbid"] = result["indexer_id"]
            result["airdate"] = sbdatetime.sbfdate(result["localtime"],
                                                   d_preset=dateFormat)
            result["localtime"] = result["localtime"].toordinal()

            grouped_results[category].append(result)

        return grouped_results
示例#6
0
    def get_coming_episodes(categories, sort, group, paused=sickbeard.COMING_EPS_DISPLAY_PAUSED):
        """
        :param categories: The categories of coming episodes. See ``ComingEpisodes.categories``
        :param sort: The sort to apply to the coming episodes. See ``ComingEpisodes.sorts``
        :param group: ``True`` to group the coming episodes by category, ``False`` otherwise
        :param paused: ``True`` to include paused shows, ``False`` otherwise
        :return: The list of coming episodes
        """

        categories = ComingEpisodes._get_categories(categories)
        sort = ComingEpisodes._get_sort(sort)

        today = date.today().toordinal()
        recently = (date.today() - timedelta(days=sickbeard.COMING_EPS_MISSED_RANGE)).toordinal()
        next_week = (date.today() + timedelta(days=7)).toordinal()

        db = DBConnection(row_type='dict')
        fields_to_select = ', '.join(
            ['airdate', 'airs', 'e.description as description', 'episode', 'imdb_id', 'e.indexer', 'indexer_id',
             'e.location', 'name', 'network', 'paused', 'quality', 'runtime', 'season', 'show_name', 'showid',
             'e.status as epstatus', 's.status']
        )

        status_list = [WANTED, UNAIRED] + SNATCHED

        sql_l = []
        for show_obj in sickbeard.showList:
            next_air_date = show_obj.nextEpisode()
            sql_l.append(
                [
                    'SELECT DISTINCT {0} '.format(fields_to_select) +
                    'FROM tv_episodes e, tv_shows s '
                    'WHERE showid = ? '
                    'AND airdate <= ? '
                    'AND airdate >= ? '
                    'AND s.indexer_id = e.showid '
                    'AND e.status IN (' + ','.join(['?'] * len(status_list)) + ')',
                    [show_obj.indexerid, next_air_date or today, recently] + status_list
                ]
            )

        results = []
        for sql_i in sql_l:
            if results:
                results += db.select(*sql_i)
            else:
                results = db.select(*sql_i)

        for index, item in enumerate(results):
            results[index][b'localtime'] = sbdatetime.convert_to_setting(
                parse_date_time(item[b'airdate'], item[b'airs'], item[b'network']))
            results[index][b'snatchedsort'] = int(not results[index][b'epstatus'] in SNATCHED)

        results.sort(key=ComingEpisodes.sorts[sort])

        if not group:
            return results

        grouped_results = ComingEpisodes._get_categories_map(categories)

        for result in results:
            if result[b'paused'] and not paused:
                continue

            result[b'airs'] = str(result[b'airs']).replace('am', ' AM').replace('pm', ' PM').replace('  ', ' ')
            result[b'airdate'] = result[b'localtime'].toordinal()

            if result[b'epstatus'] in SNATCHED:
                if result[b'location']:
                    continue
                else:
                    category = 'snatched'
            elif result[b'airdate'] < today:
                category = 'missed'
            elif result[b'airdate'] >= next_week:
                category = 'later'
            elif result[b'airdate'] == today:
                category = 'today'
            else:
                category = 'soon'

            if len(categories) > 0 and category not in categories:
                continue

            if not result[b'network']:
                result[b'network'] = ''

            result[b'quality'] = get_quality_string(result[b'quality'])
            result[b'airs'] = sbdatetime.sbftime(result[b'localtime'], t_preset=timeFormat).lstrip('0').replace(' 0', ' ')
            result[b'weekday'] = 1 + result[b'localtime'].weekday()
            result[b'tvdbid'] = result[b'indexer_id']
            result[b'airdate'] = sbdatetime.sbfdate(result[b'localtime'], d_preset=dateFormat)
            result[b'localtime'] = result[b'localtime'].toordinal()

            grouped_results[category].append(result)

        return grouped_results