def _find_next_episode(videoid, metadata):
    try:
        # Find next episode in current season
        episode = common.find(metadata[0]['seq'] + 1, 'seq',
                              metadata[1]['episodes'])
        return common.VideoId(tvshowid=videoid.tvshowid,
                              seasonid=videoid.seasonid,
                              episodeid=episode['id'])
    except (IndexError, KeyError):
        # Find first episode of next season
        next_season = common.find(metadata[1]['seq'] + 1, 'seq',
                                  metadata[2]['seasons'])
        episode = common.find(1, 'seq', next_season['episodes'])
        return common.VideoId(tvshowid=videoid.tvshowid,
                              seasonid=next_season['id'],
                              episodeid=episode['id'])
def _create_export_tv_tasks(videoid, metadata, nfo_settings):
    """Create tasks for a show, season or episode.
    If videoid represents a show or season, tasks will be generated for
    all contained seasons and episodes"""
    if videoid.mediatype == common.VideoId.SHOW:
        tasks = _compile_export_show_tasks(videoid, metadata[0], nfo_settings)
    elif videoid.mediatype == common.VideoId.SEASON:
        tasks = _compile_export_season_tasks(
            videoid, metadata[0],
            common.find(int(videoid.seasonid), 'id', metadata[0]['seasons']),
            nfo_settings)
    else:
        tasks = [
            _create_export_episode_task(videoid,
                                        *metadata,
                                        nfo_settings=nfo_settings)
        ]

    if nfo_settings and nfo_settings.export_full_tvshow:
        # Create tvshow.nfo file
        # In episode metadata, show data is at 3rd position,
        # while it's at first position in show metadata.
        # Best is to enumerate values to find the correct key position
        key_index = -1
        for i, item in enumerate(metadata):
            if item and item.get('type', None) == 'show':
                key_index = i
        if key_index > -1:
            tasks.append(
                _create_export_item_task(
                    'tvshow.nfo', FOLDER_TV, videoid,
                    metadata[key_index]['title'], 'tvshow',
                    nfo.create_show_nfo(metadata[key_index]), False))
    return tasks
    def _create_export_tvshow_jobs(self, videoid, metadata, nfo_settings):
        """
        Create jobs data to export a: tv show, season or episode.
        The data for the jobs will be generated by extrapolating every single episode.
        """
        if videoid.mediatype == common.VideoId.SHOW:
            tasks = self._get_export_tvshow_jobs(videoid, metadata[0],
                                                 nfo_settings)
        elif videoid.mediatype == common.VideoId.SEASON:
            tasks = self._get_export_season_jobs(
                videoid, metadata[0],
                common.find(int(videoid.seasonid), 'id',
                            metadata[0]['seasons']), nfo_settings)
        else:
            tasks = [
                self._create_export_episode_job(videoid,
                                                *metadata,
                                                nfo_settings=nfo_settings)
            ]

        if nfo_settings and nfo_settings.export_full_tvshow:
            job = self._create_export_tvshow_nfo_job(videoid, metadata)
            if job:
                tasks.append(job)
        return tasks
Exemple #4
0
def _create_tv_tasks(videoid, metadata):
    """Create tasks for a show, season or episode.
    If videoid represents a show or season, tasks will be generated for
    all contained seasons and episodes"""
    if videoid.mediatype == common.VideoId.SHOW:
        return _compile_show_tasks(videoid, metadata[0])
    elif videoid.mediatype == common.VideoId.SEASON:
        return _compile_season_tasks(
            videoid, metadata[0],
            common.find(int(videoid.seasonid), 'id', metadata[0]['seasons']))
    return [_create_episode_task(videoid, *metadata)]
    def _create_export_tvshow_jobs(self, videoid, metadata, nfo_settings):
        """
        Create jobs data to export a: tv show, season or episode.
        The data for the jobs will be generated by extrapolating every single episode.
        """
        if videoid.mediatype == common.VideoId.SHOW:
            tasks = self._get_export_tvshow_jobs(videoid, metadata[0],
                                                 nfo_settings)
        elif videoid.mediatype == common.VideoId.SEASON:
            tasks = self._get_export_season_jobs(
                videoid, metadata[0],
                common.find(int(videoid.seasonid), 'id',
                            metadata[0]['seasons']), nfo_settings)
        else:
            tasks = [
                self._create_export_episode_job(videoid,
                                                *metadata,
                                                nfo_settings=nfo_settings)
            ]

        if nfo_settings and nfo_settings.export_full_tvshow:
            # Create tvshow.nfo file
            # In episode metadata, the show data is at 3rd position,
            # In show metadata, the show data is at 1st position.
            # Best is to enumerate values to find the correct key position
            key_index = -1
            for i, item in enumerate(metadata):
                if item and item.get('type', None) == 'show':
                    key_index = i
            if key_index > -1:
                tasks.append(
                    self._build_export_job_data(
                        False,
                        True,
                        videoid=videoid,
                        title='tvshow.nfo',
                        root_folder_name=FOLDER_NAME_SHOWS,
                        folder_name=metadata[key_index]['title'],
                        filename='tvshow',
                        nfo_data=nfo.create_show_nfo(metadata[key_index])))
        return tasks
def _create_tv_tasks(videoid, metadata, nfo_settings):
    """Create tasks for a show, season or episode.
    If videoid represents a show or season, tasks will be generated for
    all contained seasons and episodes"""
    if videoid.mediatype == common.VideoId.SHOW:
        tasks = _compile_show_tasks(videoid, metadata[0], nfo_settings)
    elif videoid.mediatype == common.VideoId.SEASON:
        tasks = _compile_season_tasks(
            videoid, metadata[0],
            common.find(int(videoid.seasonid), 'id', metadata[0]['seasons']),
            nfo_settings)
    else:
        tasks = [
            _create_episode_task(videoid, *metadata, nfo_settings=nfo_settings)
        ]

    if nfo_settings and nfo_settings.export_full_tvshow:
        # Create tvshow.nfo file
        tasks.append(
            _create_item_task('tvshow.nfo', FOLDER_TV, videoid,
                              metadata[0]['title'], 'tvshow',
                              nfo.create_show_nfo(metadata[0]), False))
    return tasks