Exemplo n.º 1
0
def retrieve_kodi_library(db_type, page_no, letter):
    from modules.utils import title_key, to_utf8
    from modules.nav_utils import paginate_list
    from settings import paginate, page_limit
    paginate = paginate()
    limit = page_limit()
    if db_type in ('movie', 'movies'):
        db_type = 'movies'
        JSON_req = '{"jsonrpc": "2.0", "method": "VideoLibrary.GetMovies", \
        "params": {"properties": ["title", "imdbnumber"]},"id": "1"}'

    elif db_type in ('tvshow', 'tvshows'):
        db_type = 'tvshows'
        JSON_req = '{"jsonrpc": "2.0", "method": "VideoLibrary.GetTvShows", \
        "params": {"properties": ["title","imdbnumber","uniqueid"]}, "id": "1"}'

    r = xbmc.executeJSONRPC(JSON_req)
    r = to_utf8(json.loads(r)['result'][db_type])
    r = sorted(r, key=lambda k: title_key(k['title']))
    original_list = [{
        'title': i.get('title', None),
        'media_id': i.get('imdbnumber', None)
    } for i in r] if db_type == 'movies' else [{
        'title':
        i.get('title', None),
        'media_id':
        i['uniqueid']['tvdb'] if 'uniqueid' in i and 'tvdb' in i['uniqueid']
        else i['imdbnumber'] if i['imdbnumber'].startswith("tt") else None
    } for i in r]
    if paginate:
        final_list, total_pages = paginate_list(original_list, page_no, letter,
                                                limit)
    else:
        final_list, total_pages = original_list, 1
    return final_list, total_pages
Exemplo n.º 2
0
def get_in_progress_tvshows(dummy_arg, page_no, letter):
    def _process(item):
        tmdb_id = item['media_id']
        meta = metadata.tvshow_meta('tmdb_id', tmdb_id, meta_user_info)
        watched_status = get_watched_status_tvshow(watched_info, tmdb_id,
                                                   meta.get('total_aired_eps'))
        if watched_status[0] == 0: append(item)

    check_trakt_refresh()
    duplicates = set()
    data = []
    append = data.append
    watched_indicators = settings.watched_indicators()
    paginate = settings.paginate()
    limit = settings.page_limit()
    meta_user_info = metadata.retrieve_user_info()
    watched_info = get_watched_info_tv(watched_indicators)
    prelim_data = [{
        'media_id': i[0],
        'title': i[3]
    } for i in watched_info
                   if not (i[0] in duplicates or duplicates.add(i[0]))]
    threads = list(make_thread_list(_process, prelim_data, Thread))
    [i.join() for i in threads]
    original_list = sort_for_article(data, 'title', settings.ignore_articles())
    if paginate:
        final_list, total_pages = paginate_list(original_list, page_no, letter,
                                                limit)
    else:
        final_list, total_pages = original_list, 1
    return final_list, total_pages
Exemplo n.º 3
0
def retrieve_favourites(db_type, page_no, letter):
	paginate = settings.paginate()
	limit = settings.page_limit()
	data = Favourites({}).get_favourites(db_type)
	data = sort_for_article(data, 'title', settings.ignore_articles())
	original_list = [{'media_id': i['tmdb_id'], 'title': i['title']} for i in data]
	if paginate: final_list, total_pages = paginate_list(original_list, page_no, letter, limit)
	else: final_list, total_pages = original_list, 1
	return final_list, total_pages
Exemplo n.º 4
0
def build_trakt_list(params):
	def _process_ids(item_position, item):
		item['media_id'] = trakt_api.get_trakt_movie_id(item['media_ids']) if item['media_type'] == 'movie' else trakt_api.get_trakt_tvshow_id(item['media_ids'])
		final_append((item_position, item))
	def _add_misc_dir(url_params, list_name=ls(32799), iconImage='item_next.png', isFolder=True):
		icon = kodi_utils.translate_path('special://home/addons/script.tikiart/resources/media/%s' % iconImage)
		listitem = make_listitem()
		listitem.setLabel(list_name)
		listitem.setArt({'icon': icon, 'poster': icon, 'thumb': icon, 'fanart': fanart, 'banner': icon})
		if url_params['mode'] == 'build_navigate_to_page':
			listitem.setProperty('SpecialSort', 'top')
			listitem.addContextMenuItems([(ls(32784),'RunPlugin(%s)' % build_url({'mode': 'toggle_jump_to'}))])
		else:
			listitem.setProperty('SpecialSort', 'bottom')
		kodi_utils.add_item(__handle__, build_url(url_params), listitem, isFolder)
	__handle__ = int(argv[1])
	is_widget = kodi_utils.external_browse()
	user, slug, list_type = params.get('user'), params.get('slug'), params.get('list_type')
	letter, page_no = params.get('new_letter', 'None'), int(params.get('new_page', '1'))
	original_list, final_list, final_listitems = [], [], []
	original_append, final_append = original_list.append, final_list.append
	result = trakt_api.get_trakt_list_contents(list_type, user, slug)
	for item in result:
		try:
			media_type = item['type']
			if not media_type in ('movie', 'show'): continue
			original_append({'media_type': media_type, 'title': item[media_type]['title'], 'media_ids': item[media_type]['ids']})
		except: pass
	if paginate():
		limit = page_limit()
		trakt_list, total_pages = paginate_list(original_list, page_no, letter, limit)
	else:
		trakt_list, total_pages = original_list, 1
	threads = list(make_thread_list_enumerate(_process_ids, trakt_list, Thread))
	[i.join() for i in threads]
	final_list.sort(key=lambda k: k[0])
	final_list = [i[1] for i in final_list]
	movie_list = [(i['media_id'], final_list.index(i), 'movie') for i in final_list if i['media_type'] == 'movie']
	tvshow_list = [(i['media_id'], final_list.index(i), 'tvshow') for i in final_list if i['media_type'] == 'show']
	content = 'movies' if len(movie_list) > len(tvshow_list) else 'tvshows'
	if total_pages > 2 and not is_widget:
		_add_misc_dir({'mode': 'build_navigate_to_page', 'db_type': 'Media', 'user': user, 'slug': slug, 'current_page': page_no, 'total_pages': total_pages,
						'transfer_mode': 'trakt.list.build_trakt_list'}, ls(32964), 'item_jump.png', False)
	if len(movie_list) > 0:
		movie_listitems = Movies({'list': [i[0] for i in movie_list]}).worker()
		final_listitems.extend([(i, x[1]) for i in movie_listitems for x in movie_list if [str(x[0]) == i[1].getUniqueID('tmdb') and x[2] == 'movie'][0]])
	if len(tvshow_list) > 0:
		tvshow_listitems = TVShows({'list': [i[0] for i in tvshow_list]}).worker()
		final_listitems.extend([(i, x[1]) for i in tvshow_listitems for x in tvshow_list if [str(x[0]) == i[1].getUniqueID('tmdb') and x[2] == 'tvshow'][0]])
	final_listitems.sort(key=lambda k: k[1])
	item_list = [i[0] for i in final_listitems]
	kodi_utils.add_items(__handle__, item_list)
	if total_pages > page_no: _add_misc_dir({'mode': 'trakt.list.build_trakt_list', 'user': user, 'slug': slug, 'new_page': str(page_no + 1), 'new_letter': letter})
	kodi_utils.set_content(__handle__, content)
	kodi_utils.end_directory(__handle__)
	if params.get('refreshed'): kodi_utils.sleep(1500)
	kodi_utils.set_view_mode('view.trakt_list', content)
Exemplo n.º 5
0
def retrieve_subscriptions(db_type, page_no, letter):
    from modules.nav_utils import paginate_list
    from modules.utils import title_key
    paginate = settings.paginate()
    limit = settings.page_limit()
    data = Subscriptions(db_type).get_subscriptions()
    original_list = sorted(data, key=lambda k: title_key(k['title']))
    if paginate:
        final_list, total_pages = paginate_list(original_list, page_no, letter,
                                                limit)
    else:
        final_list, total_pages = original_list, 1
    return final_list, total_pages
Exemplo n.º 6
0
def trakt_watchlist(db_type, page_no, letter):
    string_insert = 'movie' if db_type in ('movie', 'movies') else 'tvshow'
    original_list = trakt_fetch_collection_watchlist('watchlist', db_type)
    if settings.paginate():
        limit = settings.page_limit()
        final_list, total_pages = paginate_list(original_list, page_no, letter,
                                                limit)
    else:
        final_list, total_pages = original_list, 1
    for item in final_list:
        item['media_id'] = get_trakt_movie_id(
            item['media_ids']) if db_type == 'movies' else get_trakt_tvshow_id(
                item['media_ids'])
    return final_list, total_pages
Exemplo n.º 7
0
def trakt_movies_search(query, page_no, letter):
    from modules.history import add_to_search_history
    add_to_search_history(query, 'movie_queries')
    string = 'trakt_movies_search_%s_%s' % (query, page_no)
    url = {
        'path': 'search/movie?query=%s',
        'path_insert': query,
        'params': {
            'limit': 200
        },
        'page': page_no
    }
    original_list = cache_object(get_trakt, string, url, False)
    final_list, total_pages = paginate_list(original_list, page_no, letter)
    return final_list, total_pages
Exemplo n.º 8
0
def trakt_tv_related(imdb_id, page_no, letter='None'):
    string = 'trakt_tv_related_%s' % imdb_id
    url = {
        'path': 'shows/%s/related',
        'path_insert': imdb_id,
        'params': {
            'limit': 100
        }
    }
    original_list = cache_object(get_trakt,
                                 string,
                                 url,
                                 json=False,
                                 expiration=48)
    paginated_list, total_pages = paginate_list(original_list, page_no, letter)
    return paginated_list, total_pages
Exemplo n.º 9
0
def in_progress_tvshow(db_type, page_no, letter):
    from modules.utils import title_key
    from modules.nav_utils import paginate_list
    paginate = settings.paginate()
    limit = settings.page_limit()
    check_meta_database()
    if settings.watched_indicators() in (1, 2):
        from apis.trakt_api import trakt_indicators_tv
        items = trakt_indicators_tv()
        data = [(i[0], i[3]) for i in items if i[1] > len(i[2])]
    else:
        from modules.indicators_bookmarks import get_watched_status_tvshow, get_watched_info_tv

        def _process(item):
            meta = tvshow_meta('tmdb_id', item[0], meta_user_info)
            watched_status = get_watched_status_tvshow(
                watched_info, use_trakt, meta['tmdb_id'],
                meta.get('total_episodes'))
            if not watched_status[0] == 1: data.append(item)

        data = []
        threads = []
        settings.check_database(WATCHED_DB)
        dbcon = database.connect(WATCHED_DB)
        dbcur = dbcon.cursor()
        dbcur.execute(
            '''SELECT media_id, title, last_played FROM watched_status WHERE db_type=? ORDER BY rowid DESC''',
            ('episode', ))
        rows1 = dbcur.fetchall()
        in_progress_result = list(set([i for i in rows1]))
        watched_info, use_trakt = get_watched_info_tv()
        meta_user_info = retrieve_user_info()
        window.setProperty('fen_fanart_error', 'true')
        for item in in_progress_result:
            threads.append(Thread(target=_process, args=(item, )))
        [i.start() for i in threads]
        [i.join() for i in threads]
    data = sorted(data, key=lambda k: title_key(k[1]))
    original_list = [{'media_id': i[0]} for i in data]
    if paginate:
        final_list, total_pages = paginate_list(original_list, page_no, letter,
                                                limit)
    else:
        final_list, total_pages = original_list, 1
    return final_list, total_pages
Exemplo n.º 10
0
def retrieve_favourites(db_type, page_no, letter):
    from modules.nav_utils import paginate_list
    from modules.utils import title_key
    from modules.settings import paginate, page_limit
    paginate = paginate()
    limit = page_limit()
    data = Favourites().get_favourites(db_type)
    data = sorted(data, key=lambda k: title_key(k['title']))
    original_list = [{
        'media_id': i['tmdb_id'],
        'title': i['title']
    } for i in data]
    if paginate:
        final_list, total_pages = paginate_list(original_list, page_no, letter,
                                                limit)
    else:
        final_list, total_pages = original_list, 1
    return final_list, total_pages
Exemplo n.º 11
0
def in_progress_movie(db_type, page_no, letter):
    from modules.nav_utils import paginate_list
    paginate = settings.paginate()
    limit = settings.page_limit()
    settings.check_database(WATCHED_DB)
    dbcon = database.connect(WATCHED_DB)
    dbcur = dbcon.cursor()
    dbcur.execute(
        '''SELECT media_id FROM progress WHERE db_type=? ORDER BY rowid DESC''',
        ('movie', ))
    rows = dbcur.fetchall()
    data = [i[0] for i in rows if not i[0] == '']
    original_list = [{'media_id': i} for i in data]
    if paginate:
        final_list, total_pages = paginate_list(original_list, page_no, letter,
                                                limit)
    else:
        final_list, total_pages = original_list, 1
    return final_list, total_pages
Exemplo n.º 12
0
def get_in_progress_movies(dummy_arg, page_no, letter):
    check_trakt_refresh()
    watched_indicators = settings.watched_indicators()
    paginate = settings.paginate()
    limit = settings.page_limit()
    if watched_indicators == 1: database_file = TRAKT_DB
    else: database_file = WATCHED_DB
    dbcon = database.connect(database_file)
    dbcur = dbcon.cursor()
    dbcur.execute(
        '''SELECT media_id FROM progress WHERE db_type=? ORDER BY rowid DESC''',
        ('movie', ))
    rows = dbcur.fetchall()
    data = reversed([i[0] for i in rows if not i[0] == ''])
    original_list = [{'media_id': i} for i in data]
    if paginate:
        final_list, total_pages = paginate_list(original_list, page_no, letter,
                                                limit)
    else:
        final_list, total_pages = original_list, 1
    return final_list, total_pages
Exemplo n.º 13
0
def get_watched_items(db_type, page_no, letter):
    paginate = settings.paginate()
    limit = settings.page_limit()
    watched_indicators = settings.watched_indicators()
    if db_type == 'tvshow':
        from threading import Thread
        from modules.utils import make_thread_list

        def _process(item):
            tmdb_id = item['media_id']
            meta = metadata.tvshow_meta('tmdb_id', tmdb_id, meta_user_info)
            watched_status = get_watched_status_tvshow(
                watched_info, tmdb_id, meta.get('total_aired_eps'))
            if watched_status[0] == 1: append(item)

        meta_user_info = metadata.retrieve_user_info()
        watched_info = get_watched_info_tv(watched_indicators)
        duplicates = set()
        data = []
        append = data.append
        prelim_data = [{
            'media_id': i[0],
            'title': i[3]
        } for i in watched_info
                       if not (i[0] in duplicates or duplicates.add(i[0]))]
        threads = list(make_thread_list(_process, prelim_data, Thread))
        [i.join() for i in threads]
        original_list = sort_for_article(data, 'title',
                                         settings.ignore_articles())
    else:
        watched_info = get_watched_info_movie(watched_indicators)
        data = [{'media_id': i[0], 'title': i[1]} for i in watched_info]
        original_list = sort_for_article(data, 'title',
                                         settings.ignore_articles())
    if paginate:
        final_list, total_pages = paginate_list(original_list, page_no, letter,
                                                limit)
    else:
        final_list, total_pages = original_list, 1
    return final_list, total_pages
Exemplo n.º 14
0
 def media_results(self, media_type, page_no, letter):
     from indexers.movies import Movies
     from indexers.tvshows import TVShows
     from modules.nav_utils import paginate_list, cached_page
     from modules.utils import title_key
     def _add_misc_dir(url_params, list_name='Next Page >>', info='Navigate to Next Page...', iconImage='item_next.png'):
         listitem = xbmcgui.ListItem(list_name, iconImage=os.path.join(icon_directory, iconImage))
         listitem.setArt({'fanart': __addon__.getAddonInfo('fanart')})
         listitem.setInfo('video', {'title': list_name, 'plot': info})
         if url_params['mode'] == 'build_navigate_to_page': listitem.addContextMenuItems([("[B]Switch Jump To Action[/B]","XBMC.RunPlugin(%s)" % build_url({'mode': 'toggle_jump_to'}))])
         xbmcplugin.addDirectoryItem(handle=__handle__, url=build_url(url_params), listitem=listitem, isFolder=True)
     not_widget = xbmc.getInfoLabel('Container.PluginName')
     cache_page = settings.cache_page()
     cache_page_string = 'people_search_%s_%s' % (media_type, self.actor_id)
     limit = 20
     if cache_page:
         if not 'new_page' in params:
             silent = False if not_widget else True
             retrieved_page = cached_page(cache_page_string, silent=silent)
             if retrieved_page: page_no = retrieved_page
     try:
         builder = Movies if media_type == 'movies' else TVShows
         function = TMDb.tmdb_movies_actor_roles if media_type == 'movies' else TMDb.tmdb_tv_actor_roles
         content = 'movies' if media_type == 'movies' else 'tvshows'
         key = 'title' if media_type == 'movies' else 'name'
         result = function(self.actor_id)
         data = sorted(result, key=lambda k: title_key(k[key]))
         original_list = [{'media_id': i['id'], 'title': i[key]} for i in data]
         paginated_list, total_pages = paginate_list(original_list, page_no, letter, limit)
         media_list = [i['media_id'] for i in paginated_list]
         if total_pages > 2 and not_widget: _add_misc_dir({'mode': 'build_navigate_to_page', 'db_type': 'Media', 'media_type': media_type, 'actor_id': self.actor_id, 'actor_name': self.actor_name, 'actor_image': self.actor_image, 'current_page': page_no, 'total_pages': total_pages, 'transfer_mode': 'people_search.media_results'}, 'Jump To...', 'Jump To a Certain Page/Letter...', 'item_jump.png')
         builder(media_list, action='people_search_%s' % media_type).worker()
         if total_pages > page_no: _add_misc_dir({'mode': 'people_search.media_results', 'media_type': media_type, 'actor_id': self.actor_id, 'actor_name': self.actor_name, 'actor_image': self.actor_image, 'new_page': str(page_no + 1), 'new_letter': letter})
         if cache_page: cached_page(cache_page_string, page_no=page_no)
         xbmcplugin.setContent(__handle__, content)
         xbmcplugin.endOfDirectory(__handle__)
         setView('view.%s' % content, content)
     except: notification('No Results', 3000)
Exemplo n.º 15
0
def get_watched_items(db_type, page_no, letter):
    from modules.nav_utils import paginate_list
    from modules.utils import title_key, to_utf8
    watched_indicators = settings.watched_indicators()
    paginate = settings.paginate()
    limit = settings.page_limit()
    if db_type == 'tvshow':
        if watched_indicators in (1, 2):
            from apis.trakt_api 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:
            import tikimeta
            meta_user_info = tikimeta.retrieve_user_info()
            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])))
            watched_info, use_trakt = get_watched_info_tv()
            data = []
            for item in watched_list:
                meta = tikimeta.tvshow_meta('tmdb_id', item[0], meta_user_info)
                watched = get_watched_status_tvshow(watched_info, use_trakt,
                                                    item[0],
                                                    meta.get('total_episodes'))
                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:
        if watched_indicators in (1, 2):
            from apis.trakt_api 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:
            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]
    if paginate:
        final_list, total_pages = paginate_list(original_list, page_no, letter,
                                                limit)
    else:
        final_list, total_pages = original_list, 1
    return final_list, total_pages