Exemple #1
0
def clear_trakt_list_contents_data(clear_all=False, user=None, slug=None):
    from resources.lib.modules.trakt import get_trakt_my_lists, get_trakt_liked_lists
    settings.check_database(trakt_cache_file)
    if clear_all:
        my_lists = [(item["user"]["username"], item["ids"]["slug"])
                    for item in get_trakt_my_lists(build_list=False)]
        liked_lists = [(item["list"]["user"]["username"],
                        item["list"]["ids"]["slug"])
                       for item in get_trakt_liked_lists(build_list=False)]
        my_lists.extend(liked_lists)
        try:
            dbcon = database.connect(trakt_cache_file)
            dbcur = dbcon.cursor()
            dbcur.execute(
                "DELETE FROM fen_trakt WHERE id LIKE 'trakt_list_contents%'")
            dbcon.commit()
        except:
            pass
        for i in my_lists:
            window.clearProperty('trakt_list_contents_%s_%s' % (i[0], i[1]))
    else:
        action = 'trakt_list_contents_%s_%s' % (user, slug)
        try:
            dbcon = database.connect(trakt_cache_file)
            dbcur = dbcon.cursor()
            dbcur.execute("DELETE FROM fen_trakt WHERE id=?", (action, ))
            dbcon.commit()
            window.clearProperty(action)
            window.setProperty('trakt_reset_passed_list', 'true')
        except:
            pass
Exemple #2
0
def get_watched_status(db_type, media_id, season='', episode=''):
    try:
        if settings.watched_indicators() in (1, 2):
            if db_type == 'movie':
                from resources.lib.modules.trakt import trakt_indicators_movies
                watched = [i[0] for i in trakt_indicators_movies()]
                if media_id in watched: return 1, 7
                return 0, 6
            else:
                from resources.lib.modules.trakt import trakt_indicators_tv
                watched = trakt_indicators_tv()
                watched = [i[2] for i in watched if i[0] == media_id]
                if watched:
                    watched = [
                        i for i in watched[0]
                        if i[0] == season and i[1] == episode
                    ]
                    if watched: return 1, 7
                return 0, 6
        else:
            settings.check_database(WATCHED_DB)
            dbcon = database.connect(WATCHED_DB)
            dbcur = dbcon.cursor()
            dbcur.execute(
                "SELECT * FROM watched_status WHERE (db_type = ? and media_id = ? and season = ? and episode = ?)",
                (db_type, media_id, season, episode))
            watched = dbcur.fetchone()
            dbcon.close()
            if watched: return 1, 7
            else: return 0, 6
    except:
        return 0, 6
Exemple #3
0
def clear_trakt_next_episode_data(media_id=None):
    settings.check_database(trakt_cache_file)
    try:
        dbcon = database.connect(trakt_cache_file)
        dbcur = dbcon.cursor()
        dbcur.execute("SELECT * FROM fen_trakt WHERE id = ?",
                      ('trakt_watched_shows', ))
        shows = dbcur.fetchone()[2]
        shows = eval(shows)
        show_ids = [i['show']['ids'] for i in shows]
    except:
        return
    if media_id:
        try:
            trakt_id = [i['trakt'] for i in show_ids
                        if i['imdb'] == media_id][0]
            dbcur.execute("DELETE FROM fen_trakt WHERE id=?",
                          ('trakt_view_history_%s' % str(trakt_id), ))
            dbcon.commit()
            window.clearProperty('trakt_view_history_%s' % str(trakt_id))
        except:
            pass
        return
    if not media_id:
        trakt_ids = [i['trakt'] for i in show_ids]
        dbcur.execute(
            "DELETE FROM fen_trakt WHERE id LIKE 'trakt_view_history%'")
        dbcon.commit()
        for i in trakt_ids:
            window.clearProperty('trakt_view_history_%s' % str(i))
Exemple #4
0
def erase_bookmark(db_type, media_id, season='', episode=''):
    settings.check_database(WATCHED_DB)
    dbcon = database.connect(WATCHED_DB)
    dbcur = dbcon.cursor()
    dbcur.execute(
        "DELETE FROM progress where db_type=? and media_id=? and season = ? and episode = ?",
        (db_type, media_id, season, episode))
    dbcon.commit()
Exemple #5
0
def clear_trakt_list_data(list_type):
    settings.check_database(trakt_cache_file)
    action = 'trakt_my_lists' if list_type == 'my_lists' else 'trakt_liked_lists'
    try:
        dbcon = database.connect(trakt_cache_file)
        dbcur = dbcon.cursor()
        dbcur.execute("DELETE FROM fen_trakt WHERE id=?", (action, ))
        dbcon.commit()
        window.clearProperty(action)
    except:
        pass
Exemple #6
0
def check_for_next_episode_excludes():
    from urlparse import parse_qsl
    from resources.lib.modules.nav_utils import notification
    settings.check_database(WATCHED_DB)
    params = dict(parse_qsl(sys.argv[2].replace('?','')))
    dbcon = database.connect(WATCHED_DB)
    dbcur = dbcon.cursor()
    dbcur.execute('''SELECT media_id FROM exclude_from_next_episode''')
    row = dbcur.fetchall()
    dbcon.close()
    return [str(i[0]) for i in row]
Exemple #7
0
def clear_trakt_hidden_data(list_type):
    settings.check_database(trakt_cache_file)
    action = 'trakt_hidden_items_%s' % list_type
    try:
        dbcon = database.connect(trakt_cache_file)
        dbcur = dbcon.cursor()
        dbcur.execute("DELETE FROM fen_trakt WHERE id=?", (action, ))
        dbcon.commit()
        window.clearProperty(action)
    except:
        pass
Exemple #8
0
def clear_trakt_collection_watchlist_data(list_type, db_type):
    settings.check_database(trakt_cache_file)
    action = 'trakt_collection_%s' % db_type if list_type == 'collection' else 'trakt_watchlist_%s' % db_type
    try:
        dbcon = database.connect(trakt_cache_file)
        dbcur = dbcon.cursor()
        dbcur.execute("DELETE FROM fen_trakt WHERE id=?", (action, ))
        dbcon.commit()
        window.clearProperty(action)
        window.setProperty('trakt_reset_passed_list', 'true')
    except:
        pass
Exemple #9
0
 def __init__(self):
     self.dialog = xbmcgui.Dialog()
     self.fav_database = os.path.join(__addon_profile__, 'favourites.db')
     settings.check_database(self.fav_database)
     params = dict(parse_qsl(sys.argv[2].replace('?', '')))
     self.db_type = params.get('db_type')
     self.tmdb_id = params.get('tmdb_id')
     self.title = params.get('title')
     self.name = params.get('name')
     self.id = params.get('_id')
     self.url_dl = params.get('url_dl')
     self.size = params.get('size')
Exemple #10
0
def detect_bookmark(db_type, media_id, season='', episode=''):
    settings.check_database(WATCHED_DB)
    dbcon = database.connect(WATCHED_DB)
    dbcon.row_factory = database.Row
    dbcur = dbcon.cursor()
    dbcur.execute(
        "SELECT * FROM progress WHERE (db_type = ? and media_id = ? and season = ? and episode = ?)",
        (db_type, media_id, season, episode))
    for row in dbcur:
        resume_point = row['resume_point']
        curr_time = row['curr_time']
    return resume_point, curr_time
Exemple #11
0
def get_watched_status_tvshow(media_id, aired_eps):
    playcount, overlay = 0, 6
    watched, unwatched = 0, aired_eps

    def get_playcount_overlay(use_trakt):
        try:
            if use_trakt:
                watched = [
                    i for i in watched_info
                    if i[0] == media_id and i[1] == len(i[2])
                ]
                if watched:
                    playcount, overlay = 1, 7
            else:
                if watched_info == aired_eps and not aired_eps == 0:
                    playcount, overlay = 1, 7
        except:
            pass
        return playcount, overlay

    def get_watched_episode_totals(use_trakt):
        try:
            if use_trakt:
                watched = len([i[2] for i in watched_info
                               if i[0] == media_id][0])
                unwatched = aired_eps - watched
            else:
                watched = watched_info
                unwatched = aired_eps - watched
        except:
            pass
        return watched, unwatched

    try:
        if settings.watched_indicators() in (1, 2):
            from resources.lib.modules.trakt import trakt_indicators_tv
            use_trakt = True
            watched_info = trakt_indicators_tv()
        else:
            use_trakt = False
            settings.check_database(WATCHED_DB)
            dbcon = database.connect(WATCHED_DB)
            dbcur = dbcon.cursor()
            dbcur.execute(
                "SELECT * FROM watched_status WHERE (db_type = ? and media_id = ?)",
                ('episode', media_id))
            watched_info = len(dbcur.fetchall())
            dbcon.close()
        watched, unwatched = get_watched_episode_totals(use_trakt)
        playcount, overlay = get_playcount_overlay(use_trakt)
    except:
        pass
    return playcount, overlay, watched, unwatched
Exemple #12
0
 def __init__(self,
              db_type=None,
              tmdb_id=None,
              action=None,
              orig_mode=None):
     self.sub_database = os.path.join(__addon_profile__, 'subscriptions.db')
     self.db_type = db_type
     self.tmdb_id = tmdb_id
     self.action = action
     self.orig_mode = orig_mode
     if self.db_type:
         self.path = settings.movies_directory(
         ) if self.db_type == 'movie' else settings.tv_show_directory()
     settings.check_database(self.sub_database)
Exemple #13
0
def get_unwatched_next_episodes():
    try:
        if settings.watched_indicators() in (1, 2):
            from resources.lib.modules.trakt import call_trakt, get_trakt_tvshow_id
            data = call_trakt("sync/watchlist/shows?extended=full", method='sort_by_headers')
            return [{"tmdb_id": get_trakt_tvshow_id(i), "season": 1, "episode": 0, "unwatched": True} for i in data]
        else:
            settings.check_database(WATCHED_DB)
            dbcon = database.connect(WATCHED_DB)
            dbcur = dbcon.cursor()
            dbcur.execute('''SELECT media_id FROM unwatched_next_episode''')
            unwatched = dbcur.fetchall()
            return [{"tmdb_id": i[0], "season": 1, "episode": 0, "unwatched": True} for i in unwatched]
    except: return []
Exemple #14
0
def clear_trakt_watched_data(db_type, media_id=None):
    settings.check_database(trakt_cache_file)
    dbcon = database.connect(trakt_cache_file)
    dbcur = dbcon.cursor()
    if db_type == 'tvshow':
        clear_trakt_next_episode_data(media_id)
        dbcur.execute("DELETE FROM fen_trakt WHERE id=?",
                      ('trakt_watched_shows', ))
        dbcon.commit()
        window.clearProperty('trakt_watched_shows')
    action = 'trakt_indicators_movies' if db_type in (
        'movie', 'movies') else 'trakt_indicators_tv'
    dbcur.execute("DELETE FROM fen_trakt WHERE id=?", (action, ))
    dbcon.commit()
    window.clearProperty(action)
Exemple #15
0
def add_next_episode_unwatched(action=None, media_id=None, silent=False):
    from urlparse import parse_qsl
    from resources.lib.modules.nav_utils import notification
    from resources.lib.modules.indicators_bookmarks import mark_as_watched_unwatched
    settings.check_database(WATCHED_DB)
    params = dict(parse_qsl(sys.argv[2].replace('?','')))
    media_id = params['tmdb_id'] if not media_id else media_id
    action = params['action'] if not action else action
    if action == 'add': command, line1 = "INSERT OR IGNORE INTO unwatched_next_episode VALUES (?)", '%s Added to Fen Next Episode' % params.get('title')
    else: command, line1 = "DELETE FROM unwatched_next_episode WHERE media_id=?", '%s Removed from Fen Next Episode' % params.get('title')
    dbcon = database.connect(WATCHED_DB)
    dbcon.execute(command, (media_id,))
    dbcon.commit()
    dbcon.close()
    if not silent: notification(line1, time=3500)
    xbmc.sleep(500)
    xbmc.executebuiltin("Container.Refresh")
Exemple #16
0
def setView(view_type):
    from resources.lib.modules.settings import check_database
    try:
        from sqlite3 import dbapi2 as database
    except:
        from pysqlite2 import dbapi2 as database
    try:
        VIEWS_DB = os.path.join(profile_dir, "views.db")
        check_database(VIEWS_DB)
        dbcon = database.connect(VIEWS_DB)
        dbcur = dbcon.cursor()
        dbcur.execute("SELECT view_id FROM views WHERE view_type = ?",
                      (str(view_type), ))
        view_id = dbcur.fetchone()[0]
        xbmc.sleep(250)
        return xbmc.executebuiltin("Container.SetViewMode(%s)" % str(view_id))
    except:
        return
Exemple #17
0
def add_to_remove_from_next_episode_excludes():
    from urlparse import parse_qsl
    from resources.lib.modules.nav_utils import notification
    settings.check_database(WATCHED_DB)
    params = dict(parse_qsl(sys.argv[2].replace('?','')))
    action = params.get('action')
    media_id = str(params.get('media_id'))
    title = str(params.get('title'))
    dbcon = database.connect(WATCHED_DB)
    if action == 'add':
        dbcon.execute("INSERT INTO exclude_from_next_episode VALUES (?, ?)", (media_id, title))
        line1 = '[B]{}[/B] excluded from Fen Next Episode'.format(title.upper())
    elif action == 'remove':
        dbcon.execute("DELETE FROM exclude_from_next_episode WHERE media_id=?", (media_id,))
        line1 = '[B]{}[/B] included in Fen Next Episode'.format(title.upper())
    dbcon.commit()
    dbcon.close()
    notification('{}'.format(line1), time=5000)
    xbmc.sleep(500)
    xbmc.executebuiltin("Container.Refresh")
Exemple #18
0
def build_next_episode():
    sync_watched_trakt_to_fen()
    try:
        threads = []
        seen = set()
        ep_list = []
        ne_settings = settings.nextep_content_settings()
        ne_display = settings.nextep_display_settings()
        if ne_settings['include_unwatched']:
            for i in get_unwatched_next_episodes(): ep_list.append(i)
        if settings.watched_indicators() in (1, 2):
            from resources.lib.modules.trakt import trakt_get_next_episodes
            info = trakt_get_next_episodes()
            for item in info:
                try:
                    ep_list.append({"tmdb_id": get_trakt_tvshow_id(item), "season": item['season'], "episode": item['number'], "last_played": item['show']['last_watched_at']})
                except: pass
        else:
            settings.check_database(WATCHED_DB)
            dbcon = database.connect(WATCHED_DB)
            dbcur = dbcon.cursor()
            dbcur.execute('''SELECT media_id, season, episode, last_played FROM watched_status WHERE db_type=?''', ('episode',))
            rows = dbcur.fetchall()
            rows = sorted(rows, key = lambda x: (x[0], x[1], x[2]), reverse=True)
            [ep_list.append({"tmdb_id": a, "season": int(b), "episode": int(c), "last_played": d}) for a, b, c, d in rows if not (a in seen or seen.add(a))]
            ep_list = [x for x in ep_list if x['tmdb_id'] not in check_for_next_episode_excludes()]
        ep_list = [i for i in ep_list if not i['tmdb_id'] == None]
        for item in ep_list: threads.append(Thread(process_eps, item, ne_settings, ne_display))
        [i.start() for i in threads]
        [i.join() for i in threads]
        r = [i for i in result if i is not None]
        r = sort_next_eps(r, ne_settings)
        listitems = [i['listitem'] for i in r]
        xbmcplugin.addDirectoryItems(__handle__, listitems, len(listitems))
        xbmcplugin.setContent(__handle__, 'episodes')
        xbmcplugin.endOfDirectory(__handle__)
        setView('view.progress_next_episode')
    except:
        from resources.lib.modules.nav_utils import notification
        notification('Error getting Next Episode Info', time=3500)
        pass
Exemple #19
0
def set_bookmark(db_type,
                 media_id,
                 curr_time,
                 total_time,
                 season='',
                 episode='',
                 from_search='false'):
    settings.check_database(WATCHED_DB)
    erase_bookmark(db_type, media_id, season, episode)
    adjusted_current_time = curr_time - 4
    resume_point = round(float(adjusted_current_time / total_time * 100), 1)
    dbcon = database.connect(WATCHED_DB)
    dbcur = dbcon.cursor()
    dbcur.execute("INSERT INTO progress VALUES (?, ?, ?, ?, ?, ?)",
                  (db_type, media_id, season, episode, str(resume_point),
                   str(curr_time)))
    dbcon.commit()
    if settings.sync_kodi_library_watchstatus():
        from resources.lib.modules.kodi_library import set_bookmark_kodi_library
        set_bookmark_kodi_library(db_type, media_id, curr_time, season,
                                  episode)
    refresh_container(from_search)
Exemple #20
0
def mark_as_watched_unwatched(db_type='',
                              media_id='',
                              action='',
                              season='',
                              episode='',
                              title=''):
    try:
        settings.check_database(WATCHED_DB)
        last_played = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        dbcon = database.connect(WATCHED_DB, timeout=40.0)
        erase_bookmark(db_type, media_id, season, episode)
        if action == 'mark_as_watched':
            dbcon.execute(
                "INSERT OR IGNORE INTO watched_status VALUES (?, ?, ?, ?, ?, ?)",
                (db_type, media_id, season, episode, last_played,
                 to_unicode(title)))
        elif action == 'mark_as_unwatched':
            dbcon.execute(
                "DELETE FROM watched_status WHERE (db_type = ? and media_id = ? and season = ? and episode = ?)",
                (db_type, media_id, season, episode))
        dbcon.commit()
    except:
        from resources.lib.modules.nav_utils import notification
        notification('Error Marking Watched in Fen', time=5000)
Exemple #21
0
def build_next_episode_manager():
    from urlparse import parse_qsl
    from resources.lib.indexers.tvshows import aired_episode_number_tvshow
    from resources.lib.modules.nav_utils import add_dir
    from resources.lib.modules.indicators_bookmarks import get_watched_status_tvshow
    params = dict(parse_qsl(sys.argv[2].replace('?','')))
    NEXT_EP_UNWATCHED = __addon__.getSetting('nextep.unwatched_colour')
    if not NEXT_EP_UNWATCHED or NEXT_EP_UNWATCHED == '': NEXT_EP_UNWATCHED = 'red'
    VIEW_NEM = __addon__.getSetting('view.main')
    sorted_list = []
    action = params['action']
    if action == 'manage_unwatched':
        tmdb_list = [i['tmdb_id'] for i in get_unwatched_next_episodes()]
        heading = 'Select Show to remove from Fen Next Episode:'
    elif settings.watched_indicators() in (1, 2):
        from resources.lib.modules.trakt import trakt_get_next_episodes
        tmdb_list, exclude_list = trakt_get_next_episodes(include_hidden=True)
        heading = 'Select Show to Hide/Unhide from Trakt Progress:'
    else:
        settings.check_database(WATCHED_DB)
        dbcon = database.connect(WATCHED_DB)
        dbcur = dbcon.cursor()
        dbcur.execute('''SELECT media_id FROM watched_status WHERE db_type=? GROUP BY media_id''', ('episode',))
        rows = dbcur.fetchall()
        tmdb_list = [row[0] for row in rows]
        exclude_list = check_for_next_episode_excludes()
        heading = 'Select Show to Include/Exclude in Fen Next Episode:'
    add_dir({'mode': 'nill'}, '[I][COLOR=grey][B]INFO:[/B][/COLOR] [COLOR=grey2]%s[/COLOR][/I]' % heading, iconImage='settings.png')
    if not tmdb_list:
        from resources.lib.modules.nav_utils import notification
        notification('No Shows Present', time=5000)
    else:
        for tmdb_id in tmdb_list:
            try:
                meta = make_fresh_tvshow_meta('tmdb_id', tmdb_id)
                if action == 'manage_unwatched':
                    action, display = 'remove', '[COLOR=%s][UNWATCHED][/COLOR] %s' % (NEXT_EP_UNWATCHED, meta['title'])
                    url_params = {'mode': 'add_next_episode_unwatched', 'action': 'remove', 'tmdb_id': meta['tmdb_id'], 'title': meta['title']}
                elif settings.watched_indicators() in (1, 2):
                    action, display = 'unhide' if str(meta['tmdb_id']) in exclude_list else 'hide', '[COLOR=red][EXCLUDED][/COLOR] %s' % meta['title'] if str(meta['tmdb_id']) in exclude_list else '[COLOR=green][INCLUDED][/COLOR] %s' % meta['title']
                    url_params = {"mode": "hide_unhide_trakt_items", "action": action, "media_type": "shows", "media_id": meta['imdb_id'], "section": "progress_watched"}
                else:
                    action, display = 'remove' if str(meta['tmdb_id']) in exclude_list else 'add', '[COLOR=red][EXCLUDED][/COLOR] %s' % meta['title'] if str(meta['tmdb_id']) in exclude_list else '[COLOR=green][INCLUDED][/COLOR] %s' % meta['title']
                    url_params = {'mode': 'add_to_remove_from_next_episode_excludes', 'action': action, 'title': meta['title'], 'media_id': meta['tmdb_id']}
                sorted_list.append({'tmdb_id': tmdb_id, 'display': display, 'url_params': url_params, 'meta': json.dumps(meta)})
            except: pass
        sorted_items = sorted(sorted_list, key=lambda k: k['display'])
        for i in sorted_items:
            try:
                cm = []
                meta = json.loads(i['meta'])
                rootname = meta['title'] + " (" + str(meta['year']) + ")"
                meta['rootname'] = rootname
                aired_episodes = aired_episode_number_tvshow(meta)
                playcount, overlay, total_watched, total_unwatched = get_watched_status_tvshow(meta['tmdb_id'], aired_episodes)
                url = build_url(i['url_params'])
                browse_url = build_url({'mode': 'build_season_list', 'meta': i['meta']})
                cm.append(("[B]Browse...[/B]",'XBMC.Container.Update(%s)' % browse_url))
                listitem = xbmcgui.ListItem(i['display'])
                listitem.setProperty('watchedepisodes', str(total_watched))
                listitem.setProperty('unwatchedepisodes', str(total_unwatched))
                listitem.setProperty('totalepisodes', str(aired_episodes))
                listitem.setProperty('totalseasons', str(meta['number_of_seasons']))
                listitem.addContextMenuItems(cm)
                listitem.setArt({'poster': meta['poster'],
                                'fanart': meta['fanart'],
                                'banner': meta['banner'],
                                'clearart': meta['clearart'],
                                'clearlogo': meta['clearlogo'],
                                'landscape': meta['landscape']})
                listitem.setCast(meta['cast'])
                listitem.setInfo(
                    'video', {
                        'title': meta['title'], 'size': '0', 'duration': meta['duration'],
                        'plot': meta['plot'], 'rating': meta['rating'], 'premiered': meta['premiered'],
                        'studio': meta['studio'],'year': meta['year'],
                        'genre': meta['genre'],'imdbnumber': meta['imdb_id'], 'votes': meta['votes'],
                        'playcount': playcount, 'overlay': overlay})
                xbmcplugin.addDirectoryItem(__handle__, url, listitem, isFolder=True)
            except: pass
        xbmcplugin.setContent(__handle__, 'tvshows')
        xbmcplugin.endOfDirectory(__handle__, cacheToDisc=False)
        setView(VIEW_NEM)
Exemple #22
0
def get_watched_items(db_type, page_no, letter, passed_list=[]):
    import ast
    from resources.lib.modules.nav_utils import paginate_list
    from resources.lib.modules.utils import title_key, to_utf8
    watched_indicators = settings.watched_indicators()
    limit = 40
    if db_type == 'tvshow':
        from resources.lib.indexers.tvshows import aired_episode_number_tvshow
        if watched_indicators in (1, 2):
            if not passed_list:
                from resources.lib.modules.trakt import trakt_indicators_tv
                data = trakt_indicators_tv()
                data = sorted(data, key=lambda tup: title_key(tup[3]))
                original_list = [{
                    'media_id': i[0],
                    'title': i[3]
                } for i in data if i[1] == len(i[2])]
            else:
                original_list = ast.literal_eval(passed_list)
        else:
            if not passed_list:
                from resources.lib.indexers.tvshows import make_fresh_tvshow_meta
                settings.check_database(WATCHED_DB)
                dbcon = database.connect(WATCHED_DB)
                dbcur = dbcon.cursor()
                dbcur.execute(
                    "SELECT media_id, title FROM watched_status WHERE db_type = ?",
                    ('episode', ))
                rows = dbcur.fetchall()
                dbcon.close()
                watched_list = list(set(to_utf8([(i[0], i[1]) for i in rows])))
                data = []
                for item in watched_list:
                    watched = get_watched_status_tvshow(
                        item[0],
                        aired_episode_number_tvshow(
                            make_fresh_tvshow_meta('tmdb_id', item[0])))
                    if watched[0] == 1: data.append(item)
                    else: pass
                data = sorted(data, key=lambda tup: title_key(tup[1]))
                original_list = [{
                    'media_id': i[0],
                    'title': i[1]
                } for i in data]
            else:
                original_list = ast.literal_eval(passed_list)
    else:
        if watched_indicators in (1, 2):
            if not passed_list:
                from resources.lib.modules.trakt import trakt_indicators_movies
                data = trakt_indicators_movies()
                data = sorted(data, key=lambda tup: title_key(tup[1]))
                original_list = [{
                    'media_id': i[0],
                    'title': i[1]
                } for i in data]
            else:
                original_list = ast.literal_eval(passed_list)

        else:
            if not passed_list:
                settings.check_database(WATCHED_DB)
                dbcon = database.connect(WATCHED_DB)
                dbcur = dbcon.cursor()
                dbcur.execute(
                    "SELECT media_id, title FROM watched_status WHERE db_type = ?",
                    (db_type, ))
                rows = dbcur.fetchall()
                dbcon.close()
                data = to_utf8([(i[0], i[1]) for i in rows])
                data = sorted(data, key=lambda tup: title_key(tup[1]))
                original_list = [{
                    'media_id': i[0],
                    'title': i[1]
                } for i in data]
            else:
                original_list = ast.literal_eval(passed_list)
    paginated_list, total_pages = paginate_list(original_list, page_no, letter,
                                                limit)
    return paginated_list, original_list, total_pages, limit