def build_navigate_to_page(): import xbmcgui import json import ast from urlparse import parse_qsl from resources.lib.modules.settings import get_theme, nav_jump_use_alphabet use_alphabet = nav_jump_use_alphabet() params = dict(parse_qsl(sys.argv[2].replace('?', ''))) if use_alphabet: start_list = [chr(i) for i in range(97, 123)] choice_list = [ xbmcgui.ListItem(i.upper(), "[I]Jump to %s Starting with '%s'[/I]" % (params.get('db_type'), i.upper()), iconImage=os.path.join(get_theme(), 'item_jump.png')) for i in start_list ] else: start_list = [ str(i) for i in range(1, int(params.get('total_pages')) + 1) ] start_list.remove(params.get('current_page')) choice_list = [ xbmcgui.ListItem('Page %s' % i, '[I]Jump to Page %s[/I]' % i, iconImage=os.path.join(get_theme(), 'item_jump.png')) for i in start_list ] chosen_start = xbmcgui.Dialog().select('Fen', choice_list, useDetails=True) xbmc.sleep(500) if chosen_start < 0: return new_start = start_list[chosen_start] if use_alphabet: new_page = '' new_letter = new_start else: new_page = new_start new_letter = None final_params = { 'mode': params.get('transfer_mode', ''), 'action': params.get('transfer_action', ''), 'new_page': new_page, 'new_letter': new_letter, 'passed_list': params.get('passed_list', ''), 'query': params.get('query', ''), 'actor_id': params.get('actor_id', '') } url_params = { 'mode': 'container_update', 'final_params': json.dumps(final_params) } xbmc.executebuiltin('XBMC.RunPlugin(%s)' % build_url(url_params))
def search_history(): import xbmc, xbmcgui, xbmcplugin import sys, os from urlparse import parse_qsl import urllib from resources.lib.modules.nav_utils import build_url, setView from resources.lib.modules.settings import get_theme try: params = dict(parse_qsl(sys.argv[2].replace('?', ''))) (search_setting, display_title) = ('movie_queries', 'MOVIE') if params['action'] == 'movie' else ('tvshow_queries', 'TVSHOW') if params['action'] == 'tvshow' \ else ('furk_video_queries', 'FURK VIDEO') if params['action'] == 'furk_video' else ('furk_audio_queries', 'FURK AUDIO') if params['action'] == 'furk_audio' \ else ('easynews_video_queries', 'EASYNEWS VIDEO') if params['action'] == 'easynews_video' else '' history = _cache.get(search_setting) if not history: return except: return for h in history: try: cm = [] name = urllib.unquote(h) url_params = {'mode': 'build_movie_list', 'action': 'tmdb_movies_search', 'query': name} if params['action'] == 'movie' \ else {'mode': 'build_tvshow_list', 'action': 'tmdb_tv_search', 'query': name} if params['action'] == 'tvshow' \ else {'mode': 'furk.search_furk', 'db_type': 'video', 'query': name} if params['action'] == 'furk_video' \ else {'mode': 'furk.search_furk', 'db_type': 'audio', 'music': True, 'query': name} if params['action'] == 'furk_audio' \ else {'mode': 'easynews.search_easynews', 'query': name} if params['action'] == 'easynews_video' \ else '' display = '[B]%s SEARCH : [/B]' % display_title + name url = build_url(url_params) cm.append(("[B]Remove from history[/B]",'XBMC.RunPlugin(%s?mode=%s&setting_id=%s&name=%s)' \ % (sys.argv[0], 'remove_from_history', search_setting, name))) listitem = xbmcgui.ListItem(display, iconImage=os.path.join( get_theme(), 'search.png')) listitem.setArt({ 'fanart': os.path.join( xbmc.translatePath(__addon__.getAddonInfo('path')), 'fanart.png') }) listitem.setInfo(type='video', infoLabels={'Title': name}) listitem.addContextMenuItems(cm) xbmcplugin.addDirectoryItem(int(sys.argv[1]), url, listitem, isFolder=True) except: pass xbmcplugin.setContent(int(sys.argv[1]), 'files') xbmcplugin.endOfDirectory(int(sys.argv[1])) setView('view.main')
def add_dir(url_params, list_name, iconImage='DefaultFolder.png', fanartImage=None, isFolder=True): import xbmcgui, xbmcplugin from resources.lib.modules.settings import get_theme icon = os.path.join(get_theme(), iconImage) fanArt = fanart if fanartImage == None else fanartImage info = url_params.get('info', '') url = build_url(url_params) listitem = xbmcgui.ListItem(list_name, iconImage=icon) listitem.setArt({'fanart': fanArt}) listitem.setInfo('video', {'title': list_name, 'plot': info}) xbmcplugin.addDirectoryItem(handle=__handle__, url=url, listitem=listitem, isFolder=isFolder)
def add_dir(self, url_params, list_name='Next Page >>', info='Navigate to Next Page...', iconImage='item_next.png'): icon = os.path.join(settings.get_theme(), iconImage) url = build_url(url_params) listitem = xbmcgui.ListItem(list_name, iconImage=icon) 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=url, listitem=listitem, isFolder=True)
def multiselect_genres(self, genre_list): import os genre_list = json.loads(genre_list) choice_list = [] icon_directory = settings.get_theme() for genre, value in sorted(genre_list.items()): listitem = xbmcgui.ListItem(genre, '', iconImage=os.path.join( icon_directory, value[1])) listitem.setProperty('genre_id', value[0]) choice_list.append(listitem) chosen_genres = dialog.multiselect( "Select Genres to Include in Search", choice_list, useDetails=True) if not chosen_genres: return genre_ids = [ choice_list[i].getProperty('genre_id') for i in chosen_genres ] return ','.join(genre_ids)
def fetch_list(self): try: params = dict(parse_qsl(sys.argv[2].replace('?', ''))) worker = True mode = params.get('mode') page_no = int(params.get('new_page', 1)) letter = params.get('new_letter', 'None') search_name = '' content_type = 'movies' var_module = 'tmdb' if 'tmdb' in self.action else 'trakt' if 'trakt' in self.action else 'imdb' if 'imdb' in self.action else '' try: exec('from resources.lib.modules.%s import %s as function' % (var_module, self.action)) except: pass if self.action in ('tmdb_movies_popular', 'tmdb_movies_blockbusters', 'tmdb_movies_in_theaters', 'tmdb_movies_top_rated', 'tmdb_movies_upcoming', 'tmdb_movies_latest_releases', 'tmdb_movies_premieres', 'trakt_movies_trending', 'trakt_movies_anticipated', 'trakt_movies_top10_boxoffice'): data = function(page_no) if 'tmdb' in self.action: for item in data['results']: self.list.append(item['id']) else: for item in data: self.list.append(get_trakt_movie_id(item)) if self.action not in ('trakt_movies_top10_boxoffice'): self.new_page = { 'mode': mode, 'action': self.action, 'new_page': str((data['page'] if 'tmdb' in self.action else page_no ) + 1), 'foldername': self.action } elif self.action in ('trakt_collection', 'trakt_watchlist'): data, passed_list, total_pages, limit = function( 'movies', page_no, letter, params.get('passed_list', '')) self.list = [i['media_id'] for i in data] if total_pages > 1: self.total_pages = total_pages if len(data) == limit: self.new_page = { 'mode': mode, 'action': self.action, 'new_page': str(page_no + 1), 'new_letter': letter, 'passed_list': passed_list, 'foldername': self.action } elif self.action == 'imdb_movies_oscar_winners': self.id_type = 'imdb_id' self.list = function(page_no) self.new_page = { 'mode': mode, 'action': self.action, 'new_page': str(page_no + 1), 'foldername': self.action } elif self.action == ('trakt_movies_mosts'): for item in (function(params['period'], params['duration'], page_no)): self.list.append(get_trakt_movie_id(item)) self.new_page = { 'mode': mode, 'action': self.action, 'period': params['period'], 'duration': params['duration'], 'new_page': str(page_no + 1), 'foldername': self.action } elif self.action == 'tmdb_movies_genres': genre_id = params[ 'genre_id'] if 'genre_id' in params else self.multiselect_genres( params.get('genre_list')) if not genre_id: return data = function(genre_id, page_no) self.list = [i['id'] for i in data['results']] if data['page'] < data['total_pages']: self.new_page = { 'mode': mode, 'action': self.action, 'new_page': str(data['page'] + 1), 'genre_id': genre_id, 'foldername': genre_id } elif self.action == 'tmdb_movies_languages': language = params['language'] if not language: return data = function(language, page_no) self.list = [i['id'] for i in data['results']] if data['page'] < data['total_pages']: self.new_page = { 'mode': mode, 'action': self.action, 'new_page': str(data['page'] + 1), 'language': language, 'foldername': language } elif self.action == 'tmdb_movies_year': data = function(params['year'], page_no) self.list = [i['id'] for i in data['results']] if data['page'] < data['total_pages']: self.new_page = { 'mode': mode, 'action': self.action, 'new_page': str(data['page'] + 1), 'year': params.get('year'), 'foldername': params.get('year') } elif self.action == 'tmdb_movies_certifications': data = function(params['certification'], page_no) self.list = [i['id'] for i in data['results']] if data['page'] < data['total_pages']: self.new_page = { 'mode': mode, 'action': self.action, 'new_page': str(data['page'] + 1), 'certification': params.get('certification'), 'foldername': params.get('certification') } elif self.action in ('favourites_movies', 'subscriptions_movies', 'kodi_library_movies', 'watched_movies'): (var_module, import_function) = ( 'favourites', 'retrieve_favourites' ) if 'favourites' in self.action else ( 'subscriptions', 'retrieve_subscriptions' ) if 'subscriptions' in self.action else ( 'indicators_bookmarks', 'get_watched_items') if 'watched' in self.action else ( 'kodi_library', 'retrieve_kodi_library' ) if 'library' in self.action else '' try: exec( 'from resources.lib.modules.%s import %s as function' % (var_module, import_function)) except: return if self.action == 'kodi_library_movies': self.id_type = 'imdb_id' data, passed_list, total_pages, limit = function( 'movie', page_no, letter, params.get('passed_list', '')) self.list = [i['media_id'] for i in data] if total_pages > 1: self.total_pages = total_pages if len(data) == limit: self.new_page = { 'mode': mode, 'action': self.action, 'new_page': str(page_no + 1), 'new_letter': letter, 'passed_list': passed_list, 'foldername': self.action } elif self.action == 'in_progress_movies': from resources.lib.modules.in_progress import in_progress_movie as function self.list = function('movie') xbmcplugin.addSortMethod( __handle__, xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE) elif self.action == 'tmdb_movies_similar': data = function(params['tmdb_id'], page_no) self.list = [i['id'] for i in data['results']] if data['page'] < data['total_pages']: self.new_page = { 'mode': mode, 'action': self.action, 'new_page': str(data['page'] + 1), 'foldername': self.action, 'tmdb_id': params.get('tmdb_id') } elif self.action == 'trakt_movies_related': for item in function(params['imdb_id'], page_no): self.list.append(get_trakt_movie_id(item)) self.new_page = { 'mode': mode, 'action': self.action, 'new_page': str( int((params.get('new_page') if 'new_page' in params else 1)) + 1), 'foldername': self.action, 'imdb_id': params.get('imdb_id') } elif self.action == 'trakt_recommendations': for item in function('movies'): self.list.append(item['ids']['tmdb']) elif self.action == 'tmdb_popular_people': import os worker = False icon_directory = settings.get_theme() data = function(page_no) for item in data['results']: cm = [] actor_poster = "http://image.tmdb.org/t/p/original%s" % item[ 'profile_path'] if item[ 'profile_path'] else os.path.join( icon_directory, 'app_logo.png') url_params = { 'mode': 'build_movie_list', 'action': 'tmdb_movies_actor_roles', 'actor_id': item['id'] } url = build_url(url_params) cm.append(( "[B]Extended Info[/B]", 'RunScript(script.extendedinfo,info=extendedactorinfo,id=%s)' % item['id'])) listitem = xbmcgui.ListItem(item['name']) listitem.setArt({ 'poster': actor_poster, 'fanart': __addon__.getAddonInfo('fanart') }) listitem.addContextMenuItems(cm) xbmcplugin.addDirectoryItem(__handle__, url, listitem, isFolder=True) if data['page'] < data['total_pages']: self.new_page = { 'mode': mode, 'action': self.action, 'new_page': str(int(data['page']) + 1), 'foldername': self.action } elif self.action == 'tmdb_movies_actor_roles': data, passed_list, total_pages, limit = function( params['actor_id'], page_no, letter, params.get('passed_list', '')) self.list = [i['media_id'] for i in data] if total_pages > 1: self.total_pages = total_pages if len(data) == limit: self.new_page = { 'mode': mode, 'action': self.action, 'new_page': str(page_no + 1), 'new_letter': letter, 'passed_list': passed_list, 'actor_id': params['actor_id'], 'foldername': self.action } elif self.action in ('tmdb_movies_search', 'tmdb_movies_people_search'): import urllib if params.get('query') == 'NA': search_title = dialog.input("Search Fen", type=xbmcgui.INPUT_ALPHANUM) search_name = urllib.unquote(search_title) else: search_name = urllib.unquote(params.get('query')) if not search_name: return if self.action == 'tmdb_movies_people_search': data, passed_list, total_pages, limit = function( search_name, page_no, letter, params.get('passed_list', '')) if total_pages > 1: self.total_pages = total_pages if len(data) == limit: self.new_page = { 'mode': mode, 'action': self.action, 'new_page': str(page_no + 1), 'new_letter': letter, 'passed_list': passed_list, 'query': search_name, 'foldername': search_name } else: data = function(search_name, page_no) if self.action == 'tmdb_movies_search': if data['page'] < data['total_pages']: self.new_page = { 'mode': mode, 'action': self.action, 'new_page': str(int(data['page']) + 1), 'query': search_name, 'foldername': search_name } self.list = [i['id'] for i in data['results'] ] if self.action == 'tmdb_movies_search' else [ i['media_id'] for i in data ] if self.total_pages: url_params = { 'mode': 'build_navigate_to_page', 'db_type': 'Movies', 'current_page': page_no, 'total_pages': self.total_pages, 'transfer_mode': mode, 'transfer_action': self.action, 'passed_list': passed_list, 'foldername': self.action, 'query': search_name, 'actor_id': params.get('actor_id', '') } self.add_dir(url_params, 'Jump To...', 'Jump To a Certain Page/Letter...', 'item_jump.png') if worker: self.worker() if self.new_page: self.add_dir(self.new_page) except: pass xbmcplugin.setContent(__handle__, content_type) xbmcplugin.endOfDirectory(__handle__) setView('view.movies')
import xbmc, xbmcaddon, xbmcplugin, xbmcgui import sys, os import urllib from urlparse import parse_qsl from resources.lib.modules.easynews_api import EasyNewsAPI from resources.lib.modules.settings import get_theme from resources.lib.modules.nav_utils import build_url, setView from resources.lib.modules.utils import clean_file_name # from resources.lib.modules.utils import logger __addon_id__ = 'plugin.video.fen' __addon__ = xbmcaddon.Addon(id=__addon_id__) __handle__ = int(sys.argv[1]) addon_dir = xbmc.translatePath(__addon__.getAddonInfo('path')) dialog = xbmcgui.Dialog() icon_directory = get_theme() default_easynews_icon = os.path.join(icon_directory, 'easynews.png') fanart = os.path.join(addon_dir, 'fanart.png') EasyNews = EasyNewsAPI() def search_easynews(): from resources.lib.modules.history import add_to_search_history params = dict(parse_qsl(sys.argv[2].replace('?',''))) default = params.get('suggestion', '') search_title = clean_file_name(params.get('query')) if ('query' in params and params.get('query') != 'NA') else None if not search_title: search_title = dialog.input('Enter search Term', type=xbmcgui.INPUT_ALPHANUM, defaultt=default) if not search_title: return try: search_name = clean_file_name(urllib.unquote(search_title)) add_to_search_history(search_name, 'easynews_video_queries')
import xbmc, xbmcaddon, xbmcplugin, xbmcgui import sys, os, json import urllib from urlparse import parse_qsl from resources.lib.modules.nav_utils import build_url, setView from resources.lib.modules.furk_api import FurkAPI from resources.lib.modules.utils import clean_file_name, to_utf8 from resources.lib.modules import settings # from resources.lib.modules.utils import logger __addon_id__ = 'plugin.video.fen' __addon__ = xbmcaddon.Addon(id=__addon_id__) __handle__ = int(sys.argv[1]) addon_dir = xbmc.translatePath(__addon__.getAddonInfo('path')) icon_directory = settings.get_theme() dialog = xbmcgui.Dialog() window = xbmcgui.Window(10000) default_furk_icon = os.path.join(icon_directory, 'furk.png') fanart = os.path.join(addon_dir, 'fanart.png') Furk = FurkAPI() def my_furk_files(): try: params = dict(parse_qsl(sys.argv[2].replace('?', ''))) files = eval('Furk.%s()' % params.get('list_type')) if params.get('list_type') in ('file_get_active', 'file_get_failed'): torrent_status_browser(files) else: furk_file_browser(files, params, display_mode='file_browse')
from resources.lib.modules.workers import Thread from resources.lib.sources.local_library import LocalLibrarySource from resources.lib.sources.downloads import DownloadsSource from resources.lib.modules.utils import clean_file_name, to_utf8 from resources.lib.indexers.furk import t_file_browser, seas_ep_query_list, add_uncached_file from resources.lib.modules.nav_utils import build_url, setView, close_all_dialog, \ show_busy_dialog, hide_busy_dialog from resources.lib.modules import settings import tikimeta # from resources.lib.modules.utils import logger __addon__ = xbmcaddon.Addon(id='plugin.video.fen') __handle__ = int(sys.argv[1]) window = xbmcgui.Window(10000) dialog = xbmcgui.Dialog() default_furk_icon = os.path.join(settings.get_theme(), 'furk.png') class Sources: def __init__(self): self.providers = [] self.sources = [] self.starting_providers = [] self.threads = [] def playback_prep(self, vid_type, tmdb_id, query, tvshowtitle=None, season=None, episode=None, ep_name=None, plot=None, meta=None, from_library=False, background='false'): self.background = True if background == 'true' else False self.from_library = from_library self.widget = False if 'plugin' in xbmc.getInfoLabel('Container.PluginName') else True self.action = 'XBMC.Container.Update(%s)' if not self.widget else 'XBMC.RunPlugin(%s)' self.use_dialog = True if self.from_library or self.widget else settings.use_dialog() self.autoplay = settings.auto_play()