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) listitem.setArt({'icon': icon, '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 playAudioAlbum(self, t_files=None, name=None, from_seperate=False): import os import xbmcaddon from modules.utils import clean_file_name, batch_replace, to_utf8 from modules.nav_utils import setView icon_directory = settings.get_theme() default_furk_icon = os.path.join(icon_directory, 'furk.png') formats = ('.3gp', ''), ('.aac', ''), ('.flac', ''), ('.m4a', ''), ('.mp3', ''), \ ('.ogg', ''), ('.raw', ''), ('.wav', ''), ('.wma', ''), ('.webm', ''), ('.ra', ''), ('.rm', '') params = dict(parse_qsl(sys.argv[2].replace('?', ''))) furk_files_list = [] playlist = xbmc.PlayList(xbmc.PLAYLIST_MUSIC) playlist.clear() if from_seperate: t_files = [ i for i in t_files if clean_file_name(i['path']) == params.get('item_path') ] for item in t_files: try: name = item['path'] if not name else name if not 'audio' in item['ct']: continue url = item['url_dl'] track_name = clean_file_name( batch_replace(to_utf8(item['name']), formats)) listitem = xbmcgui.ListItem(track_name) listitem.setThumbnailImage(default_furk_icon) listitem.setInfo(type='music', infoLabels={ 'title': track_name, 'size': int(item['size']), 'album': clean_file_name( batch_replace(to_utf8(name), formats)), 'duration': item['length'] }) listitem.setProperty('mimetype', 'audio/mpeg') playlist.add(url, listitem) if from_seperate: furk_files_list.append((url, listitem, False)) except: pass self.play(playlist) if from_seperate: xbmcplugin.addDirectoryItems(__handle__, furk_files_list, len(furk_files_list)) setView('view.furk_files') xbmcplugin.endOfDirectory(__handle__)
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) listitem.setArt({'icon': 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 add_dir(url_params, list_name, iconImage='DefaultFolder.png', fanartImage=__addon__.getAddonInfo('fanart'), isFolder=True): import xbmcgui, xbmcplugin from modules.settings import get_theme icon = os.path.join(get_theme(), iconImage) url = build_url(url_params) listitem = xbmcgui.ListItem(list_name) listitem.setArt({ 'icon': icon, 'poster': icon, 'thumb': icon, 'fanart': fanartImage, 'banner': icon }) xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=listitem, isFolder=isFolder)
import json try: from urlparse import parse_qsl except ImportError: from urllib.parse import parse_qsl from apis.alldebrid_api import AllDebridAPI from modules.settings import get_theme from modules.nav_utils import build_url, setView from modules.utils import clean_file_name, normalize, supported_video_extensions # from 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 = get_theme() default_ad_icon = os.path.join(icon_directory, 'alldebrid.png') fanart = os.path.join(addon_dir, 'fanart.png') dialog = xbmcgui.Dialog() AllDebrid = AllDebridAPI() def ad_torrent_cloud(folder_id=None): cloud_files = [] cloud_dict = AllDebrid.user_cloud() try: for k, v in cloud_dict.iteritems(): if isinstance(v, dict): cloud_files.append(v) except:
import xbmc, xbmcaddon, xbmcplugin, xbmcgui import sys, os, json import urllib try: from urlparse import parse_qsl except ImportError: from urllib.parse import parse_qsl from modules.nav_utils import build_url, setView from apis.furk_api import FurkAPI from modules.utils import clean_file_name, to_utf8 from modules import settings # from 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') except: pass
def build_navigate_to_page(): import xbmcgui import json import ast try: from urlparse import parse_qsl except ImportError: from urllib.parse import parse_qsl from 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, 'media_type': params.get('media_type', ''), 'query': params.get('query', ''), 'actor_id': params.get('actor_id', ''), 'user': params.get('user', ''), 'slug': params.get('slug', ''), 'final_params': params.get('final_params', ''), 'refreshed': 'true' } url_params = { 'mode': 'container_update', 'final_params': json.dumps(final_params) } xbmc.executebuiltin('XBMC.RunPlugin(%s)' % build_url(url_params))
def fetch_list(self): try: params = dict(parse_qsl(sys.argv[2].replace('?',''))) worker = True mode = params.get('mode') cache_page = settings.cache_page() try: page_no = int(params.get('new_page', '1')) except ValueError: page_no = params.get('new_page') if cache_page: if self.action == 'tmdb_tv_discover': self.cache_page_string = params['name'] if not 'new_page' in params: silent = True if is_widget else False retrieved_page = cached_page(self.cache_page_string, silent=silent) if retrieved_page: page_no = retrieved_page letter = params.get('new_letter', 'None') content_type = 'tvshows' var_module = 'tmdb_api' if 'tmdb' in self.action else 'trakt_api' if 'trakt' in self.action else 'imdb_api' if 'imdb' in self.action else None if var_module: try: module = 'apis.%s' % (var_module) function = getattr(importlib.import_module(module), self.action) except: pass if self.action in ('tmdb_tv_popular','tmdb_tv_top_rated', 'tmdb_tv_premieres','tmdb_tv_upcoming', 'tmdb_tv_airing_today','tmdb_tv_on_the_air','trakt_tv_anticipated','trakt_tv_trending'): 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_tvshow_id(item['show']['ids'])) 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 == 'tmdb_tv_discover': from modules.discover import set_history name = params['name'] query = params['query'] if page_no == 1: set_history('tvshow', name, query) data = function(query, page_no) for item in data['results']: self.list.append(item['id']) if data['page'] < data['total_pages']: self.new_page = {'mode': mode, 'action': self.action, 'query': query, 'name': name, 'new_page': str(data['page'] + 1), 'foldername': self.action} elif self.action in ('trakt_collection', 'trakt_watchlist', 'trakt_collection_widgets'): data, total_pages = function('shows', page_no, letter) self.list = [i['media_id'] for i in data] if total_pages > 2: self.total_pages = total_pages if total_pages > page_no: self.new_page = {'mode': mode, 'action': self.action, 'new_page': str(page_no + 1), 'new_letter': letter, 'foldername': self.action} elif self.action == ('trakt_tv_mosts'): for item in function(params['period'], params['duration'], page_no): self.list.append((get_trakt_tvshow_id(item['show']['ids']))) 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_tv_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_tv_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_tv_networks': data = function(params['network_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), 'network_id': params['network_id'], 'foldername': params['network_id']} elif self.action == 'trakt_tv_certifications': for item in function(params['certification'], page_no): self.list.append((get_trakt_tvshow_id(item['show']['ids']))) self.new_page = {'mode': mode, 'action': self.action, 'new_page': str(page_no + 1), 'foldername': params['certification'], 'certification': params['certification']} elif self.action == 'tmdb_tv_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(page_no + 1), 'year': params['year'], 'foldername': params['year']} elif self.action in ('in_progress_tvshows', 'favourites_tvshows', 'subscriptions_tvshows', 'kodi_library_tvshows', 'watched_tvshows'): (var_module, import_function) = ('in_progress', 'in_progress_tvshow') if 'in_progress' in self.action else ('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: module = 'modules.%s' % (var_module) function = getattr(importlib.import_module(module), import_function) except: pass if self.action == 'kodi_library_tvshows': self.id_type = 'tvdb_id' data, total_pages = function('tvshow', page_no, letter) self.list = [i['media_id'] for i in data] if total_pages > 2: self.total_pages = total_pages if total_pages > page_no: self.new_page = {'mode': mode, 'action': self.action, 'new_page': str(page_no + 1), 'new_letter': letter, 'foldername': self.action} elif self.action in ('tmdb_tv_similar', 'tmdb_tv_recommendations'): self.sim_recom_name = params['sim_recom_name'] self.sim_recom_tmdb = params['sim_recom_tmdb'] data = function(self.sim_recom_tmdb, 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), 'sim_recom_name': self.sim_recom_name, 'sim_recom_tmdb': self.sim_recom_tmdb, 'foldername': self.action} elif self.action == 'trakt_recommendations': for item in function('shows'): self.list.append(get_trakt_tvshow_id(item['ids'])) elif self.action == 'tmdb_popular_people': import os worker = False icon_directory = settings.get_theme() data = function(page_no) content_type = 'addons' fanart = __addon__.getAddonInfo('fanart') 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, 'genre_family.png') url_params = {'mode': 'people_search.main', 'actor_id': item['id'], 'actor_name': item['name'], 'actor_image': actor_poster.replace('w185', 'h632')} cm.append(("[B]Extended Info[/B]", 'RunScript(script.extendedinfo,info=extendedactorinfo,id=%s)' % item['id'])) url = build_url(url_params) listitem = xbmcgui.ListItem(item['name']) listitem.setArt({'icon': actor_poster, 'poster': actor_poster, 'thumb': actor_poster, 'fanart': fanart, 'banner': actor_poster}) 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_tv_search': try: from urllib import unquote except ImportError: from urllib.parse import unquote if params.get('query') == 'NA': search_title = dialog.input("Search Fen", type=xbmcgui.INPUT_ALPHANUM) search_name = unquote(search_title) else: search_name = unquote(params.get('query')) if not search_name: return params['search_name'] = search_name data = function(search_name, page_no) total_pages = data['total_pages'] if total_pages > page_no: self.new_page = {'mode': mode, 'action': self.action, 'new_page': str(page_no + 1), 'query': search_name, 'foldername': search_name} self.list = [i['id'] for i in data['results']] if self.total_pages and not is_widget: url_params = {'mode': 'build_navigate_to_page', 'db_type': 'TV Shows', 'current_page': page_no, 'total_pages': self.total_pages, 'transfer_mode': mode, 'transfer_action': self.action, 'foldername': self.action, 'query': params.get('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 cache_page: cached_page(self.cache_page_string, page_no=page_no) if worker: self.worker() if self.new_page: self.add_dir(self.new_page) except: pass xbmcplugin.setContent(__handle__, content_type) xbmcplugin.endOfDirectory(__handle__) if params.get('refreshed') == 'true': xbmc.sleep(1500) setView('view.tvshows', content_type)
def search_history(): import xbmc, xbmcgui, xbmcplugin import sys, os try: from urlparse import parse_qsl except ImportError: from urllib.parse import parse_qsl try: from urllib import unquote except ImportError: from urllib.parse import unquote from modules.nav_utils import build_url, setView from 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 ('people_queries', 'PEOPLE') if params['action'] == 'people' \ 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 icon = os.path.join(get_theme(), 'search.png') fanart = os.path.join(xbmc.translatePath(__addon__.getAddonInfo('path')), 'fanart.png') for h in history: try: cm = [] name = 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': 'people_search.search', 'actor_name': name} if params['action'] == 'people' \ 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) listitem.setArt({ 'icon': icon, 'poster': icon, 'thumb': icon, 'fanart': fanart, 'banner': icon }) listitem.addContextMenuItems(cm) xbmcplugin.addDirectoryItem(int(sys.argv[1]), url, listitem, isFolder=True) except: pass xbmcplugin.setContent(int(sys.argv[1]), 'addons') xbmcplugin.endOfDirectory(int(sys.argv[1])) setView('view.main')