def _set_folder_path(): if _get_property(setting) not in ('', 'None'): list_items = [{'line1': item} for item in [ls(32682), ls(32683)]] kwargs = { 'items': json.dumps(list_items), 'heading': 'Fen', 'enumerate': 'false', 'multi_choice': 'false', 'multi_line': 'false' } action = kodi_utils.select_dialog([1, 2], **kwargs) if action == None: _return(folder_info) if action == 1: _set_property(setting, 'None') _return(folder_info) else: folder = kodi_utils.dialog.browse(0, 'Fen', '') if not folder: folder = 'None' _set_property(setting, folder) _return(folder_info) else: folder = kodi_utils.dialog.browse(0, 'Fen', '') if not folder: folder = 'None' _set_property(setting, folder) _return(folder_info)
def _get_actor_details(): from modules.history import add_to_search_history try: actors = tmdb_people_info(query) except: return None, None, None if len(actors) == 1: actors = actors[0] actor_id = actors['id'] actor_name = actors['name'] try: image_id = actors['profile_path'] except: image_id = None if not image_id: actor_image = os.path.join(icon_directory, 'genre_family.png') else: actor_image = tmdb_image_url % image_id else: def _builder(): for item in actors: known_for_list = [i.get('title', 'NA') for i in item['known_for']] known_for_list = [i for i in known_for_list if not i == 'NA'] image = tmdb_image_url % item['profile_path'] if item['profile_path'] else os.path.join(icon_directory, 'genre_family.png') yield {'line1': item['name'], 'line2': ', '.join(known_for_list) if known_for_list else '', 'icon': image} list_items = list(_builder()) kwargs = {'items': json.dumps(list_items), 'heading': 'Fen', 'enumerate': 'false', 'multi_choice': 'false', 'multi_line': 'false'} selection = select_dialog(actors, **kwargs) if selection == None: return None, None, None actor_id = int(selection['id']) actor_name = selection['name'] actor_image = tmdb_image_url % selection['profile_path'] if selection['profile_path'] else os.path.join(icon_directory, 'genre_family.png') add_to_search_history(actor_name, 'people_queries') return actor_name, actor_image, actor_id
def multiselect_genres(self, genre_list): import json from modules.kodi_utils import select_dialog def _builder(): for genre, value in sorted(genre_list.items()): append(value[0]) yield { 'line1': genre, 'icon': kodi_utils.translate_path(icon_directory % value[1]) } function_list = [] append = function_list.append icon_directory = 'special://home/addons/script.tikiart/resources/media/%s' genre_list = json.loads(genre_list) list_items = list(_builder()) kwargs = { 'items': json.dumps(list_items), 'heading': genre_str, 'enumerate': 'false', 'multi_choice': 'true', 'multi_line': 'false' } genre_ids = select_dialog(function_list, **kwargs) if genre_ids == None: return return ','.join(genre_ids)
def network(self): key = 'network' if self._action(key) in ('clear', None): return network_list = [] append = network_list.append networks = sorted(meta_lists.networks, key=lambda k: k['name']) for item in networks: name = item['name'] append({ 'line1': name, 'icon': item['logo'], 'name': name, 'id': item['id'] }) heading = self.heading_base % ls(32480) kwargs = { 'items': json.dumps(network_list), 'heading': heading, 'enumerate': 'false', 'multi_choice': 'false', 'multi_line': 'false' } choice = kodi_utils.select_dialog(network_list, **kwargs) if choice == None: return values = ('&with_networks=%s' % choice['id'], choice['name']) self._process(key, values)
def set_language_filter_choice(filter_setting): from modules.meta_lists import language_choices lang_choices = language_choices lang_choices.pop('None') dl = list(lang_choices.keys()) fl = list(lang_choices.values()) try: preselect = [ fl.index(i) for i in get_setting(filter_setting).split(', ') ] except: preselect = [] list_items = [{'line1': item} for item in dl] kwargs = { 'items': json.dumps(list_items), 'heading': 'Fen', 'enumerate': 'false', 'multi_choice': 'true', 'multi_line': 'false', 'preselect': preselect } choice = kodi_utils.select_dialog(fl, **kwargs) if choice == None: return if choice == []: return set_setting(filter_setting, 'eng') set_setting(filter_setting, ', '.join(choice))
def furkPacks(self, name, file_id, highlight=None, download=False): from apis.furk_api import FurkAPI kodi_utils.show_busy_dialog() t_files = FurkAPI().t_files(file_id) t_files = [i for i in t_files if 'video' in i['ct'] and 'bitrate' in i] t_files.sort(key=lambda k: k['name'].lower()) kodi_utils.hide_busy_dialog() if download: return t_files default_furk_icon = kodi_utils.translate_path( 'special://home/addons/script.tikiart/resources/media/furk.png') list_items = [{ 'line1': '%.2f GB | %s' % (float(item['size']) / 1073741824, clean_file_name(item['name']).upper()), 'icon': default_furk_icon } for item in t_files] kwargs = { 'items': json.dumps(list_items), 'heading': name, 'highlight': highlight, 'enumerate': 'true', 'multi_choice': 'false', 'multi_line': 'false' } chosen_result = kodi_utils.select_dialog(t_files, **kwargs) if chosen_result is None: return None link = chosen_result['url_dl'] name = chosen_result['name'] return FenPlayer().run(link, 'video')
def set_quality_choice(quality_setting): include = ls(32188) dl = [ '%s SD' % include, '%s 720p' % include, '%s 1080p' % include, '%s 4K' % include ] fl = ['SD', '720p', '1080p', '4K'] try: preselect = [ fl.index(i) for i in get_setting(quality_setting).split(', ') ] except: preselect = [] list_items = [{'line1': item} for item in dl] kwargs = { 'items': json.dumps(list_items), 'heading': 'Fen', 'enumerate': 'false', 'multi_choice': 'true', 'multi_line': 'false', 'preselect': preselect } choice = kodi_utils.select_dialog(fl, **kwargs) if choice is None: return if choice == []: kodi_utils.ok_dialog(text=32574, top_space=True) return set_quality_choice(quality_setting) set_setting(quality_setting, ', '.join(choice))
def cast(self): key = 'cast' if self._action(key) in ('clear', None): return from apis.tmdb_api import get_tmdb from caches.main_cache import cache_object result = None actor_id = None search_name = None search_name = kodi_utils.dialog.input(self.heading_base % ls(32664)) if not search_name: return string = '%s_%s' % ('tmdb_movies_people_search_actor_data', search_name) url = 'https://api.themoviedb.org/3/search/person?api_key=%s&language=en-US&query=%s' % ( self.tmdb_api, search_name) result = cache_object(get_tmdb, string, url, 4) result = result['results'] if not result: return actor_list = [] append = actor_list.append if len(result) > 1: for item in result: name = item['name'] known_for_list = [ i.get('title', 'NA') for i in item['known_for'] ] known_for_list = [i for i in known_for_list if not i == 'NA'] known_for = ', '.join(known_for_list) if known_for_list else '' if item.get('profile_path'): icon = 'https://image.tmdb.org/t/p/h632/%s' % item[ 'profile_path'] else: icon = kodi_utils.translate_path( 'special://home/addons/script.tikiart/resources/media/genre_family.png' ) append({ 'line1': name, 'line2': known_for, 'icon': icon, 'name': name, 'id': item['id'] }) heading = self.heading_base % ls(32664) kwargs = { 'items': json.dumps(actor_list), 'heading': heading, 'enumerate': 'false', 'multi_choice': 'false', 'multi_line': 'true' } choice = kodi_utils.select_dialog(actor_list, **kwargs) if choice == None: return self._set_property() actor_id = choice['id'] actor_name = choice['name'] else: actor_id = [item['id'] for item in result][0] actor_name = [item['name'] for item in result][0] if actor_id: values = ('&with_cast=%s' % str(actor_id), to_utf8(safe_string(remove_accents(actor_name)))) self._process(key, values)
def imdb_videos_choice(videos, poster, media=True): try: videos = json.loads(videos) except: pass videos.sort(key=lambda x: x['quality_rank']) if media: items = [{'line': i['quality'], 'function': i['url']} for i in videos] choice = open_window(['windows.extras', 'ShowSelectMedia'], 'select_media.xml', items=items, poster=poster) else: dl = [i['quality'] for i in videos] fl = [i['url'] for i in videos] list_items = [{'line1': item, 'icon': poster} for item in dl] kwargs = { 'items': json.dumps(list_items), 'heading': 'Fen', 'enumerate': 'false', 'multi_choice': 'false', 'multi_line': 'false' } choice = kodi_utils.select_dialog(fl, **kwargs) return choice
def set_subtitle_choice(): choices = ((ls(32192), '0'), (ls(32193), '1'), (ls(32027), '2')) list_items = [{'line1': item[0]} for item in choices] kwargs = { 'items': json.dumps(list_items), 'heading': 'Fen', 'enumerate': 'false', 'multi_choice': 'false', 'multi_line': 'false' } choice = kodi_utils.select_dialog([i[1] for i in choices], **kwargs) if choice: return set_setting('subtitles.subs_action', choice)
def results_highlights_choice(): choices = ((ls(32240), '0'), (ls(32583), '1'), (ls(32241), '2')) list_items = [{'line1': item[0]} for item in choices] kwargs = { 'items': json.dumps(list_items), 'heading': 'Fen', 'enumerate': 'false', 'multi_choice': 'false', 'multi_line': 'false' } choice = kodi_utils.select_dialog([i[1] for i in choices], **kwargs) if choice: return set_setting('highlight.type', choice)
def debridPacks(self, debrid_provider, name, magnet_url, info_hash, highlight=None, download=False): if debrid_provider == 'Real-Debrid': from apis.real_debrid_api import RealDebridAPI as debrid_function icon = 'realdebrid.png' elif debrid_provider == 'Premiumize.me': from apis.premiumize_api import PremiumizeAPI as debrid_function icon = 'premiumize.png' elif debrid_provider == 'AllDebrid': from apis.alldebrid_api import AllDebridAPI as debrid_function icon = 'alldebrid.png' kodi_utils.show_busy_dialog() try: debrid_files = debrid_function().display_magnet_pack( magnet_url, info_hash) except: debrid_files = None kodi_utils.hide_busy_dialog() if not debrid_files: return kodi_utils.notification(32574) debrid_files.sort(key=lambda k: k['filename'].lower()) if download: return debrid_files, debrid_function default_debrid_icon = kodi_utils.translate_path( 'special://home/addons/script.tikiart/resources/media/%s' % icon) list_items = [{ 'line1': '%.2f GB | %s' % (float(item['size']) / 1073741824, clean_file_name(item['filename']).upper()), 'icon': default_debrid_icon } for item in debrid_files] kwargs = { 'items': json.dumps(list_items), 'heading': name, 'highlight': highlight, 'enumerate': 'true', 'multi_choice': 'false', 'multi_line': 'false' } chosen_result = kodi_utils.select_dialog(debrid_files, **kwargs) if chosen_result is None: return None url_dl = chosen_result['link'] if debrid_provider in ('Real-Debrid', 'AllDebrid'): link = debrid_function().unrestrict_link(url_dl) elif debrid_provider == 'Premiumize.me': link = debrid_function().add_headers_to_url(url_dl) name = chosen_result['filename'] return FenPlayer().run(link, 'video')
def build_navigate_to_page(params): import json from modules.settings import nav_jump_use_alphabet use_alphabet = nav_jump_use_alphabet() icon = kodi_utils.translate_path( 'special://home/addons/script.tikiart/resources/media/item_jump.png') fanart = kodi_utils.translate_path( 'special://home/addons/plugin.video.fen/fanart.png') db_type = params.get('db_type') def _builder(use_alphabet): for i in start_list: if use_alphabet: line1, line2 = i.upper(), ls(32821) % (db_type, i.upper()) else: line1, line2 = '%s %s' % (ls(32022), i), ls(32822) % i yield {'line1': line1, 'line2': line2, 'icon': icon} if use_alphabet: start_list = [chr(i) for i in range(97, 123)] else: start_list = [ str(i) for i in range(1, int(params.get('total_pages')) + 1) ] start_list.remove(params.get('current_page')) list_items = list(_builder(use_alphabet)) kwargs = { 'items': json.dumps(list_items), 'heading': 'Fen', 'enumerate': 'false', 'multi_choice': 'false', 'multi_line': 'false' } new_start = kodi_utils.select_dialog(start_list, **kwargs) kodi_utils.sleep(100) if new_start == None: return if use_alphabet: new_page, new_letter = '', new_start else: new_page, new_letter = new_start, None url_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', '') } kodi_utils.execute_builtin('Container.Update(%s)' % kodi_utils.build_url(url_params))
def _selection_dialog(self, dialog_list, function_list, string): list_items = [{ 'line1': item, 'icon': default_icon } for item in dialog_list] kwargs = { 'items': json.dumps(list_items), 'heading': string, 'enumerate': 'false', 'multi_choice': 'false', 'multi_line': 'false' } return kodi_utils.select_dialog(function_list, **kwargs)
def similar_recommended(self): key = self.key if self._action(key) in ('clear', None): return title = kodi_utils.dialog.input(self.heading_base % ls(32228)) if not title: return if self.db_type == 'movie': from apis.tmdb_api import tmdb_movies_title_year as function else: from apis.tmdb_api import tmdb_tv_title_year as function year = kodi_utils.dialog.input(self.heading_base % ('%s (%s)' % (ls(32543), ls(32669))), type=kodi_utils.numeric_input) results = function(title, year)['results'] if len(results) == 0: return kodi_utils.notification(32490) choice_list = [] append = choice_list.append for item in results: title = item['title'] if self.db_type == 'movie' else item['name'] try: year = item['release_date'].split( '-')[0] if self.db_type == 'movie' else item[ 'first_air_date'].split('-')[0] except: year = '' if year: rootname = '%s (%s)' % (title, year) else: rootname = title if item.get('poster_path'): icon = 'https://image.tmdb.org/t/p/w780%s' % item['poster_path'] else: icon = kodi_utils.translate_path( 'special://home/addons/script.tikiart/resources/media/box_office.png' ) append({ 'line1': rootname, 'line2': item['overview'], 'icon': icon, 'rootname': rootname, 'tmdb_id': str(item['id']) }) heading = self.heading_base % ('%s %s' % (ls(32193), ls(32228))) kwargs = { 'items': json.dumps(choice_list), 'heading': heading, 'enumerate': 'false', 'multi_choice': 'false', 'multi_line': 'true' } values = kodi_utils.select_dialog([(i['tmdb_id'], i['rootname']) for i in choice_list], **kwargs) if values == None: return self._process(key, values)
def clear_favourites(self): favorites = ls(32453) fl = [('%s %s' % (ls(32028), ls(32453)), 'movie'), ('%s %s' % (ls(32029), ls(32453)), 'tvshow')] list_items = [{'line1': item[0]} for item in fl] kwargs = {'items': json.dumps(list_items), 'heading': 'Fen', 'enumerate': 'false', 'multi_choice': 'false', 'multi_line': 'false'} self.db_type = select_dialog([item[1] for item in fl], **kwargs) if self.db_type == None: return if not confirm_dialog(): return dbcon = database.connect(self.fav_database) dbcon.execute("DELETE FROM favourites WHERE db_type=?", (self.db_type,)) dbcon.commit() dbcon.execute('VACUUM') dbcon.close() notification(32576, 3000)
def select_pack_item(pack_choices, highlight, icon): list_items = [{'line1': '%.2f GB | %s' % (float(item['pack_files']['size'])/1073741824, clean_file_name(item['pack_files']['filename']).upper()), 'icon': icon} \ for item in pack_choices] heading = '%s - %s' % ( ls(32031), clean_file_name(json.loads(pack_choices[0].get('source')).get('name'))) kwargs = { 'items': json.dumps(list_items), 'heading': heading, 'highlight': highlight, 'enumerate': 'true', 'multi_choice': 'true', 'multi_line': 'false' } return kodi_utils.select_dialog(pack_choices, **kwargs)
def _get_media_type(): media_type_list = [('movie', ls(32028), 'movies.png'), ('tvshow', ls(32029), 'tv.png')] list_items = [{ 'line1': item[1], 'line2': ls(32693) % item[1], 'icon': os.path.join(theme_folder, item[2]) } for item in media_type_list] kwargs = { 'items': json.dumps(list_items), 'heading': 'Fen', 'enumerate': 'false', 'multi_choice': 'false', 'multi_line': 'true' } chosen_media_type = kodi_utils.select_dialog( [i[0] for i in media_type_list], **kwargs) return chosen_media_type
def meta_language_choice(): from modules.meta_lists import meta_languages langs = meta_languages list_items = [{'line1': i['name']} for i in langs] kwargs = { 'items': json.dumps(list_items), 'heading': ls(32145), 'enumerate': 'false', 'multi_choice': 'false', 'multi_line': 'false' } list_choose = kodi_utils.select_dialog(langs, **kwargs) if list_choose == None: return None from caches.meta_cache import delete_meta_cache chosen_language = list_choose['iso'] chosen_language_display = list_choose['name'] set_setting('meta_language', chosen_language) set_setting('meta_language_display', chosen_language_display) delete_meta_cache(silent=True)
def get_trakt_list_selection(list_choice='none'): my_lists = [{'name': item['name'], 'display': ls(32778) % item['name'].upper(), 'user': item['user']['ids']['slug'], 'slug': item['ids']['slug']} \ for item in trakt_get_lists('my_lists')] my_lists.sort(key=lambda k: k['name']) if list_choice == 'nav_edit': liked_lists = [{ 'name': item['list']['name'], 'display': ls(32779) % item['list']['name'].upper(), 'user': item['list']['user']['ids']['slug'], 'slug': item['list']['ids']['slug'] } for item in trakt_get_lists('liked_lists')] liked_lists.sort(key=lambda k: (k['display'])) my_lists.extend(liked_lists) else: my_lists.insert( 0, { 'name': 'Collection', 'display': '[B][I]%s [/I][/B]' % ls(32499).upper(), 'user': '******', 'slug': 'Collection' }) my_lists.insert( 0, { 'name': 'Watchlist', 'display': '[B][I]%s [/I][/B]' % ls(32500).upper(), 'user': '******', 'slug': 'Watchlist' }) list_items = [{ 'line1': item['display'], 'icon': trakt_icon } for item in my_lists] index_list = [list_items.index(i) for i in list_items] kwargs = { 'items': json.dumps(list_items), 'heading': 'Select list', 'enumerate': 'false', 'multi_choice': 'false', 'multi_line': 'false' } selection = kodi_utils.select_dialog(my_lists, **kwargs) if selection == None: return None return selection
def _multiselect_dialog(self, string, dialog_list, function_list=None, preselect=[]): if not function_list: function_list = dialog_list list_items = [{ 'line1': item, 'icon': default_icon } for item in dialog_list] kwargs = { 'items': json.dumps(list_items), 'heading': string, 'enumerate': 'false', 'multi_choice': 'true', 'multi_line': 'false', 'preselect': preselect } return kodi_utils.select_dialog(function_list, **kwargs)
def results_sorting_choice(): quality, provider, size = ls(32241), ls(32583), ls(32584) choices = [('%s, %s, %s' % (quality, provider, size), '0'), ('%s, %s, %s' % (quality, size, provider), '1'), ('%s, %s, %s' % (provider, quality, size), '2'), ('%s, %s, %s' % (provider, size, quality), '3'), ('%s, %s, %s' % (size, quality, provider), '4'), ('%s, %s, %s' % (size, provider, quality), '5')] list_items = [{'line1': item[0]} for item in choices] kwargs = { 'items': json.dumps(list_items), 'heading': 'Fen', 'enumerate': 'false', 'multi_choice': 'false', 'multi_line': 'false' } choice = kodi_utils.select_dialog(choices, **kwargs) if choice: set_setting('results.sort_order_display', choice[0]) set_setting('results.sort_order', choice[1])
def color_chooser(msg_dialog, no_color=False): from modules.meta_lists import meta_colors color_chart = meta_colors color_display = [ '[COLOR=%s]%s[/COLOR]' % (i, i.capitalize()) for i in color_chart ] if no_color: color_chart.insert(0, 'No Color') color_display.insert(0, 'No Color') list_items = [{'line1': item} for item in color_display] kwargs = { 'items': json.dumps(list_items), 'heading': 'Fen', 'enumerate': 'false', 'multi_choice': 'false', 'multi_line': 'false' } choice = kodi_utils.select_dialog(color_chart, **kwargs) if choice == None: return return choice
def clear_search_history(): delete_str, search_str, hist_str, vid_str, mov_str, key_str = ls( 32785), ls(32450), ls(32486), ls(32491), ls(32028), ls(32092) tv_str, aud_str, furk_str, easy_str, peop_str, imdb_str = ls(32029), ls( 32492), ls(32069), ls(32070), ls(32507), ls(32064) choice_list = [ ('%s %s %s %s' % (delete_str, mov_str, search_str, hist_str), 'movie_queries'), ('%s %s %s %s' % (delete_str, tv_str, search_str, hist_str), 'tvshow_queries'), ('%s %s %s %s' % (delete_str, peop_str, search_str, hist_str), 'people_queries'), ('%s %s %s %s %s' % (delete_str, imdb_str, key_str, mov_str, hist_str), 'imdb_keyword_movie_queries'), ('%s %s %s %s %s' % (delete_str, imdb_str, key_str, tv_str, hist_str), 'imdb_keyword_tvshow_queries'), ('%s %s %s %s %s' % (delete_str, furk_str, vid_str, search_str, hist_str), 'furk_video_queries'), ('%s %s %s %s %s' % (delete_str, furk_str, aud_str, search_str, hist_str), 'furk_audio_queries'), ('%s %s %s %s' % (delete_str, easy_str, search_str, hist_str), 'easynews_video_queries') ] try: list_items = [{'line1': item[0], 'icon': icon} for item in choice_list] kwargs = { 'items': json.dumps(list_items), 'heading': 'Fen', 'enumerate': 'false', 'multi_choice': 'false', 'multi_line': 'false' } setting = kodi_utils.select_dialog([item[1] for item in choice_list], **kwargs) if setting == None: return main_cache.set(setting, '', expiration=EXPIRES_365_DAYS) kodi_utils.notification(32576, 3500) except: return
def trakt_manager_choice(params): if not get_setting('trakt_user', ''): return kodi_utils.notification(32760, 3500) icon = kodi_utils.translate_path( 'special://home/addons/script.tikiart/resources/media/trakt.png') choices = [('%s %s...' % (ls(32602), ls(32199)), 'Add'), ('%s %s...' % (ls(32603), ls(32199)), 'Remove')] list_items = [{'line1': item[0], 'icon': icon} for item in choices] kwargs = { 'items': json.dumps(list_items), 'heading': ls(32198).replace('[B]', '').replace('[/B]', ''), 'enumerate': 'false', 'multi_choice': 'false', 'multi_line': 'false' } choice = kodi_utils.select_dialog([i[1] for i in choices], **kwargs) if choice == None: return if choice == 'Add': from apis.trakt_api import trakt_add_to_list trakt_add_to_list(params) else: from apis.trakt_api import trakt_remove_from_list trakt_remove_from_list(params)
def enable_scrapers_choice(): scrapers = [ 'external', 'furk', 'easynews', 'rd_cloud', 'pm_cloud', 'ad_cloud', 'folders' ] cloud_scrapers = { 'rd_cloud': 'rd.enabled', 'pm_cloud': 'pm.enabled', 'ad_cloud': 'ad.enabled' } scraper_names = [ ls(32118).upper(), ls(32069).upper(), ls(32070).upper(), ls(32098).upper(), ls(32097).upper(), ls(32099).upper(), ls(32108).upper() ] preselect = [ scrapers.index(i) for i in settings.active_internal_scrapers() ] list_items = [{'line1': item} for item in scraper_names] kwargs = { 'items': json.dumps(list_items), 'heading': 'Fen', 'enumerate': 'false', 'multi_choice': 'true', 'multi_line': 'false', 'preselect': preselect } choice = kodi_utils.select_dialog(scrapers, **kwargs) if choice is None: return for i in scrapers: set_setting('provider.%s' % i, ('true' if i in choice else 'false')) if i in cloud_scrapers and i in choice: set_setting(cloud_scrapers[i], 'true')
def enable_disable(folder): try: icon = kodi_utils.ext_addon( 'script.module.fenomscrapers').getAddonInfo('icon') enabled, disabled = scrapers_status(folder) all_sources = sorted(enabled + disabled) preselect = [all_sources.index(i) for i in enabled] list_items = [{'line1': i.upper(), 'icon': icon} for i in all_sources] kwargs = { 'items': json.dumps(list_items), 'heading': 'Fen', 'enumerate': 'false', 'multi_choice': 'true', 'multi_line': 'false', 'preselect': preselect } chosen = kodi_utils.select_dialog(all_sources, **kwargs) if chosen == None: return for i in all_sources: if i in chosen: fenom_setSetting('provider.' + i, 'true') else: fenom_setSetting('provider.' + i, 'false') return _ext_scrapers_notice(32576) except: return _ext_scrapers_notice(32574)
def options_menu(params, meta=None): def _builder(): for item in listing: line1 = item[0] line2 = item[1] if line2 == '': line2 = line1 yield {'line1': line1, 'line2': line2} content = params.get('content', None) if not content: content = kodi_utils.container_content()[:-1] season = params.get('season', None) episode = params.get('episode', None) if not meta: function = metadata.movie_meta if content == 'movie' else metadata.tvshow_meta meta_user_info = metadata.retrieve_user_info() meta = function('tmdb_id', params['tmdb_id'], meta_user_info) watched_indicators = settings.watched_indicators() on_str, off_str, currently_str, open_str, settings_str = ls(32090), ls( 32027), ls(32598), ls(32641), ls(32247) autoplay_status, autoplay_toggle, quality_setting = (on_str, 'false', 'autoplay_quality_%s' % content) if settings.auto_play(content) \ else (off_str, 'true', 'results_quality_%s' % content) quality_filter_setting = 'autoplay_quality_%s' % content if autoplay_status == on_str else 'results_quality_%s' % content autoplay_next_status, autoplay_next_toggle = ( on_str, 'false') if settings.autoplay_next_episode() else (off_str, 'true') results_xml_style_status = get_setting('results.xml_style', 'Default') results_filter_ignore_status, results_filter_ignore_toggle = ( on_str, 'false') if settings.ignore_results_filter() else (off_str, 'true') results_sorting_status = get_setting('results.sort_order_display').replace( '$ADDON[plugin.video.fen 32582]', ls(32582)) current_results_highlights_action = get_setting('highlight.type') results_highlights_status = ls( 32240) if current_results_highlights_action == '0' else ls( 32583) if current_results_highlights_action == '1' else ls(32241) current_subs_action = get_setting('subtitles.subs_action') current_subs_action_status = 'Auto' if current_subs_action == '0' else ls( 32193) if current_subs_action == '1' else off_str active_internal_scrapers = [ i.replace('_', '') for i in settings.active_internal_scrapers() ] current_scrapers_status = ', '.join([ i for i in active_internal_scrapers ]) if len(active_internal_scrapers) > 0 else 'N/A' current_quality_status = ', '.join( settings.quality_filter(quality_setting)) uncached_torrents_status, uncached_torrents_toggle = ( on_str, 'false') if settings.display_uncached_torrents() else (off_str, 'true') listing = [] base_str1 = '%s%s' base_str2 = '%s: [B]%s[/B]' % (currently_str, '%s') if content in ('movie', 'episode'): multi_line = 'true' listing += [(ls(32014), '', 'clear_and_rescrape')] listing += [(ls(32006), '', 'rescrape_with_disabled')] listing += [(ls(32135), '', 'scrape_with_custom_values')] listing += [(base_str1 % (ls(32175), ' (%s)' % content), base_str2 % autoplay_status, 'toggle_autoplay')] if autoplay_status == on_str and content == 'episode': listing += [ (base_str1 % (ls(32178), ''), base_str2 % autoplay_next_status, 'toggle_autoplay_next') ] listing += [(base_str1 % (ls(32105), ' (%s)' % content), base_str2 % current_quality_status, 'set_quality')] listing += [(base_str1 % ('', '%s %s' % (ls(32055), ls(32533))), base_str2 % current_scrapers_status, 'enable_scrapers')] if autoplay_status == off_str: listing += [(base_str1 % ('', ls(32140)), base_str2 % results_xml_style_status, 'set_results_xml_display')] listing += [ (base_str1 % ('', ls(32151)), base_str2 % results_sorting_status, 'set_results_sorting') ] listing += [(base_str1 % ('', ls(32138)), base_str2 % results_highlights_status, 'set_results_highlights')] listing += [(base_str1 % ('', ls(32686)), base_str2 % results_filter_ignore_status, 'set_results_filter_ignore')] listing += [(base_str1 % ('', ls(32183)), base_str2 % current_subs_action_status, 'set_subs_action') ] if 'external' in active_internal_scrapers: listing += [(base_str1 % ('', ls(32160)), base_str2 % uncached_torrents_status, 'toggle_torrents_display_uncached')] else: multi_line = 'false' listing += [(ls(32046), '', 'extras_lists_choice')] if content in ('movie', 'tvshow') and meta: listing += [ (ls(32604) % (ls(32028) if meta['mediatype'] == 'movie' else ls(32029)), '', 'clear_media_cache') ] if watched_indicators == 1: listing += [(ls(32497) % ls(32037), '', 'clear_trakt_cache')] if content in ('movie', 'episode'): listing += [(ls(32637), '', 'clear_scrapers_cache')] listing += [('%s %s' % (ls(32118), ls(32513)), '', 'open_external_scrapers_manager')] listing += [('%s %s %s' % (open_str, ls(32522), settings_str), '', 'open_scraper_settings')] listing += [('%s %s %s' % (open_str, ls(32036), settings_str), '', 'open_fen_settings')] listing += [(ls(32640), '', 'save_and_exit')] list_items = list(_builder()) heading = ls(32646).replace('[B]', '').replace('[/B]', '') kwargs = { 'items': json.dumps(list_items), 'heading': heading, 'enumerate': 'false', 'multi_choice': 'false', 'multi_line': multi_line } choice = kodi_utils.select_dialog([i[2] for i in listing], **kwargs) if choice in (None, 'save_and_exit'): return elif choice == 'clear_and_rescrape': return clear_and_rescrape(content, meta, season, episode) elif choice == 'rescrape_with_disabled': return rescrape_with_disabled(content, meta, season, episode) elif choice == 'scrape_with_custom_values': return scrape_with_custom_values(content, meta, season, episode) elif choice == 'toggle_autoplay': set_setting('auto_play_%s' % content, autoplay_toggle) elif choice == 'toggle_autoplay_next': set_setting('autoplay_next_episode', autoplay_next_toggle) elif choice == 'enable_scrapers': enable_scrapers_choice() elif choice == 'set_results_xml_display': results_layout_choice() elif choice == 'set_results_sorting': results_sorting_choice() elif choice == 'set_results_filter_ignore': set_setting('ignore_results_filter', results_filter_ignore_toggle) elif choice == 'set_results_highlights': results_highlights_choice() elif choice == 'set_quality': set_quality_choice(quality_filter_setting) elif choice == 'set_subs_action': set_subtitle_choice() elif choice == 'extras_lists_choice': extras_lists_choice() elif choice == 'clear_media_cache': return refresh_cached_data(meta['mediatype'], 'tmdb_id', meta['tmdb_id'], meta['tvdb_id'], settings.get_language()) elif choice == 'toggle_torrents_display_uncached': set_setting('torrent.display.uncached', uncached_torrents_toggle) elif choice == 'clear_trakt_cache': return clear_cache('trakt') elif choice == 'clear_scrapers_cache': return clear_scrapers_cache() elif choice == 'open_external_scrapers_manager': return external_scrapers_manager() elif choice == 'open_scraper_settings': return kodi_utils.execute_builtin( 'Addon.OpenSettings(script.module.fenomscrapers)') elif choice == 'open_fen_settings': return open_settings('0.0') if choice == 'clear_trakt_cache' and content in ('movie', 'tvshow', 'season', 'episode'): kodi_utils.execute_builtin('Container.Refresh') kodi_utils.show_busy_dialog() kodi_utils.sleep(200) kodi_utils.hide_busy_dialog() options_menu(params, meta=meta)
def external_scrapers_manager(): icon = kodi_utils.ext_addon('script.module.fenomscrapers').getAddonInfo( 'icon') all_color, hosters_color, torrent_color = 'mediumvioletred', get_setting( 'hoster.identify'), get_setting('torrent.identify') enable_string, disable_string, specific_string, all_string = ls(32055), ls( 32024), ls(32536), ls(32525) scrapers_string, hosters_string, torrent_string = ls(32533), ls(33031), ls( 32535) fs_default_string = ls(32137) all_scrapers_string = '%s %s' % (all_string, scrapers_string) hosters_scrapers_string = '%s %s' % (hosters_string, scrapers_string) torrent_scrapers_string = '%s %s' % (torrent_string, scrapers_string) enable_string_base = '%s %s %s %s' % (enable_string, all_string, '%s', scrapers_string) disable_string_base = '%s %s %s %s' % (disable_string, all_string, '%s', scrapers_string) enable_disable_string_base = '%s/%s %s %s %s' % ( enable_string, disable_string, specific_string, '%s', scrapers_string) all_scrapers_base = '[COLOR %s]%s [/COLOR]' % (all_color, all_scrapers_string.upper()) debrid_scrapers_base = '[COLOR %s]%s [/COLOR]' % ( hosters_color, hosters_scrapers_string.upper()) torrent_scrapers_base = '[COLOR %s]%s [/COLOR]' % ( torrent_color, torrent_scrapers_string.upper()) tools_menu = \ [(all_scrapers_base, fs_default_string, {'mode': 'set_default_scrapers'}), (all_scrapers_base, enable_string_base % '', {'mode': 'toggle_all', 'folder': 'all', 'setting': 'true'}), (all_scrapers_base, disable_string_base % '', {'mode': 'toggle_all', 'folder': 'all', 'setting': 'false'}), (all_scrapers_base, enable_disable_string_base % '', {'mode': 'enable_disable', 'folder': 'all'}), (debrid_scrapers_base, enable_string_base % hosters_string, {'mode': 'toggle_all', 'folder': 'hosters', 'setting': 'true'}), (debrid_scrapers_base, disable_string_base % hosters_string, {'mode': 'toggle_all', 'folder': 'hosters', 'setting': 'false'}), (debrid_scrapers_base, enable_disable_string_base % hosters_string, {'mode': 'enable_disable', 'folder': 'hosters'}), (torrent_scrapers_base, enable_string_base % torrent_string, {'mode': 'toggle_all', 'folder': 'torrents', 'setting': 'true'}), (torrent_scrapers_base, disable_string_base % torrent_string, {'mode': 'toggle_all', 'folder': 'torrents', 'setting': 'false'}), (torrent_scrapers_base, enable_disable_string_base % torrent_string, {'mode': 'enable_disable', 'folder': 'torrents'})] list_items = [{ 'line1': item[0], 'line2': item[1], 'icon': icon } for item in tools_menu] kwargs = { 'items': json.dumps(list_items), 'heading': 'Fen', 'enumerate': 'false', 'multi_choice': 'false', 'multi_line': 'true' } chosen_tool = kodi_utils.select_dialog(tools_menu, **kwargs) if chosen_tool == None: return from modules import source_utils params = chosen_tool[2] mode = params['mode'] if mode == 'toggle_all': source_utils.toggle_all(params['folder'], params['setting']) elif mode == 'enable_disable': source_utils.enable_disable(params['folder']) elif mode == 'set_default_scrapers': source_utils.set_default_scrapers() kodi_utils.sleep(350) return external_scrapers_manager()
def link_folders(service, folder_name, action): import json from caches.main_cache import main_cache def _get_media_type(): media_type_list = [('movie', ls(32028), 'movies.png'), ('tvshow', ls(32029), 'tv.png')] list_items = [{ 'line1': item[1], 'line2': ls(32693) % item[1], 'icon': os.path.join(theme_folder, item[2]) } for item in media_type_list] kwargs = { 'items': json.dumps(list_items), 'heading': 'Fen', 'enumerate': 'false', 'multi_choice': 'false', 'multi_line': 'true' } chosen_media_type = kodi_utils.select_dialog( [i[0] for i in media_type_list], **kwargs) return chosen_media_type theme_folder = kodi_utils.translate_path( 'special://home/addons/script.tikiart/resources/media') string = 'FEN_%s_%s' % (service, folder_name) current_link = main_cache.get(string) if action == 'remove': if not current_link: return if not kodi_utils.confirm_dialog(text=ls(32694) % current_link, top_space=True): return import sqlite3 as database cache_file = kodi_utils.translate_path( 'special://profile/addon_data/plugin.video.fen/maincache.db') dbcon = database.connect(cache_file) dbcur = dbcon.cursor() dbcur.execute("DELETE FROM maincache WHERE id=?", (string, )) dbcon.commit() dbcon.close() kodi_utils.clear_property(string) if service == 'FOLDER': clear_cache('folders', silent=True) kodi_utils.execute_builtin('Container.Refresh') return kodi_utils.ok_dialog(text=32576, top_space=True) if current_link: if not kodi_utils.confirm_dialog(text='%s[CR][B]%s[/B][CR]%s' % (ls(32695), current_link, ls(32696))): return media_type = _get_media_type() if media_type == None: return title = kodi_utils.dialog.input(ls(32228)).lower() if not title: return from apis.tmdb_api import tmdb_movies_title_year, tmdb_tv_title_year year = kodi_utils.dialog.input('%s (%s)' % (ls(32543), ls(32669)), type=kodi_utils.numeric_input) function = tmdb_movies_title_year if media_type == 'movie' else tmdb_tv_title_year results = function(title, year)['results'] if len(results) == 0: return kodi_utils.ok_dialog(text=32490, top_space=True) name_key = 'title' if media_type == 'movie' else 'name' released_key = 'release_date' if media_type == 'movie' else 'first_air_date' function_list = [] function_list_append = function_list.append def _builder(): for item in results: title = item[name_key] try: year = item[released_key].split('-')[0] except: year = '' if year: rootname = '%s (%s)' % (title, year) else: rootname = title icon = 'https://image.tmdb.org/t/p/w780%s' % item['poster_path'] if item.get('poster_path') \ else kodi_utils.translate_path('special://home/addons/plugin.video.fen/icon.png') function_list_append(rootname) yield {'line1': rootname, 'line2': item['overview'], 'icon': icon} list_items = list(_builder()) kwargs = { 'items': json.dumps(list_items), 'heading': 'Fen', 'enumerate': 'false', 'multi_choice': 'false', 'multi_line': 'true' } rootname = kodi_utils.select_dialog(function_list, **kwargs) if rootname == None: return from datetime import timedelta main_cache.set(string, rootname, expiration=timedelta(days=365)) if service == 'FOLDER': clear_cache('folders', silent=True) kodi_utils.execute_builtin('Container.Refresh') return kodi_utils.ok_dialog(text=32576, top_space=True)