def lists_trakt_my_lists(): lists = trakt.trakt_get_lists() items = [] for list in lists: name = list["name"] user = list["user"]["username"] slug = list["ids"]["slug"] items.append({ 'label': name, 'path': plugin.url_for("lists_trakt_show_list", user = user, slug = slug), 'context_menu': [ ( _("Scan item to library"), "RunPlugin({0})".format(plugin.url_for("lists_trakt_add_all_to_library", user=user, slug=slug)) ), ( "{0} ({1})".format(_("Play"), _("Random").lower()), "RunPlugin({0})".format(plugin.url_for("lists_trakt_play_random", user=user, slug=slug)) ) ], 'icon': get_icon_path("traktmylists"), 'thumbnail': get_icon_path("traktmylists"), }) fanart = plugin.addon.getAddonInfo('fanart') for item in items: item['properties'] = {'fanart_image' : get_background_path()} if FORCE == True: return plugin.finish(items=items, sort_methods=SORT, view_mode=VIEW) else: return plugin.finish(items=items, sort_methods=SORT)
def update_players(): url = plugin.get_setting(SETTING_PLAYERS_UPDATE_URL) if updater.update_players(url): plugin.notify(msg=_('Players'), title=_('Updated'), delay=1000, image=get_icon_path("player")) else: plugin.notify(msg=_('Players update'), title=_('Failed'), delay=1000, image=get_icon_path("player")) plugin.open_settings()
def tv(): """ TV directory """ items = [ { 'label': _("Search"), 'path': plugin.url_for(tv_search), 'icon': get_icon_path("search"), }, { 'label': _("Genres"), 'path': plugin.url_for(tv_genres), 'icon': get_icon_path("genres"), }, { 'label': _("Popular"), 'path': plugin.url_for(tv_most_popular, page='1'), 'icon': get_icon_path("popular"), }, { 'label': _("On the air"), 'path': plugin.url_for(tv_now_playing, page='1'), 'icon': get_icon_path("tv"), }, { 'label': _("Top rated"), 'path': plugin.url_for(tv_top_rated, page='1'), 'icon': get_icon_path("top_rated"), }, ] fanart = plugin.addon.getAddonInfo('fanart') for item in items: item['properties'] = {'fanart_image' : fanart} return items
def root(): """ Root directory """ items = [ { 'label': _("Movies"), 'path': plugin.url_for("movies"), 'icon': get_icon_path("movies"), }, { 'label': _("TV Shows"), 'path': plugin.url_for("tv"), 'icon': get_icon_path("tv"), }, { 'label': _("Live"), 'path': plugin.url_for("live"), 'icon': get_icon_path("live"), }, { 'label': _("Lists"), 'path': plugin.url_for("lists"), 'icon': get_icon_path("lists"), } ] fanart = plugin.addon.getAddonInfo('fanart') for item in items: item['properties'] = {'fanart_image' : fanart} return items
def update_players(): url = plugin.get_setting(SETTING_PLAYERS_UPDATE_URL, converter=unicode) if updater.update_players(url): plugin.notify(msg=_("Players"), title=_("Updated"), delay=1000, image=get_icon_path("player")) else: plugin.notify(msg=_("Players update"), title=_("Failed"), delay=1000, image=get_icon_path("player")) plugin.open_settings()
def total_setup(): plugin.notify(msg="Total Setup", title="Started", delay=1000, image=get_icon_path("metalliq")) if player_setup() == True: pass if source_setup() == True: pass plugin.notify(msg="Total Setup", title="Completed", delay=5000, image=get_icon_path("metalliq"))
def total(): xbmc.executebuiltin('SetProperty(running,totalmeta,home)') plugin.notify(msg=_('Automated install'), title=_('Started'), delay=1000, image=get_icon_path("meta")) url = "https://api.github.com/repos/OpenELEQ/unofficial-meta-players-verified/zipball" if updater.update_players(url): plugin.notify(msg=_('Players'), title=_('Updated'), delay=1000, image=get_icon_path("player")) else: plugin.notify(msg=_('Players update'), title=_('Failed'), delay=1000, image=get_icon_path("player")) xbmc.executebuiltin("RunPlugin(plugin://plugin.video.meta/settings/players/all/)") movielibraryfolder = plugin.get_setting(SETTING_MOVIES_LIBRARY_FOLDER) try: meta.library.movies.auto_movie_setup(movielibraryfolder) plugin.notify(msg=_('Movies library folder'), title=_('Setup Done'), delay=1000, image=get_icon_path("movies")) except: plugin.notify(msg=_('Movies library folder'), title=_('Setup Failed'), delay=1000, image=get_icon_path("movies")) tvlibraryfolder = plugin.get_setting(SETTING_TV_LIBRARY_FOLDER) try: meta.library.tvshows.auto_tv_setup(tvlibraryfolder) plugin.notify(msg=_('TVShows library folder'), title=_('Setup Done'), delay=1000, image=get_icon_path("tv")) except: plugin.notify(msg=_('TVShows library folder'), title=_('Setup Failed'), delay=1000, image=get_icon_path("player")) xbmc.sleep(5000) while xbmc.getCondVisibility("Window.IsActive(dialoginfo)"): if not xbmc.getCondVisibility("Window.IsActive(dialoginfo)"): break plugin.notify(msg=_('Automated install'), title=_('Completed'), delay=5000, image=get_icon_path("meta")) xbmc.executebuiltin('ClearProperty(running,home)')
def lists_trakt_liked_lists(page): lists, pages = trakt.trakt_get_liked_lists(page) items = [] for list in lists: info = list["list"] name = info["name"] user = info["user"]["username"] slug = info["ids"]["slug"] items.append({ 'label': name, 'path': plugin.url_for("lists_trakt_show_list", user = user, slug = slug), 'context_menu': [ ( _("Add list to library"), "RunPlugin({0})".format(plugin.url_for("lists_trakt_add_all_to_library", user=user, slug=slug)) ) ], 'icon': get_icon_path("traktlikedlists"), }) if pages > page: items.append({ 'label': _("Next >>"), 'path': plugin.url_for("lists_trakt_liked_lists", page = int(page) + 1), 'icon': get_icon_path("traktlikedlists"), }) if FORCE == True: return plugin.finish(items=items, sort_methods=SORT, view_mode=VIEW) else: return plugin.finish(items=items, sort_methods=SORT)
def player_setup(): xbmc.executebuiltin("SetProperty(running,totalmetalliq,home)") url = "https://api.github.com/repos/OpenELEQ/verified-metalliq-players/zipball" if updater.update_players(url): plugin.notify(msg=_("Players"), title=_("Updated"), delay=1000, image=get_icon_path("player")) else: plugin.notify(msg=_("Players update"), title=_("Failed"), delay=1000, image=get_icon_path("player")) xbmc.executebuiltin("RunPlugin(plugin://plugin.video.metalliq/settings/players/all/)") xbmc.executebuiltin("ClearProperty(running,home)") return True
def root_search(): """ Search directory """ items = [ {"label": "All", "path": plugin.url_for(root_search_term, page="1"), "icon": get_icon_path("search")}, { "label": _("Movies") + ": " + _("Search (Trakt)"), "path": plugin.url_for("trakt_movies_search", page="1"), "icon": get_icon_path("movies"), }, { "label": _("Movies") + ": " + _("Search (TMDb)"), "path": plugin.url_for("tmdb_movies_search", page="1"), "icon": get_icon_path("movies"), }, { "label": _("TV shows") + ": " + _("Search (Trakt)"), "path": plugin.url_for("trakt_tv_search", page="1"), "icon": get_icon_path("tv"), }, { "label": _("TV shows") + ": " + _("Search (TMDb)"), "path": plugin.url_for("tmdb_tv_search"), "icon": get_icon_path("tv"), }, { "label": _("TV shows") + ": " + _("Search (TVDb)"), "path": plugin.url_for("tvdb_tv_search"), "icon": get_icon_path("tv"), }, { "label": _("Music") + ": " + _("Search artist"), "path": plugin.url_for("music_search_artist"), "icon": get_icon_path("music"), }, { "label": _("Music") + ": " + _("Search album"), "path": plugin.url_for("music_search_album"), "icon": get_icon_path("music"), }, { "label": _("Music") + ": " + _("Search track"), "path": plugin.url_for("music_search_track"), "icon": get_icon_path("music"), }, {"label": _("Live") + ": " + _("Search"), "path": plugin.url_for("live_search"), "icon": get_icon_path("live")}, { "label": _("Lists") + ": " + _("Search"), "path": plugin.url_for("lists_trakt_search_for_lists"), "icon": get_icon_path("lists"), }, ] fanart = plugin.addon.getAddonInfo("fanart") for item in items: item["properties"] = {"fanart_image": get_background_path()} return items
def settings_set_players(media): playericon = get_icon_path("player") if media == "all": medias = ["movies","tvshows","live"] for media in medias: mediatype = media.replace('es','e ').replace('ws','w ').replace('all','').replace('ve','ve ') players = get_players(media) selected = [p.id for p in players] if selected is not None: if media == "movies": plugin.set_setting(SETTING_MOVIES_ENABLED_PLAYERS, selected) elif media == "tvshows": plugin.set_setting(SETTING_TV_ENABLED_PLAYERS, selected) elif media == "live": plugin.set_setting(SETTING_LIVE_ENABLED_PLAYERS, selected) else: raise Exception("invalid parameter %s" % media) plugin.notify(msg=_('All '+mediatype+'players'), title=_('Enabled'), delay=1000, image=get_icon_path("player")) plugin.notify(msg=_('All players'), title=_('Enabled'), delay=1000, image=get_icon_path("player")) return else: mediatype = media.replace('es','e ').replace('ws','w ').replace('all','').replace('ve','ve ') players = get_players(media) players = sorted(players,key=lambda player: player.clean_title.lower()) version = xbmc.getInfoLabel('System.BuildVersion') if version.startswith('16') or version.startswith('17'): msg = "Do you want to enable all "+mediatype+"players?" if dialogs.yesno(_("Enable all "+mediatype+"players"), _(msg)): selected = [p.id for p in players] else: result = dialogs.multiselect(_("Select "+mediatype+"players to enable"), [p.clean_title for p in players]) if result is not None: selected = [players[i].id for i in result] else: selected = None msg = "Kodi 16 is required for multi-selection. Do you want to enable all "+mediatype+"players instead?" if dialogs.yesno(_("Enable all "+mediatype+"players"), _(msg)): selected = [p.id for p in players] else: result = dialogs.multichoice(_("Select "+mediatype+"players to enable"), [p.clean_title for p in players]) if result is not None: selected = [players[i].id for i in result] if selected is not None: if media == "movies": plugin.set_setting(SETTING_MOVIES_ENABLED_PLAYERS, selected) elif media == "tvshows": plugin.set_setting(SETTING_TV_ENABLED_PLAYERS, selected) elif media == "live": plugin.set_setting(SETTING_LIVE_ENABLED_PLAYERS, selected) else: raise Exception("invalid parameter %s" % media) plugin.notify(msg=_('All '+mediatype+'players'), title=_('Updated'), delay=1000, image=get_icon_path("player"))
def trakt_my_movies(): items = [ { 'label': "{0} ({1})".format(_("Library"), "collection"), 'path': plugin.url_for("trakt_movies_collection"), 'icon': get_icon_path("traktcollection"), 'context_menu': [ ( _("Scan item to library"), "RunPlugin({0})".format(plugin.url_for("trakt_movies_collection_to_library")) ), ( "{0} ({1})".format(_("Play"), _("Random").lower()), "RunPlugin({0})".format(plugin.url_for("trakt_movies_play_random_collection")) ) ] }, { 'label': "{0} {1} ({2})".format(_("Unwatched"), _("movies"), "watchlist"), 'path': plugin.url_for("trakt_movies_watchlist"), 'icon': get_icon_path("traktwatchlist"), 'context_menu': [ ( _("Scan item to library"), "RunPlugin({0})".format(plugin.url_for("trakt_movies_watchlist_to_library")) ), ( "{0} ({1})".format(_("Play"), _("Random").lower()), "RunPlugin({0})".format(plugin.url_for("trakt_movies_play_random_watchlist")) ) ] }, { 'label':"{0} ({1})".format(_("Find similar"), "recommendations"), 'path': plugin.url_for("trakt_movies_recommendations"), 'icon': get_icon_path("traktrecommendations"), 'context_menu': [ ( _("Scan item to library"), "RunPlugin({0})".format(plugin.url_for("trakt_movies_recommendations_to_library")) ), ( "{0} ({1})".format(_("Play"), _("Random").lower()), "RunPlugin({0})".format(plugin.url_for("trakt_movies_play_random_recommendation")) ) ] } ] for item in items: item['properties'] = {'fanart_image' : get_background_path()} if FORCE == True: plugin.finish(items=items, sort_methods=SORT, view_mode=VIEW) else: return plugin.finish(items=items, sort_methods=SORT)
def lists_search_for_lists_term(term, page): lists, pages = trakt.search_for_list(term, page) page = int(page) pages = int(pages) items = [] for list in lists: if "list" in list: list_info = list["list"] else: continue name = list_info["name"] user = list_info["username"] slug = list_info["ids"]["slug"] total = list_info["item_count"] info = {} info['title'] = name if "description" in list_info: info["plot"] = list_info["description"] else: info["plot"] = _("No description available") if user != None and total != None and total != 0: items.append({ 'label': "{0} - {1} ({2})".format(to_utf8(name), to_utf8(user), total), 'path': plugin.url_for("lists_trakt_show_list", user=user, slug=slug), 'context_menu': [ ( _("Scan item to library"), "RunPlugin({0})".format(plugin.url_for("lists_trakt_add_all_to_library", user=user, slug=slug)) ), ( "{0} ({1})".format(_("Play"), _("Random").lower()), "RunPlugin({0})".format(plugin.url_for("lists_trakt_play_random", user=user, slug=slug)) ) ], 'info': info, 'icon': get_icon_path("traktlikedlists"), 'thumbnail': get_icon_path("traktlikedlists"), }) fanart = plugin.addon.getAddonInfo('fanart') for item in items: item['properties'] = {'fanart_image' : get_background_path()} if pages > page: items.append({ 'label': _("Next page").format() + " >> (%s/%s)" % (page + 1, pages), 'path': plugin.url_for("lists_search_for_lists_term", term = term, page=page + 1), 'icon': get_icon_path("item_next"), 'thumbnail': get_icon_path("item_next"), }) if FORCE == True: return plugin.finish(items=items, sort_methods=SORT, view_mode=VIEW) else: return plugin.finish(items=items, sort_methods=SORT)
def music_artist(name): name = to_utf8(name) items = [ { "label": _("Tracks"), "path": plugin.url_for("music_artist_tracks", artist_name=name), "icon": get_icon_path("music"), }, { "label": _("Albums"), "path": plugin.url_for("music_artist_albums", artist_name=name), "icon": get_icon_path("music"), }, ] return items
def lists(): """ Lists directory """ items = [ { 'label': _("Trakt liked lists"), 'path': plugin.url_for("lists_trakt_liked_lists"), 'icon': get_icon_path("tv"), # TODO }, { 'label': _("Trakt my lists"), 'path': plugin.url_for("lists_trakt_my_lists"), 'icon': get_icon_path("tv"), # TODO } ] return items
def lists_search_for_lists_term(term,page): lists, pages = trakt.search_for_list(term, page) page = int(page) pages = int(pages) items = [] for list in lists: if "list" in list: list_info = list["list"] else: continue name = list_info["name"] user = list_info["username"] slug = list_info["ids"]["slug"] info = {} info['title'] = name if "description" in list_info: info["plot"] = list_info["description"] else: info["plot"] = _("No description available") if user != None: items.append({ 'label': "{0} {1} {2}".format(to_utf8(name), _("by"), to_utf8(user)), 'path': plugin.url_for("lists_trakt_show_list", user=user, slug=slug), 'context_menu': [ ( _("Add list to library"), "RunPlugin({0})".format(plugin.url_for("lists_trakt_add_all_to_library", user=user, slug=slug)) ) ], 'info': info, 'icon': get_icon_path("traktlikedlists"), }) fanart = plugin.addon.getAddonInfo('fanart') for item in items: item['properties'] = {'fanart_image' : get_background_path()} if (len(items) < plugin.get_setting(SETTING_TRAKT_PER_PAGE, int) and pages > page): page = page + 1 results = lists_search_for_lists_term(term, page) return items + results if pages > page: items.append({ 'label': _("Next page").format() + " >> (%s/%s)" % (page + 1, pages), 'path': plugin.url_for("lists_search_for_lists_term", term = term, page=page + 1), 'icon': get_icon_path("traktlikedlists"), }) if FORCE == True: return plugin.finish(items=items, sort_methods=SORT, view_mode=VIEW) else: return plugin.finish(items=items, sort_methods=SORT)
def toggle_between_skins(): if xbmc.getCondVisibility("Skin.HasSetting(Contexting)") != True: contexting = False else: contexting = True if xbmc.getCondVisibility("Skin.HasSetting(Toggling)") != True: toggling = False else: toggling = True current_skin = str(xbmc.executeJSONRPC('{"jsonrpc":"2.0", "method":"Settings.GetSettingValue","params":{"setting":"lookandfeel.skin"}, "id":1}')).replace('{"id":1,"jsonrpc":"2.0","result":{"value":"','').replace('"}}','') primary_skin = plugin.get_setting(SETTING_PRIMARY_SKIN, unicode) if primary_skin == "": plugin.set_setting(SETTING_PRIMARY_SKIN, current_skin) alternate_skin = plugin.get_setting(SETTING_ALTERNATE_SKIN, unicode) if alternate_skin == "": if primary_skin != "skin.confluence" and primary_skin != "": plugin.set_setting(SETTING_ALTERNATE_SKIN, "skin.confluence") else: dialogs.notify(msg="Alternate skin", title="Not set", delay=5000, image=get_icon_path("metalliq")) return openSettings(addonid, 5.7) if primary_skin != alternate_skin and primary_skin != "" and alternate_skin != "" and xbmc.getCondVisibility('System.HasAddon(%s)' % primary_skin) and xbmc.getCondVisibility('System.HasAddon(%s)' % alternate_skin): if current_skin != primary_skin: xbmc.executeJSONRPC('{"jsonrpc":"2.0", "method":"Settings.SetSettingValue","params":{"setting":"lookandfeel.skin","value":"%s"}, "id":1}' % primary_skin) xbmc.executebuiltin('SetFocus(11)') xbmc.executebuiltin('Action(Select)') else: xbmc.executeJSONRPC('{"jsonrpc":"2.0", "method":"Settings.SetSettingValue","params":{"setting":"lookandfeel.skin","value":"%s"}, "id":1}' % alternate_skin) xbmc.executebuiltin('SetFocus(11)') xbmc.executebuiltin('Action(Select)') xbmc.sleep(2000) if contexting == False and xbmc.getCondVisibility("Skin.HasSetting(Contexting)") == True: toggle_context_player() elif contexting == True and xbmc.getCondVisibility("Skin.HasSetting(Contexting)") == False: toggle_context_player() else: pass if toggling == False and xbmc.getCondVisibility("Skin.HasSetting(Toggling)") == True: toggle_preferred_toggle() elif toggling == True and xbmc.getCondVisibility("Skin.HasSetting(Toggling)") == False: toggle_preferred_toggle() else: pass
def setup_library(library_folder): if library_folder[-1] != "/": library_folder += "/" metalliq_playlist_folder = "special://profile/playlists/mixed/MetalliQ/" if not xbmcvfs.exists(metalliq_playlist_folder): xbmcvfs.mkdir(metalliq_playlist_folder) playlist_folder = plugin.get_setting(SETTING_MOVIES_PLAYLIST_FOLDER, converter=str) if plugin.get_setting(SETTING_MOVIES_PLAYLIST_FOLDER, converter=str)[-1] != "/": playlist_folder += "/" # create folders if not xbmcvfs.exists(playlist_folder): xbmcvfs.mkdir(playlist_folder) if not xbmcvfs.exists(library_folder): # create folder xbmcvfs.mkdir(library_folder) # auto configure folder msg = _( "Would you like to automatically set [COLOR ff0084ff]M[/COLOR]etalli[COLOR ff0084ff]Q[/COLOR] as a movies video source?" ) if dialogs.yesno(_("Library setup"), msg): source_thumbnail = get_icon_path("movies") source_name = "[COLOR ff0084ff]M[/COLOR]etalli[COLOR ff0084ff]Q[/COLOR] " + _("Movies") source_content = '(\'{0}\',\'movies\',\'metadata.themoviedb.org\',\'\',2147483647,1,\'<settings><setting id="RatingS" value="TMDb" /><setting id="certprefix" value="Rated " /><setting id="fanart" value="true" /><setting id="keeporiginaltitle" value="false" /><setting id="language" value="{1}" /><setting id="tmdbcertcountry" value="us" /><setting id="trailer" value="true" /></settings>\',0,0,NULL,NULL)'.format( library_folder, LANG ) add_source(source_name, library_folder, source_content, source_thumbnail) # return translated path return xbmc.translatePath(library_folder)
def lists_trakt_add_liked_to_library(): lists, pages = trakt.trakt_get_liked_lists(1) misc_ids = [] movie_ids = [] tv_ids = [] import xbmcgui pDialog = xbmcgui.DialogProgress() pDialog.create('[COLOR ff0084ff]M[/COLOR]etalli[COLOR ff0084ff]Q[/COLOR]', 'Creating batch import files') for page in range(0, int(pages)): lists, ignore = trakt.trakt_get_liked_lists(page) list_number = 1 if (pDialog.iscanceled()): return percent = (int(page) / int(pages)) * 100 pDialog.update(int(percent), '{0} {1} of {2} ... '.format(_("Scanning for new content"), page, pages)) for list in lists: list_number += 1 pDialog.update(int(percent), '{0} {1} of {2} ... '.format(_("Scanning for new content"), page, pages), 'list {0} of {1} on page'.format(list_number, len(lists) + 1)) info = list["list"] user = info["user"]["username"] slug = info["ids"]["slug"] items = lists_trakt_show_list(user, slug) list_misc_ids, list_movie_ids, list_tv_ids = batch_find_list_ids(items) write_list_id_files(list_misc_ids, list_movie_ids, list_tv_ids, slug, user) misc_ids.extend(list_misc_ids) movie_ids.extend(list_movie_ids) tv_ids.extend(list_tv_ids) pDialog.close() write_batch_id_files(tv_ids, movie_ids, misc_ids) dialogs.notify(msg='Generating', title='.strm-files', delay=3000, image=get_icon_path("metalliq")) xbmc.executebuiltin("RunPlugin(plugin://plugin.video.metalliq/movies/batch_add_to_library)")
def music_artist(name): name = to_utf8(name) items = [ { 'label': _("Tracks"), 'path': plugin.url_for("music_artist_tracks", artist_name=name), 'icon': get_icon_path("music") }, { 'label': _("Albums"), 'path': plugin.url_for("music_artist_albums", artist_name=name), 'icon': get_icon_path("music") }, ] if FORCE == True: plugin.set_view_mode(VIEW); return items else: return items
def list_tvshows(response): """ TV shows listing """ import_tvdb() # Attach TVDB data to TMDB results items = [] results = response['results'] for tvdb_show, tmdb_show in execute(tmdb_to_tvdb, results, workers=10): if tvdb_show is not None: items.append(make_tvshow_item(tvdb_show, tmdb_show)) if xbmc.abortRequested: return # Paging if 'page' in response: page = response['page'] args = caller_args() if page < response['total_pages']: args['page'] = str(page + 1) items.append({ 'label': _("Next >>"), 'icon': get_icon_path("item_next"), 'path': plugin.url_for(caller_name(), **args) }) return items
def toggle_between_skins(): if xbmc.getCondVisibility("Skin.HasSetting(Contexting)") != True: contexting = False else: contexting = True if xbmc.getCondVisibility("Skin.HasSetting(Toggling)") != True: toggling = False else: toggling = True current_skin = ( str( xbmc.executeJSONRPC( '{"jsonrpc":"2.0", "method":"Settings.GetSettingValue","params":{"setting":"lookandfeel.skin"}, "id":1}' ) ) .replace('{"id":1,"jsonrpc":"2.0","result":{"value":"', "") .replace('"}}', "") ) primary_skin = plugin.get_setting(SETTING_PRIMARY_SKIN, converter=str) alternate_skin = plugin.get_setting(SETTING_ALTERNATE_SKIN, converter=str) if primary_skin == "": plugin.set_setting(SETTING_PRIMARY_SKIN, current_skin) if alternate_skin == "": if primary_skin != "skin.confluence": plugin.set_setting(SETTING_ALTERNATE_SKIN, "skin.confluence") else: plugin.notify( msg="Alternate skin", title="Not set", delay=5000, image=get_icon_path("metalliq") ), openSettings(addonid, 5.5) if ( primary_skin != alternate_skin and primary_skin != "" and alternate_skin != "" and xbmc.getCondVisibility("System.HasAddon(%s)" % primary_skin) and xbmc.getCondVisibility("System.HasAddon(%s)" % alternate_skin) ): if current_skin != primary_skin: xbmc.executeJSONRPC( '{"jsonrpc":"2.0", "method":"Settings.SetSettingValue","params":{"setting":"lookandfeel.skin","value":"%s"}, "id":1}' % primary_skin ) xbmc.executebuiltin("SetFocus(11)") xbmc.executebuiltin("Action(Select)") else: xbmc.executeJSONRPC( '{"jsonrpc":"2.0", "method":"Settings.SetSettingValue","params":{"setting":"lookandfeel.skin","value":"%s"}, "id":1}' % alternate_skin ) xbmc.executebuiltin("SetFocus(11)") xbmc.executebuiltin("Action(Select)") if toggling == False: xbmc.executebuiltin("Skin.Reset(Toggling)") else: xbmc.executebuiltin("Skin.SetBool(Toggling)") if contexting == False: xbmc.executebuiltin("Skin.Reset(Contexting)") else: xbmc.executebuiltin("Skin.SetBool(Contexting)")
def browse_library_channels(): items = [ { 'label': _("New channel"), 'path': plugin.url_for(live_search), 'icon': get_icon_path("search"), }, ] library_channels = get_library_channels() if library_channels: for (index, library_channel) in enumerate(library_channels): if library_channel != None: items.append({ 'label': str(library_channel), 'path': plugin.url_for(live_play, program="None", language="en", channel=library_channel, mode="library"), 'icon': get_icon_path("library"), }) return items
def music_artist_tracks(artist_name, page): artist_name = to_utf8(artist_name) results = lastfm.get_artist_top_tracks(artist_name, page) items = [] for track in results["track"]: large_image = track["image"][-1]["#text"] track_name = to_utf8(track["name"]) context_menu = [ ( _("Context player"), "PlayMedia({0})".format( plugin.url_for("music_play_audio", artist_name=artist_name, track_name=track_name, mode="context") ), ), ( _("Add to library"), "RunPlugin({0})".format( plugin.url_for("music_add_to_library", artist_name=artist_name, track_name=track_name) ), ), ( _("Musicvideo"), "PlayMedia({0})".format( plugin.url_for("music_play_video", artist_name=artist_name, track_name=track_name, mode="default") ), ), ] if plugin.get_setting(SETTING_PREFERRED_MUSIC_TYPE) == "audio": item = { "label": track_name, "path": plugin.url_for("music_play_audio", artist_name=artist_name, track_name=track_name), "thumbnail": large_image, "icon": "DefaultMusic.png", "poster": large_image, "info_type": "music", "context_menu": context_menu, } else: item = { "label": track_name, "path": plugin.url_for("music_play_video", artist_name=artist_name, track_name=track_name), "thumbnail": large_image, "icon": "DefaultMusicVideo.png", "poster": large_image, "info_type": "music", "context_menu": context_menu, } items.append(item) if results["@attr"]["totalPages"] > page: items.append( { "label": _("Next >>"), "icon": get_icon_path("item_next"), "path": plugin.url_for(music_artist_tracks, artist_name=artist_name, page=int(page) + 1), } ) return items
def export_tv_library(): folder_path = plugin.get_setting(SETTING_TV_LIBRARY_FOLDER) if not xbmcvfs.exists(folder_path): return plugin.notify(msg="TVShows folder", title="Absent", delay=5000, image=get_icon_path("tv")) ids = "" shows = xbmcvfs.listdir(folder_path)[0] if len(shows) < 1: return plugin.notify(msg="TVShows folder", title="Empty", delay=5000, image=get_icon_path("tv")) else: for show in shows: ids = ids + str(show) + "\n" shows_backup_file_path = "special://profile/addon_data/plugin.video.metalliq/shows_to_add.bak" if xbmcvfs.exists(shows_backup_file_path): os.remove(xbmc.translatePath(shows_backup_file_path)) if not xbmcvfs.exists(shows_backup_file_path): batch_add_file = xbmcvfs.File(shows_backup_file_path, "w") batch_add_file.write(ids) batch_add_file.close() plugin.notify(msg="TVShows", title="Backed up", delay=5000, image=get_icon_path("tv"))
def music_artist_albums(artist_name, page): artist_name = to_utf8(artist_name) results = lastfm.get_artist_top_albums(artist_name, page) items = [ { 'label': _("All Tracks"), 'path': plugin.url_for("music_artist_tracks", artist_name=artist_name), 'icon': get_icon_path("music") } ] for album in results["album"]: album_name = to_utf8(album["name"]) image = album['image'][-1]['#text'] artist_album_name = to_utf8(album['artist']['name']) context_menu = [ ( _("Scan item to library"), "RunPlugin({0})".format(plugin.url_for("music_add_album_to_library", artist_name=artist_album_name, album_name=album_name)) ) ] item = { 'thumbnail': image, 'label': "{0}".format(album_name), 'info': { 'title': album_name, 'artist': [artist_album_name], }, 'info_type': 'music', 'path': plugin.url_for("music_artist_album_tracks", artist_name=artist_name, album_name=album_name), 'context_menu': context_menu } items.append(item) if results["@attr"]["totalPages"] > page: next_page = int(page) + 1 items.append({ 'label': _("Next >>"), 'icon': get_icon_path("item_next"), 'path': plugin.url_for("music_artist_albums", artist_name=artist_name, page=next_page) }) if FORCE == True: plugin.set_view_mode(VIEW); return items else: return items
def lists_trakt_liked_lists(page): lists, pages = trakt.trakt_get_liked_lists(page) items = [] for list in lists: info = list["list"] name = info["name"] user = info["user"]["username"] slug = info["ids"]["slug"] items.append({ 'label': name, 'path': plugin.url_for("lists_trakt_show_list", user = user, slug = slug), 'icon': get_icon_path("traktlikedlists"), # TODO }) if pages > page: items.append({ 'label': _("Next >>"), 'path': plugin.url_for("lists_trakt_liked_lists", page = int(page) + 1), 'icon': get_icon_path("traktlikedlists"), # TODO }) return items
def lists(): """ Lists directory """ items = [ { 'label': _("Trakt liked lists"), 'path': plugin.url_for("lists_trakt_liked_lists", page = 1), 'icon': get_icon_path("traktlikedlists"), }, { 'label': _("Trakt my lists"), 'path': plugin.url_for("lists_trakt_my_lists"), 'icon': get_icon_path("traktmylists"), }, { 'label': _("Search"), 'path': plugin.url_for("lists_trakt_search_for_lists"), 'icon': get_icon_path("search"), }, ] return items
def music_artist_albums(artist_name, page): artist_name = to_utf8(artist_name) results = lastfm.get_artist_top_albums(artist_name, page) items = [ { "label": _("All Tracks"), "path": plugin.url_for("music_artist_tracks", artist_name=artist_name), "icon": get_icon_path("music"), } ] for album in results["album"]: album_name = to_utf8(album["name"]) image = album["image"][-1]["#text"] artist_album_name = to_utf8(album["artist"]["name"]) context_menu = [ ( _("Add to library"), "RunPlugin({0})".format( plugin.url_for("music_add_album_to_library", artist_name=artist_album_name, album_name=album_name) ), ) ] item = { "thumbnail": image, "label": "{0}".format(album_name), "info": {"title": album_name, "artist": [artist_album_name]}, "info_type": "music", "path": plugin.url_for("music_artist_album_tracks", artist_name=artist_name, album_name=album_name), "context_menu": context_menu, } items.append(item) if results["@attr"]["totalPages"] > page: next_page = int(page) + 1 items.append( { "label": _("Next >>"), "icon": get_icon_path("item_next"), "path": plugin.url_for(music_artist_albums, artist_name=artist_name, page=next_page), } ) return items
def music_artist_tracks(artist_name, page): artist_name = to_utf8(artist_name) results = lastfm.get_artist_top_tracks(artist_name, page) items = [] for track in results["track"]: large_image = track["image"][-1]["#text"] track_name = to_utf8(track["name"]) context_menu = [ ( _("Context player"), "PlayMedia({0})".format(plugin.url_for("music_play_audio", artist_name=artist_name, track_name=track_name, mode='context')) ), ( _("Scan item to library"), "RunPlugin({0})".format(plugin.url_for("music_add_to_library", artist_name=artist_name, track_name=track_name)) ), ( _("Musicvideo"), "PlayMedia({0})".format(plugin.url_for("music_play_video", artist_name=artist_name, track_name=track_name, mode='default')) ) ] if plugin.get_setting(SETTING_PREFERRED_MUSIC_TYPE, unicode) == "audio": item = { 'label': track_name, 'path': plugin.url_for("music_play_audio", artist_name=artist_name, track_name=track_name), 'thumbnail': large_image, 'icon': "DefaultMusic.png", 'poster': large_image, 'info_type': 'music', 'context_menu': context_menu, } else: item = { 'label': track_name, 'path': plugin.url_for("music_play_video", artist_name=artist_name, track_name=track_name), 'thumbnail': large_image, 'icon': "DefaultMusicVideo.png", 'poster': large_image, 'info_type': 'music', 'context_menu': context_menu, } items.append(item) if results["@attr"]["totalPages"] > page: items.append({ 'label': _("Next >>"), 'icon': get_icon_path("item_next"), 'path': plugin.url_for("music_artist_tracks", artist_name=artist_name, page=int(page) + 1) }) if FORCE == True: plugin.set_view_mode(VIEW); return items else: return items
def auto_music_setup(library_folder): if library_folder[-1] != "/": library_folder += "/" metalliq_playlist_folder = "special://profile/playlists/mixed/MetalliQ/" if not xbmcvfs.exists(metalliq_playlist_folder): xbmcvfs.mkdir(metalliq_playlist_folder) playlist_folder = plugin.get_setting(SETTING_MUSIC_PLAYLIST_FOLDER, unicode) if plugin.get_setting(SETTING_MUSIC_PLAYLIST_FOLDER, unicode)[-1] != "/": playlist_folder += "/" if not xbmcvfs.exists(playlist_folder): xbmcvfs.mkdir(playlist_folder) if not xbmcvfs.exists(library_folder): try: xbmcvfs.mkdir(library_folder) source_thumbnail = get_icon_path("music") source_name = "[COLOR ff0084ff]M[/COLOR]etalli[COLOR ff0084ff]Q[/COLOR] " + _( "Music") source_content = "('{0}','musicvideos','metadata.musicvideos.imvdb','',2147483647,0,'<settings/>',0,0,NULL,NULL)".format( library_folder) add_source(source_name, library_folder, source_content, source_thumbnail) return True except: False
def list_trakt_items(results, pages, page): from trakt import trakt movies = [get_trakt_movie_metadata(item, None) for item in results] items = [make_movie_item(movie) for movie in movies] page = int(page) pages = int(pages) if pages > 1: args = caller_args() args['page'] = page + 1 items.append({ 'label': "{0} >> ({1}/{2})".format(_("Next page"), page + 1, pages), 'path': plugin.url_for(caller_name(), **args), 'icon': get_icon_path("item_next"), 'properties': { 'fanart_image': get_background_path() } }) if FORCE == True: return plugin.finish(items=items, sort_methods=SORT, view_mode=VIEW) else: return plugin.finish(items=items, sort_methods=SORT)
def setup_library(library_folder): if library_folder[-1] != "/": library_folder += "/" playlist_folder = plugin.get_setting(SETTING_MUSIC_PLAYLIST_FOLDER, unicode) if plugin.get_setting(SETTING_MUSIC_PLAYLIST_FOLDER, unicode)[-1] != "/": playlist_folder += "/" # create folders if not xbmcvfs.exists(playlist_folder): xbmcvfs.mkdir(playlist_folder) if not xbmcvfs.exists(library_folder): # create folder xbmcvfs.mkdir(library_folder) msg = _( "Would you like to automatically set [COLOR yellow]chappaai[/COLOR] as a music source?" ) if dialogs.yesno("{0} {1}".format(_("Library"), "setup"), msg): source_thumbnail = get_icon_path("musicvideos") source_name = "[COLOR yellow]chappaai[/COLOR] " + _("Music videos") source_content = "('{0}','musicvideos','metadata.musicvideos.theaudiodb.com','',2147483647,0,'<settings><setting id=\"fanarttvalbumthumbs\" value=\"true\" /><setting id=\"tadbalbumthumbs\" value=\"true\" /></settings>',0,0,NULL,NULL)".format( library_folder) add_source(source_name, library_folder, source_content, source_thumbnail) # return translated path return xbmc.translatePath(library_folder)
def list_tvshows(response): """ TV shows listing """ import_tvdb() # Attach TVDB data to TMDB results items = [] results = response['results'] for tvdb_show, tmdb_show in execute(tmdb_to_tvdb, results, workers=10): if tvdb_show is not None: info = build_tvshow_info(tvdb_show, tmdb_show) items.append(make_tvshow_item(info)) if xbmc.abortRequested: return # Paging if 'page' in response: page = response['page'] args = caller_args() if page < response['total_pages']: args['page'] = str(page + 1) items.append({ 'label': _("Next >>"), 'icon': get_icon_path("item_next"), 'path': plugin.url_for(caller_name(), **args) }) return items
def lists(): """ Lists directory """ items = [ { 'label': "{0} {1}".format("\"Liked\"", _("Playlists").lower()), 'path': plugin.url_for("lists_trakt_liked_lists", page = 1), 'icon': get_icon_path("traktlikedlists"), 'thumbnail': get_icon_path("traktlikedlists"), 'context_menu': [ ( _("Scan item to library"), "RunPlugin({0})".format(plugin.url_for("lists_trakt_add_liked_to_library")) ) ] }, { 'label': "{0} {1}".format(_("Watch your"), _("Playlists").lower()), 'path': plugin.url_for("lists_trakt_my_lists"), 'icon': get_icon_path("traktmylists"), 'thumbnail': get_icon_path("traktmylists"), 'context_menu': [ ( _("Scan item to library"), "RunPlugin({0})".format(plugin.url_for("lists_trakt_add_my_lists_to_library")) ) ] }, { 'label': "{0}".format(_("Enter search string")), 'path': plugin.url_for("lists_trakt_search_for_lists"), 'icon': get_icon_path("search"), 'thumbnail': get_icon_path("search"), }, ] fanart = plugin.addon.getAddonInfo('fanart') for item in items: item['properties'] = {'fanart_image' : get_background_path()} if FORCE == True: plugin.set_view_mode(VIEW); return items else: return items
def root(): """ Root directory """ items = [{ 'label': _("Movies"), 'path': plugin.url_for("movies"), 'icon': get_icon_path("movies"), 'thumbnail': get_icon_path("movies"), }, { 'label': _("TV shows"), 'path': plugin.url_for("tv"), 'icon': get_icon_path("tv"), 'thumbnail': get_icon_path("tv"), }, { 'label': _("Music"), 'path': plugin.url_for("music"), 'icon': get_icon_path("music"), 'thumbnail': get_icon_path("music"), }, { 'label': _("TV channels"), 'path': plugin.url_for("live"), 'icon': get_icon_path("live"), 'thumbnail': get_icon_path("live"), }, { 'label': _("Playlists"), 'path': plugin.url_for("lists"), 'icon': get_icon_path("lists"), 'thumbnail': get_icon_path("lists"), 'context_menu': [(_("Scan item to library"), "RunPlugin({0})".format( plugin.url_for("lists_trakt_add_all_lists_to_library")))], }, { 'label': _("Enter search string"), 'path': plugin.url_for("root_search"), 'icon': get_icon_path("search"), 'thumbnail': get_icon_path("search"), }] fanart = plugin.addon.getAddonInfo('fanart') for item in items: item['properties'] = {'fanart_image': get_background_path()} if FORCE == True: plugin.set_view_mode(VIEW) return items else: return items
def settings_set_players(media): playericon = get_icon_path("player") medias = ["movies", "tvshows", "musicvideos", "music", "live"] if media == "all": for med in medias: mediatype = med.replace('es', 'e').replace('ws', 'w').replace( 'all', '').replace('os', 'o').replace('vs', 'v s').replace( 'tv', 'TV').replace('musicvideo', 'Music video').replace('live', 'TV') players = get_players(med) selected = [p.id for p in players] if selected is not None: if med == "movies": plugin.set_setting(SETTING_MOVIES_ENABLED_PLAYERS, selected) elif med == "tvshows": plugin.set_setting(SETTING_TV_ENABLED_PLAYERS, selected) elif med == "musicvideos": plugin.set_setting(SETTING_MUSICVIDEOS_ENABLED_PLAYERS, selected) elif med == "music": plugin.set_setting(SETTING_MUSIC_ENABLED_PLAYERS, selected) elif med == "live": plugin.set_setting(SETTING_LIVE_ENABLED_PLAYERS, selected) else: raise Exception("invalid parameter %s" % media) dialogs.notify(msg="{0} {1}".format( _(mediatype).capitalize(), _("Player").lower()), title=_('Enabled'), delay=1000, image=get_icon_path("player")) dialogs.notify(msg="{0}".format(_("Player")), title="{0} {1}".format(_("All"), _('Enabled').lower()), delay=1000, image=get_icon_path("player")) return True elif media == "tvportal": players = get_players("live") selected = [p.id for p in players] plugin.set_setting(SETTING_LIVE_ENABLED_PLAYERS, selected) return else: mediatype = media.replace('es', 'e').replace('ws', 'w').replace( 'all', '').replace('os', 'o').replace('vs', 'v s').replace( 'tv', 'TV').replace('musicvideo', 'Music video').replace('live', 'TV') players = get_players(media) players = sorted(players, key=lambda player: player.clean_title.lower()) version = xbmc.getInfoLabel('System.BuildVersion') selected = None if version.startswith('16') or version.startswith('17'): msg = "Do you want to enable all " + mediatype + "players?" if dialogs.yesno(_("Enable all " + mediatype + "players"), _(msg)): selected = [p.id for p in players] else: result = dialogs.multiselect( _("Select " + mediatype + "players to enable"), [p.clean_title for p in players]) if result is not None: selected = [players[i].id for i in result] else: selected = None msg = "Kodi 16 is required for multi-selection. Do you want to enable all " + mediatype + "players instead?" if dialogs.yesno( "{0} {1} {2} {3}s".format(_("Enable"), _("All").lower(), mediatype, _("Player").lower()), _(msg)): selected = [p.id for p in players] else: result = dialogs.multichoice( "{0}: {1} {2} {3}".format(_("Enable"), _("Select"), _("Player").lower()), [p.clean_title for p in players]) if result is not None: selected = [players[i].id for i in result] if selected is not None: if media == "movies": plugin.set_setting(SETTING_MOVIES_ENABLED_PLAYERS, selected) elif media == "tvshows": plugin.set_setting(SETTING_TV_ENABLED_PLAYERS, selected) elif media == "musicvideos": plugin.set_setting(SETTING_MUSICVIDEOS_ENABLED_PLAYERS, selected) elif media == "music": plugin.set_setting(SETTING_MUSIC_ENABLED_PLAYERS, selected) elif media == "live": plugin.set_setting(SETTING_LIVE_ENABLED_PLAYERS, selected) else: raise Exception("invalid parameter %s" % media) dialogs.notify(msg="{0} {1} {2}".format(_("Enable"), _(mediatype).lower(), _("Player").lower()), title=_('Done'), delay=1000, image=get_icon_path("player")) plugin.open_settings()
def _lists_trakt_show_list(list_items): genres_dict = trakt.trakt_get_genres("tv") if type(list_items) == str: import urllib list_items = eval(urllib.unquote(list_items)) items = [] for list_item in list_items: item = None item_type = list_item["type"] if item_type == "show": tvdb_id = list_item["show"]["ids"]["tvdb"] show = list_item["show"] info = get_tvshow_metadata_trakt(show, genres_dict) context_menu = [ ( _("Add to library"), "RunPlugin({0})".format(plugin.url_for("tv_add_to_library", id=tvdb_id)) ), ( _("Show info"), 'Action(Info)' ), ( _("Remove from list"), "RunPlugin({0})".format(plugin.url_for("lists_remove_show_from_list", src="tvdb", id=tvdb_id)) ) ] item = ({ 'label': info['title'], 'path': plugin.url_for("tv_tvshow", id=tvdb_id), 'context_menu': context_menu, 'thumbnail': info['poster'], 'icon': get_icon_path("tv"), 'poster': info['poster'], 'properties' : {'fanart_image' : info['fanart']}, 'info_type': 'video', 'stream_info': {'video': {}}, 'info': info }) elif item_type == "season": tvdb_id = list_item["show"]["ids"]["tvdb"] season = list_item["season"] show = list_item["show"] show_info = get_tvshow_metadata_trakt(show, genres_dict) season_info = get_season_metadata_trakt(show_info,season, genres_dict) label = "{0} - Season {1}".format(to_utf8(show["title"]),season["number"]) context_menu = [ ( _("Add to library"), "RunPlugin({0})".format(plugin.url_for("tv_add_to_library", id=tvdb_id)) ), ( _("Show info"), 'Action(Info)' ), ( _("Remove from list"), "RunPlugin({0})".format(plugin.url_for("lists_remove_season_from_list", src="tvdb", id=tvdb_id, season=list_item["season"]["number"])) ) ] item = ({ 'label': label, 'path': plugin.url_for(tv_season, id=tvdb_id, season_num=list_item["season"]["number"]), 'context_menu': context_menu, 'info': season_info, 'thumbnail': season_info['poster'], 'icon': get_icon_path("tv"), 'poster': season_info['poster'], 'properties': {'fanart_image': season_info['fanart']}, }) elif item_type == "episode": tvdb_id = list_item["show"]["ids"]["tvdb"] episode = list_item["episode"] show = list_item["show"] season_number = episode["season"] episode_number = episode["number"] show_info = get_tvshow_metadata_trakt(show, genres_dict) episode_info = get_episode_metadata_trakt(show_info, episode) label = "{0} - S{1}E{2} - {3}".format(show_info["title"], season_number, episode_number, episode_info["title"]) context_menu = [ ( _("Select stream..."), "PlayMedia({0})".format( plugin.url_for("tv_play", id=tvdb_id, season=season_number, episode=episode_number, mode='select')) ), ( _("Show info"), 'Action(Info)' ), ( _("Add to list"), "RunPlugin({0})".format(plugin.url_for("lists_add_episode_to_list", src='tvdb', id=tvdb_id, season=season_number, episode=episode_number)) ), ( _("Remove from list"), "RunPlugin({0})".format(plugin.url_for("lists_remove_season_from_list", src="tvdb", id=tvdb_id, season=season_number, episode = episode_number)) ) ] item = ({ 'label': label, 'path': plugin.url_for("tv_play", id=tvdb_id, season=season_number, episode=episode_number, mode='default'), 'context_menu': context_menu, 'info': episode_info, 'is_playable': True, 'info_type': 'video', 'stream_info': {'video': {}}, 'thumbnail': episode_info['poster'], 'poster': episode_info['poster'], 'icon': get_icon_path("tv"), 'properties': {'fanart_image': episode_info['fanart']}, }) elif item_type == "movie": movie = list_item["movie"] movie_info = get_trakt_movie_metadata(movie) item = make_movie_item(movie_info, True) if item is not None: items.append(item) for item in items: item['properties'] = {'fanart_image' : get_background_path()} if FORCE == True: return plugin.finish(items=items, sort_methods=SORT, view_mode=VIEW) else: return plugin.finish(items=items, sort_methods=SORT)
def music_artist_tracks(artist_name, page): artist_name = to_utf8(artist_name) results = lastfm.get_artist_top_tracks(artist_name, page) items = [] for track in results["track"]: large_image = track["image"][-1]["#text"] track_name = to_utf8(track["name"]) context_menu = [(_("Context player"), "PlayMedia({0})".format( plugin.url_for("music_play_audio", artist_name=artist_name, track_name=track_name, mode='context'))), (_("Scan item to library"), "RunPlugin({0})".format( plugin.url_for("music_add_to_library", artist_name=artist_name, track_name=track_name))), (_("Musicvideo"), "PlayMedia({0})".format( plugin.url_for("music_play_video", artist_name=artist_name, track_name=track_name, mode='default')))] if plugin.get_setting(SETTING_PREFERRED_MUSIC_TYPE, unicode) == "audio": item = { 'label': track_name, 'path': plugin.url_for("music_play_audio", artist_name=artist_name, track_name=track_name), 'thumbnail': large_image, 'icon': "DefaultMusic.png", 'poster': large_image, 'info_type': 'music', 'context_menu': context_menu, } else: item = { 'label': track_name, 'path': plugin.url_for("music_play_video", artist_name=artist_name, track_name=track_name), 'thumbnail': large_image, 'icon': "DefaultMusicVideo.png", 'poster': large_image, 'info_type': 'music', 'context_menu': context_menu, } items.append(item) if results["@attr"]["totalPages"] > page: items.append({ 'label': _("Next >>"), 'icon': get_icon_path("item_next"), 'path': plugin.url_for("music_artist_tracks", artist_name=artist_name, page=int(page) + 1) }) if FORCE == True: plugin.set_view_mode(VIEW) return items else: return items
def music(): items = [{ 'label': _("Enter search string"), 'path': plugin.url_for("music_search"), 'icon': get_icon_path("search"), }, { 'label': "{0} {1}".format(_("Top 100"), _("Artists")), 'path': plugin.url_for("music_top_artists"), 'icon': get_icon_path("top_rated"), }, { 'label': "{0} {1}".format(_("Top 100"), _("Tracks")), 'path': plugin.url_for("music_top_tracks"), 'icon': get_icon_path("trending"), }, { 'label': "{0} {1} ({2})".format(_("Top 100"), _("Artists"), "NL"), 'path': plugin.url_for("music_top_artists_by_country", country='netherlands'), 'icon': get_icon_path("top_nl"), }, { 'label': "{0} {1} ({2})".format(_("Top 100"), _("Artists"), "UK"), 'path': plugin.url_for("music_top_artists_by_country", country='united kingdom'), 'icon': get_icon_path("top_uk"), }, { 'label': "{0} {1} ({2})".format(_("Top 100"), _("Artists"), "US"), 'path': plugin.url_for("music_top_artists_by_country", country='united states'), 'icon': get_icon_path("top_us"), }, { 'label': "{0} {1} ({2})".format(_("Top 100"), _("Artists"), "CA"), 'path': plugin.url_for("music_top_artists_by_country", country='canada'), 'icon': get_icon_path("top_ca"), }, { 'label': "{0} {1} ({2})".format(_("Top 100"), _("Artists"), "AU"), 'path': plugin.url_for("music_top_artists_by_country", country='australia'), 'icon': get_icon_path("top_au"), }, { 'label': "{0} {1} ({2})".format(_("Top 100"), _("Tracks"), "NL"), 'path': plugin.url_for("music_top_tracks_by_country", country='netherlands'), 'icon': get_icon_path("trending_nl"), }, { 'label': "{0} {1} ({2})".format(_("Top 100"), _("Tracks"), "UK"), 'path': plugin.url_for("music_top_tracks_by_country", country='united kingdom'), 'icon': get_icon_path("trending_uk"), }, { 'label': "{0} {1} ({2})".format(_("Top 100"), _("Tracks"), "US"), 'path': plugin.url_for("music_top_tracks_by_country", country='united states'), 'icon': get_icon_path("trending_us"), }, { 'label': "{0} {1} ({2})".format(_("Top 100"), _("Tracks"), "CA"), 'path': plugin.url_for("music_top_tracks_by_country", country='canada'), 'icon': get_icon_path("trending_ca"), }, { 'label': "{0} {1} ({2})".format(_("Top 100"), _("Tracks"), "AU"), 'path': plugin.url_for("music_top_tracks_by_country", country='australia'), 'icon': get_icon_path("trending_au"), }] for item in items: item['properties'] = {'fanart_image': get_background_path()} if FORCE == True: plugin.set_view_mode(VIEW) return items else: return items
def add_tvshow_to_library(library_folder, show, play_plugin=None): clean_needed = False id = show['id'] showname = to_utf8(show['seriesname']) if showname == "None" or showname == None: show_folder = os.path.join(library_folder, str(id) + '/') if os.path.isdir(show_folder): return shutil.rmtree(show_folder) playlist_folder = plugin.get_setting(SETTING_TV_PLAYLIST_FOLDER, unicode) if not xbmcvfs.exists(playlist_folder): try: xbmcvfs.mkdir(playlist_folder) except: dialogs.notify(msg=_( 'Creation of [COLOR limegreen]M[/COLOR]etalli[COLOR limegreen]Q[/COLOR] 4[COLOR limegreen]Q[/COLOR]ed Playlist Folder' ), title=_('Failed'), delay=5000, image=get_icon_path("lists")) playlist_file = os.path.join(playlist_folder, id + ".xsp") if not xbmcvfs.exists(playlist_file): playlist_file = xbmcvfs.File(playlist_file, 'w') content = '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?><smartplaylist type="tvshows"><name>%s</name><match>all</match><rule field="path" operator="contains"><value>%s%s</value></rule><rule field="playcount" operator="is"><value>0</value></rule><order direction="ascending">numepisodes</order></smartplaylist>' % ( showname, plugin.get_setting( SETTING_TV_LIBRARY_FOLDER, str).replace( 'special://profile', ''), str(id)) playlist_file.write(str(content)) playlist_file.close() ## Create show folder enc_show = showname.translate(None, '\/:*?"<>|').strip('.') show_folder = os.path.join(library_folder, str(id) + '/') if not xbmcvfs.exists(show_folder): try: xbmcvfs.mkdir(show_folder) except: pass # Create play with file if play_plugin is not None: player_filepath = os.path.join(show_folder, 'player.info') player_file = xbmcvfs.File(player_filepath, 'w') content = "{0}".format(play_plugin) player_file.write(content) player_file.close() # Create nfo file nfo_filepath = os.path.join(show_folder, 'tvshow.nfo') if not xbmcvfs.exists(nfo_filepath): nfo_file = xbmcvfs.File(nfo_filepath, 'w') content = "http://thetvdb.com/index.php?tab=series&id=%s" % str(id) nfo_file.write(content) nfo_file.close() ## Get existing items in library # get all ids of the show ids = [id, show.get('imdb_id', None)] # TODO: add tmdb! ids = [x for x in ids if x] # get show episodes in library try: # get tvshow from library libshows = RPC.VideoLibrary.GetTVShows( properties=["imdbnumber", "title", "year"])['tvshows'] libshows = [ i for i in libshows if str(i['imdbnumber']) in ids or ( str(i['year']) == str(show.get('year', 0)) and equals(show['seriesname'], i['title'])) ] libshow = libshows[0] # get existing (non strm) episodes in library libepisodes = RPC.VideoLibrary.GetEpisodes( filter={ "and": [{ "field": "tvshow", "operator": "is", "value": to_utf8(libshow['title']) }] }, properties=["season", "episode", "file"])['episodes'] libepisodes = [(int(i['season']), int(i['episode'])) for i in libepisodes if not i['file'].endswith(".strm")] except: libepisodes = [] ## Create content strm files for (season_num, season) in show.items(): if season_num == 0: # or not season.has_aired(): continue for (episode_num, episode) in season.items(): if episode_num == 0: continue delete = False if plugin.get_setting(SETTING_AIRED_UNKNOWN, bool) == True: aired_unknown = True else: aired_unknown = False if not episode.has_aired(flexible=aired_unknown): delete = True #break if delete or (season_num, episode_num) in libepisodes: if library_tv_remove_strm(show, show_folder, id, season_num, episode_num): clean_needed = True else: library_tv_strm(show, show_folder, id, season_num, episode_num) files, dirs = xbmcvfs.listdir(show_folder) if not dirs: shutil.rmtree(show_folder) clean_needed = True # if xbmc.getCondVisibility("system.hasaddon(script.qlickplay)"): xbmc.executebuiltin("RunScript(script.qlickplay,info=afteradd)") # elif xbmc.getCondVisibility("system.hasaddon(script.extendedinfo)"): xbmc.executebuiltin("RunScript(script.extendedinfo,info=afteradd)") return clean_needed
def toggle_context_player(): if xbmc.getCondVisibility("Skin.HasSetting(Contexting)") != True: dialogs.notify(msg="Context player", title="Switched off", delay=5000, image=get_icon_path("metalliq")) else: dialogs.notify(msg="Context player", title="Switched on", delay=5000, image=get_icon_path("metalliq")) xbmc.executebuiltin("Skin.ToggleSetting(Contexting)")
def batch_add_tvshows_to_library(library_folder, show): id = show['id'] showname = to_utf8(show['seriesname']) playlist_folder = plugin.get_setting(SETTING_TV_PLAYLIST_FOLDER, unicode) if not xbmcvfs.exists(playlist_folder): try: xbmcvfs.mkdir(playlist_folder) except: dialogs.notify(msg=_('Creation of [COLOR ff0084ff]M[/COLOR]etalli[COLOR ff0084ff]Q[/COLOR] Playlist Folder'), title=_('Failed'), delay=5000, image=get_icon_path("lists")) playlist_file = os.path.join(playlist_folder, id+".xsp") if not xbmcvfs.exists(playlist_file): playlist_file = xbmcvfs.File(playlist_file, 'w') content = '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?><smartplaylist type="tvshows"><name>%s</name><match>all</match><rule field="path" operator="contains"><value>%s%s</value></rule><rule field="playcount" operator="is"><value>0</value></rule><order direction="ascending">numepisodes</order></smartplaylist>' % (showname, plugin.get_setting(SETTING_TV_LIBRARY_FOLDER, unicode).replace('special://profile',''), str(id)) playlist_file.write(str(content)) playlist_file.close() show_folder = os.path.join(library_folder, str(id)+'/') if not xbmcvfs.exists(show_folder): try: xbmcvfs.mkdir(show_folder) except: pass player_filepath = os.path.join(show_folder, 'player.info') player_file = xbmcvfs.File(player_filepath, 'w') content = "default" player_file.write(content) player_file.close() nfo_filepath = os.path.join(show_folder, 'tvshow.nfo') if not xbmcvfs.exists(nfo_filepath): nfo_file = xbmcvfs.File(nfo_filepath, 'w') content = "http://thetvdb.com/index.php?tab=series&id=%s" % str(id) nfo_file.write(content) nfo_file.close() clean_needed = True return clean_needed
def lists_trakt_add_all_to_library(user, slug): items = lists_trakt_show_list(user, slug, raw=True) misc_ids, movie_ids, tv_ids = batch_find_list_ids(items) write_list_id_files(misc_ids, tv_ids, movie_ids, slug, user) write_batch_id_files(tv_ids, movie_ids, misc_ids) dialogs.notify(msg='Conversion done', title='starting batch-add', delay=3000, image=get_icon_path("metalliq")) xbmc.executebuiltin("RunPlugin(plugin://plugin.video.metalliq/movies/batch_add_to_library)")
def root_search_term(term, page): if term == "None": # Get search keyword search_entered = plugin.keyboard(heading=_("search for")) if not search_entered: return else: search_entered = term items = [{ 'label': "All" + ": " + search_entered, 'path': plugin.url_for(root_search_term, term=search_entered, page='1'), 'icon': get_icon_path("search"), }, { 'label': _("Movies") + " - " + _("Search (Trakt)") + ": " + search_entered, 'path': plugin.url_for("trakt_movies_search_term", term=search_entered, page='1'), 'icon': get_icon_path("movies"), }, { 'label': _("Movies") + " - " + _("Search (TMDb)") + ": " + search_entered, 'path': plugin.url_for("tmdb_movies_search_term", term=search_entered, page='1'), 'icon': get_icon_path("movies"), }, { 'label': _("TV shows") + " - " + _("Search (Trakt)") + ": " + search_entered, 'path': plugin.url_for("trakt_tv_search_term", term=search_entered, page='1'), 'icon': get_icon_path("tv"), }, { 'label': _("TV shows") + " - " + _("Search (TMDb)") + ": " + search_entered, 'path': plugin.url_for("tmdb_tv_search_term", term=search_entered, page='1'), 'icon': get_icon_path("tv"), }, { 'label': _("TV shows") + " - " + _("Search (TVDb)") + ": " + search_entered, 'path': plugin.url_for("tvdb_tv_search_term", term=search_entered, page='1'), 'icon': get_icon_path("tv"), }, { 'label': _("Music") + " - " + _("Search artist") + ": " + search_entered, 'path': plugin.url_for("music_search_artist_term", term=search_entered, page='1'), 'icon': get_icon_path("music"), }, { 'label': _("Music") + " - " + _("Search album") + ": " + search_entered, 'path': plugin.url_for("music_search_album_term", term=search_entered, page='1'), 'icon': get_icon_path("music"), }, { 'label': _("Music") + " - " + _("Search track") + ": " + search_entered, 'path': plugin.url_for("music_search_track_term", term=search_entered, page='1'), 'icon': get_icon_path("music"), }, { 'label': _("Live") + " - " + _("Search") + ": " + search_entered, 'path': plugin.url_for("live_search_term", term=search_entered), 'icon': get_icon_path("live"), }, { 'label': _("Lists") + " - " + _("Search") + ": " + search_entered, 'path': plugin.url_for("lists_search_for_lists_term", term=search_entered, page='1'), 'icon': get_icon_path("lists"), }] fanart = plugin.addon.getAddonInfo('fanart') for item in items: item['properties'] = {'fanart_image': get_background_path()} return items
def root_search(): """ Search directory """ items = [{ 'label': "All", 'path': plugin.url_for(root_search_term, page='1'), 'icon': get_icon_path("search"), }, { 'label': _("Movies") + ": " + _("Search (Trakt)"), 'path': plugin.url_for("trakt_movies_search", page='1'), 'icon': get_icon_path("movies"), }, { 'label': _("Movies") + ": " + _("Search (TMDb)"), 'path': plugin.url_for("tmdb_movies_search", page='1'), 'icon': get_icon_path("movies"), }, { 'label': _("TV shows") + ": " + _("Search (Trakt)"), 'path': plugin.url_for("trakt_tv_search", page='1'), 'icon': get_icon_path("tv"), }, { 'label': _("TV shows") + ": " + _("Search (TMDb)"), 'path': plugin.url_for("tmdb_tv_search"), 'icon': get_icon_path("tv"), }, { 'label': _("TV shows") + ": " + _("Search (TVDb)"), 'path': plugin.url_for("tvdb_tv_search"), 'icon': get_icon_path("tv"), }, { 'label': _("Music") + ": " + _("Search artist"), 'path': plugin.url_for("music_search_artist"), 'icon': get_icon_path("music"), }, { 'label': _("Music") + ": " + _("Search album"), 'path': plugin.url_for("music_search_album"), 'icon': get_icon_path("music"), }, { 'label': _("Music") + ": " + _("Search track"), 'path': plugin.url_for("music_search_track"), 'icon': get_icon_path("music"), }, { 'label': _("Live") + ": " + _("Search"), 'path': plugin.url_for("live_search"), 'icon': get_icon_path("live"), }, { 'label': _("Lists") + ": " + _("Search"), 'path': plugin.url_for("lists_trakt_search_for_lists"), 'icon': get_icon_path("lists"), }] fanart = plugin.addon.getAddonInfo('fanart') for item in items: item['properties'] = {'fanart_image': get_background_path()} return items
def music(): items = [ { 'label': _("Search"), 'path': plugin.url_for("music_search"), 'icon': get_icon_path("search"), }, { 'label': _("Top Artists"), 'path': plugin.url_for("music_top_artists"), 'icon': get_icon_path("top_rated"), }, { 'label': _("Top Tracks"), 'path': plugin.url_for("music_top_tracks"), 'icon': get_icon_path("trending"), }, { 'label': _("Top Artists (NL)"), 'path': plugin.url_for("music_top_artists_by_country", country='netherlands'), 'icon': get_icon_path("top_nl"), }, { 'label': _("Top Artists (UK)"), 'path': plugin.url_for("music_top_artists_by_country", country='united kingdom'), 'icon': get_icon_path("top_uk"), }, { 'label': _("Top Artists (US)"), 'path': plugin.url_for("music_top_artists_by_country", country='united states'), 'icon': get_icon_path("top_us"), }, { 'label': _("Top Artists (CA)"), 'path': plugin.url_for("music_top_artists_by_country", country='canada'), 'icon': get_icon_path("top_ca"), }, { 'label': _("Top Artists (AU)"), 'path': plugin.url_for("music_top_artists_by_country", country='australia'), 'icon': get_icon_path("top_au"), }, { 'label': _("Top Tracks (NL)"), 'path': plugin.url_for("music_top_tracks_by_country", country='netherlands'), 'icon': get_icon_path("trending_nl"), }, { 'label': _("Top Tracks (UK)"), 'path': plugin.url_for("music_top_tracks_by_country", country='united kingdom'), 'icon': get_icon_path("trending_uk"), }, { 'label': _("Top Tracks (US)"), 'path': plugin.url_for("music_top_tracks_by_country", country='united states'), 'icon': get_icon_path("trending_us"), }, { 'label': _("Top Tracks (CA)"), 'path': plugin.url_for("music_top_tracks_by_country", country='canada'), 'icon': get_icon_path("trending_ca"), }, { 'label': _("Top Tracks (AU)"), 'path': plugin.url_for("music_top_tracks_by_country", country='australia'), 'icon': get_icon_path("trending_au"), } ] fanart = plugin.addon.getAddonInfo('fanart') for item in items: item['properties'] = {'fanart_image' : get_background_path()} return items
def write_batch_id_files(tv_ids, movie_ids, misc_ids): if len(tv_ids) > 0: shows_import_file_path = "special://profile/addon_data/plugin.video.metalliq/shows_to_add.txt" if xbmcvfs.exists(shows_import_file_path): os.remove(xbmc.translatePath(shows_import_file_path)) tv_id_list = "" for id in tv_ids: tv_id_list = tv_id_list + str(id) + '\n' if not xbmcvfs.exists(shows_import_file_path): batch_add_file = xbmcvfs.File(shows_import_file_path, 'w') batch_add_file.write(tv_id_list) batch_add_file.close() dialogs.notify(msg='Converting tvshows, seasons & episodes', title='to id-list for batch-adding', delay=3000, image=get_icon_path("tvshows")) if len(movie_ids) > 0: movies_import_file_path = "special://profile/addon_data/plugin.video.metalliq/movies_to_add.txt" if xbmcvfs.exists(movies_import_file_path): os.remove(xbmc.translatePath(movies_import_file_path)) movie_id_list = "" for id in movie_ids: movie_id_list = movie_id_list + str(id) + '\n' if not xbmcvfs.exists(movies_import_file_path): batch_add_file = xbmcvfs.File(movies_import_file_path, 'w') batch_add_file.write(movie_id_list) batch_add_file.close() dialogs.notify(msg='Converting movies', title='to id-list for batch-adding', delay=3000, image=get_icon_path("movies")) if len(misc_ids) > 0: misc_import_file_path = "special://profile/addon_data/plugin.video.metalliq/misc_to_add.txt" if xbmcvfs.exists(misc_import_file_path): os.remove(xbmc.translatePath(misc_import_file_path)) misc_id_list = "" for id in misc_ids: misc_id_list = misc_id_list + str(id) + '\n' if not xbmcvfs.exists(misc_import_file_path): batch_add_file = xbmcvfs.File(misc_import_file_path, 'w') batch_add_file.write(misc_id_list) batch_add_file.close() dialogs.notify(msg='Converting miscellaneous', title='to id-list for batch-adding', delay=3000, image=get_icon_path("tvshows"))
def sources_setup(): movielibraryfolder = plugin.get_setting(SETTING_MOVIES_LIBRARY_FOLDER, unicode) try: meta.library.movies.auto_movie_setup(movielibraryfolder) dialogs.notify(msg="{0}: {1} {2}".format(_('Movies'), _('Configure'), _("Library").lower()), title=_('Done'), delay=1000, image=get_icon_path("movies")) except: dialogs.notify(msg="{0}: {1} {2}".format(_("Movies"), _('Configure'), _("Library").lower()), title=_('Failed for %s') % _('Movies'), delay=1000, image=get_icon_path("movies")) tvlibraryfolder = plugin.get_setting(SETTING_TV_LIBRARY_FOLDER, unicode) try: meta.library.tvshows.auto_tvshows_setup(tvlibraryfolder) dialogs.notify(msg="{0}: {1} {2}".format(_('TV shows'), _('Configure'), _("Library").lower()), title=_('Done'), delay=1000, image=get_icon_path("tv")) except: dialogs.notify(msg="{0}: {1} {2}".format(_("TV shows"), _('Configure'), _("Library").lower()), title=_('Failed for %s') % _('TV shows'), delay=1000, image=get_icon_path("tv")) musiclibraryfolder = plugin.get_setting(SETTING_MUSIC_LIBRARY_FOLDER, unicode) try: meta.library.music.auto_music_setup(musiclibraryfolder) dialogs.notify(msg="{0}: {1} {2}".format(_('Music'), _('Configure'), _("Library").lower()), title=_('Done'), delay=1000, image=get_icon_path("music")) except: dialogs.notify(msg="{0}: {1} {2}".format(_("Music"), _('Configure'), _("Library").lower()), title=_('Failed for %s') % _('Music'), delay=1000, image=get_icon_path("music")) livelibraryfolder = plugin.get_setting(SETTING_LIVE_LIBRARY_FOLDER, unicode) try: meta.library.live.auto_live_setup(livelibraryfolder) dialogs.notify(msg="{0}: {1} {2}".format(_('TV'), _('Configure'), _("Library").lower()), title=_('Done'), delay=1000, image=get_icon_path("live")) except: dialogs.notify(msg="{0}: {1} {2}".format(_('TV'), _('Configure'), _("Library").lower()), title=_('Failed for %s') % _('TV'), delay=1000, image=get_icon_path("live")) return True
def play_channel_from_guide(channel, program, language, mode): # Get channelers to use if mode == 'select': play_plugin = ADDON_PICKER.id elif mode == 'default': play_plugin = plugin.get_setting(SETTING_LIVE_DEFAULT_CHANNELER, unicode) else: play_plugin = mode channelers = active_channelers("live") channelers = [p for p in channelers if p.id == play_plugin] or channelers if not channelers: dialogs.notify(msg="{0} {1} {2}".format(_("No cache").replace(_("Cache").lower(),_("TV")), _("Player").lower(), _("Enabled").lower()), title=_("Error"), delay=5000, image=get_icon_path("live")) action_cancel() return # Get parameters params = {} for lang in get_needed_langs(channelers): params[lang] = get_channel_parameters(channel, program, language) params[lang] = to_unicode(params[lang]) # Go for it link = on_play_video(mode, channelers, params) if link: action_play({ 'label': channel, 'path': link, 'is_playable': True, 'info_type': 'video', })
def tv(): """ TV directory """ items = [ { 'label': _("Search"), 'path': plugin.url_for(tv_search), 'icon': get_icon_path("search"), }, { 'label': _("Genres"), 'path': plugin.url_for(tv_genres), 'icon': get_icon_path("genres"), }, { 'label': _("Popular"), 'path': plugin.url_for(tv_most_popular, page='1'), 'icon': get_icon_path("popular"), }, { 'label': _("On the air"), 'path': plugin.url_for(tv_now_playing, page='1'), 'icon': get_icon_path("ontheair"), }, { 'label': _("Top rated"), 'path': plugin.url_for(tv_top_rated, page='1'), 'icon': get_icon_path("top_rated"), }, { 'label': _("Trakt collection"), 'path': plugin.url_for(tv_trakt_collection), 'icon': get_icon_path("traktcollection"), 'context_menu': [(_("Add to library"), "RunPlugin({0})".format( plugin.url_for(tv_trakt_collection_to_library)))], }, { 'label': _("Trakt watchlist"), 'path': plugin.url_for(tv_trakt_watchlist), 'icon': get_icon_path("traktwatchlist"), 'context_menu': [(_("Add to library"), "RunPlugin({0})".format( plugin.url_for(tv_trakt_watchlist_to_library)))], }, { 'label': _("Next episodes"), 'path': plugin.url_for(tv_trakt_next_episodes), 'icon': get_icon_path("traktnextepisodes"), }, { 'label': _("My calendar"), 'path': plugin.url_for(tv_trakt_calendar), 'icon': get_icon_path("traktcalendar"), }, { 'label': _("Trakt recommendations"), 'path': plugin.url_for(tv_trakt_recommendations), 'icon': get_icon_path("traktrecommendations"), }, ] fanart = plugin.addon.getAddonInfo('fanart') for item in items: item['properties'] = {'fanart_image': fanart} return items
def lists_search_for_lists_term(term, page): lists, pages = trakt.search_for_list(term, page) page = int(page) pages = int(pages) items = [] for list in lists: if "list" in list: list_info = list["list"] else: continue name = list_info["name"] user = list_info["username"] slug = list_info["ids"]["slug"] total = list_info["item_count"] info = {} info['title'] = name if "description" in list_info: info["plot"] = list_info["description"] else: info["plot"] = _("No description available") if user != None and total != None and total != 0: items.append({ 'label': "{0} - {1} ({2})".format(to_utf8(name), to_utf8(user), total), 'path': plugin.url_for("lists_trakt_show_list", user=user, slug=slug), 'context_menu': [(_("Scan item to library"), "RunPlugin({0})".format( plugin.url_for("lists_trakt_add_all_to_library", user=user, slug=slug))), ("{0} ({1})".format(_("Play"), _("Random").lower()), "RunPlugin({0})".format( plugin.url_for("lists_trakt_play_random", user=user, slug=slug)))], 'info': info, 'icon': get_icon_path("traktlikedlists"), 'thumbnail': get_icon_path("traktlikedlists"), }) fanart = plugin.addon.getAddonInfo('fanart') for item in items: item['properties'] = {'fanart_image': get_background_path()} if pages > page: items.append({ 'label': _("Next page").format() + " >> (%s/%s)" % (page + 1, pages), 'path': plugin.url_for("lists_search_for_lists_term", term=term, page=page + 1), 'icon': get_icon_path("item_next"), 'thumbnail': get_icon_path("item_next"), }) if FORCE == True: return plugin.finish(items=items, sort_methods=SORT, view_mode=VIEW) else: return plugin.finish(items=items, sort_methods=SORT)
def movies(): """ Movies directory """ items = [ { 'label': _("Search"), 'path': plugin.url_for(movies_search), 'icon': get_icon_path("search"), }, { 'label': _("Genres"), 'path': plugin.url_for(movies_genres), 'icon': get_icon_path("genres"), }, { 'label': _("Popular"), 'path': plugin.url_for(movies_most_popular, page='1'), 'icon': get_icon_path("popular"), }, { 'label': _("In theatres"), 'path': plugin.url_for(movies_now_playing, page='1'), 'icon': get_icon_path("intheatres"), }, { 'label': _("Top rated"), 'path': plugin.url_for(movies_top_rated, page='1'), 'icon': get_icon_path("top_rated"), }, { 'label': _("Blockbusters"), 'path': plugin.url_for(movies_blockbusters, page='1'), 'icon': get_icon_path("most_voted"), }, { 'label': _("Trakt collection"), 'path': plugin.url_for(movies_trakt_collection), 'icon': get_icon_path("traktcollection"), 'context_menu': [(_("Add to library"), "RunPlugin({0})".format( plugin.url_for(movies_trakt_collection_to_library)))], }, { 'label': _("Trakt watchlist"), 'path': plugin.url_for(movies_trakt_watchlist), 'icon': get_icon_path("traktwatchlist"), 'context_menu': [(_("Add to library"), "RunPlugin({0})".format( plugin.url_for(movies_trakt_watchlist_to_library)))], }, { 'label': _("Trakt recommendations"), 'path': plugin.url_for(movies_trakt_recommendations), 'icon': get_icon_path("traktrecommendations"), }, ] fanart = plugin.addon.getAddonInfo('fanart') for item in items: item['properties'] = {'fanart_image': fanart} return items
def batch_find_list_ids(items): tv_ids = [] misc_ids = [] movie_ids = [] import_tvdb() for item in items: if not isinstance(item, type): if "'tvdb': " in str(item) or "'tvdb_id': " in str(item): if "'tvdb': " in str(item): pre_tvdb = str(item).split("'tvdb': ") elif "'tvdb_id': " in str(item): pre_tvdb = str(item).split("'tvdb_id': ") if len(pre_tvdb) == 2: pro_tvdb = str(pre_tvdb[1]).split(",") elif len(pre_tvdb) == 3: pro_tvdb = str(pre_tvdb[2]).split(",") tvdb_id = str(pro_tvdb[0]) if not tvdb_id or tvdb_id == None or tvdb_id == "None": pre_imdb = str(item).split("u'imdb': u'") pro_imdb = str(pre_imdb[1]).split("'") imdb = str(pro_imdb[0]) tvdb_id = tvdb.search_by_imdb(imdb) if not tvdb_id: misc_ids.append(imdb) if not tvdb_id in tv_ids and tvdb_id != None and tvdb_id != "None": tv_ids.append(tvdb_id) elif "'tmdb': " in str(item): pre_tmdb = str(item).split("'tmdb': ") pro_tmdb = str(pre_tmdb[1]).split(",") tmdb = str(pro_tmdb[0]) if not tmdb or tmdb == None or tmdb == "None": pre_imdb = str(item).split("u'imdb': u'") pro_imdb = str(pre_imdb[1]).split("'") imdb = str(pro_imdb[0]) tvdb_id = tvdb.search_by_imdb(imdb) if not imdb and not tvdb_id: return dialogs.notify(msg="No id found for item", title='', delay=3000, image=get_icon_path("chappaai")) if imdb and not tvdb_id: if imdb not in movie_ids and imdb != None and imdb != "None": movie_ids.append(imdb) elif tvdb_id: if not tvdb_id in tv_ids and tvdb_id != None and tvdb_id != "None": tv_ids.append(tvdb_id) if not tmdb in movie_ids and tmdb != None and tmdb != "None": movie_ids.append(tmdb) else: if "tvshowtitle" in str(item["info"]): if item["info"]["tvdb_id"] != None and item["info"][ "tvdb_id"] != "" and str( item["info"]["tvdb_id"]) not in tv_ids: tv_ids.append(str(item["info"]["tvdb_id"])) elif item["info"]["imdb_id"] != None and item["info"][ "imdb_id"] != "" and str( item["info"]["imdb_id"]) not in tv_ids: tv_ids.append(str(item["info"]["imdb_id"])) else: if item["info"]["tmdb"] != None and item["info"][ "tmdb"] != "" and str( item["info"]["tmdb"]) not in movie_ids: movie_ids.append(str(item["info"]["tmdb"])) elif item["info"]["imdb_id"] != None and item["info"][ "imdb_id"] != "" and str( item["info"]["imdb_id"]) not in movie_ids: movie_ids.append(str(item["info"]["imdb_id"])) return misc_ids, movie_ids, tv_ids
def music_search_term(term, page): items = [{ 'label': "{0}: '{1}' - {2} ({3})".format(_("Search"), term, _("Albums"), "LastFM"), 'path': plugin.url_for("music_search_album_term", term=term, page='1'), 'icon': get_icon_path("music"), 'thumbnail': get_icon_path("music"), }, { 'label': "{0}: '{1}' - {2} ({3})".format(_("Search"), term, _("Artists"), "LastFM"), 'path': plugin.url_for("music_search_artist_term", term=term, page='1'), 'icon': get_icon_path("music"), 'thumbnail': get_icon_path("music"), }, { 'label': "{0}: '{1}' - {2} ({3})".format(_("Search"), term, _("Tracks"), "LastFM"), 'path': plugin.url_for("music_search_track_term", term=term, page='1'), 'icon': get_icon_path("music"), 'thumbnail': get_icon_path("music"), }, { 'label': "{0}: '{1}' - {2} ({3})".format(_("Search"), term, _("Channels"), "Live addons"), 'path': plugin.url_for("live_search_term", term=term), 'icon': get_icon_path("live"), 'thumbnail': get_icon_path("live"), }, { 'label': "{0}: '{1}' - {2} ({3})".format(_("Search"), term, _("Playlists"), "Trakt"), 'path': plugin.url_for("lists_search_for_lists_term", term=term, page='1'), 'icon': get_icon_path("lists"), 'thumbnail': get_icon_path("lists"), }, { 'label': "{0}: '{1}' - {2} ({3})".format(_("Search"), term, _("Movies"), "TMDb"), 'path': plugin.url_for("tmdb_movies_search_term", term=term, page='1'), 'icon': get_icon_path("movies"), 'thumbnail': get_icon_path("movies"), }, { 'label': "{0}: '{1}' - {2} ({3})".format(_("Search"), term, _("Movies"), "Trakt"), 'path': plugin.url_for("trakt_movies_search_term", term=term, page='1'), 'icon': get_icon_path("movies"), 'thumbnail': get_icon_path("movies"), }, { 'label': "{0}: '{1}' - {2} ({3})".format(_("Search"), term, _("TV shows"), "TMDb"), 'path': plugin.url_for("tmdb_tv_search_term", term=term, page='1'), 'icon': get_icon_path("tv"), 'thumbnail': get_icon_path("tv"), }, { 'label': "{0}: '{1}' - {2} ({3})".format(_("Search"), term, _("TV shows"), "Trakt"), 'path': plugin.url_for("trakt_tv_search_term", term=term, page='1'), 'icon': get_icon_path("tv"), 'thumbnail': get_icon_path("tv"), }, { 'label': "{0}: '{1}' - {2} ({3})".format(_("Search"), term, _("TV shows"), "TVDb"), 'path': plugin.url_for("tv_search_term", term=term, page='1'), 'icon': get_icon_path("search"), 'thumbnail': get_icon_path("search"), }, { 'label': "{0}: '{1}' - {2} ({3})".format(_("Search"), term, _("Music"), plugin.addon.getAddonInfo('name')), 'path': plugin.url_for("music_search_term", term=term, page='1'), 'icon': get_icon_path("search"), 'thumbnail': get_icon_path("search"), }, { 'label': "{0} {1}".format(_("Edit"), _("Search string").lower()), 'path': plugin.url_for("music_search_edit", term=term), 'icon': get_icon_path("search"), 'thumbnail': get_icon_path("search"), }] for item in items: item['properties'] = {'fanart_image': get_background_path()} if FORCE == True: plugin.set_view_mode(VIEW) return items else: return items
def _lists_trakt_show_list(list_items): genres_dict = trakt.trakt_get_genres("tv") if type(list_items) == str: import urllib list_items = eval(urllib.unquote(list_items)) items = [] for list_item in list_items: item = None item_type = list_item["type"] if item_type == "show": tvdb_id = list_item["show"]["ids"]["tvdb"] if tvdb_id != "" and tvdb_id != None: show = list_item["show"] info = get_tvshow_metadata_trakt(show, genres_dict) context_menu = [ (_("Scan item to library"), "RunPlugin({0})".format( plugin.url_for("tv_add_to_library", id=tvdb_id))), (_("TV show information"), 'Action(Info)'), ("{0}".format( _("Remove from library").replace( _("Library").lower(), _("Playlist").lower())), "RunPlugin({0})".format( plugin.url_for("lists_remove_show_from_list", src="tvdb", id=tvdb_id))) ] if plugin.get_setting(SETTING_TRAKT_LIST_ARTWORK, bool) == False: item = ({ 'label': info['title'], 'path': plugin.url_for("tv_tvshow", id=tvdb_id), 'context_menu': context_menu, 'thumbnail': info['poster'], 'icon': get_icon_path("tv"), 'poster': info['poster'], 'properties': { 'fanart_image': info['fanart'] }, 'info_type': 'video', 'stream_info': { 'video': {} }, 'info': info }) else: item = make_tvshow_item(info) else: item = None elif item_type == "season": tvdb_id = list_item["show"]["ids"]["tvdb"] season = list_item["season"] show = list_item["show"] show_info = get_tvshow_metadata_trakt(show, genres_dict) season_info = get_season_metadata_trakt(show_info, season, genres_dict) label = "{0} - Season {1}".format(show["title"], season["number"]) context_menu = [ (_("Scan item to library"), "RunPlugin({0})".format( plugin.url_for("tv_add_to_library", id=tvdb_id))), ("%s %s" % (_("Season"), _("Information").lower()), 'Action(Info)'), ("{0}".format( _("Remove from library").replace( _("Library").lower(), _("Playlist").lower())), "RunPlugin({0})".format( plugin.url_for("lists_remove_season_from_list", src="tvdb", id=tvdb_id, season=list_item["season"]["number"]))) ] item = ({ 'label': label, 'path': plugin.url_for("tv_season", id=tvdb_id, season_num=list_item["season"]["number"]), 'context_menu': context_menu, 'info': season_info, 'thumbnail': season_info['poster'], 'icon': get_icon_path("tv"), 'poster': season_info['poster'], 'properties': { 'fanart_image': season_info['fanart'] }, }) elif item_type == "episode": tvdb_id = list_item["show"]["ids"]["tvdb"] episode = list_item["episode"] show = list_item["show"] season_number = episode["season"] episode_number = episode["number"] show_info = get_tvshow_metadata_trakt(show, genres_dict) episode_info = get_episode_metadata_trakt(show_info, episode) label = "{0} - S{1}E{2} - {3}".format(show_info["title"], season_number, episode_number, episode_info["title"]) context_menu = [ ("{0} {1}...".format(_("Select"), _("Stream").lower()), "PlayMedia({0})".format( plugin.url_for("tv_play", id=tvdb_id, season=season_number, episode=episode_number, mode='select'))), ("%s %s" % (_("Episode"), _("Information").lower()), 'Action(Info)'), (_("Add to playlist"), "RunPlugin({0})".format( plugin.url_for("lists_add_episode_to_list", src='tvdb', id=tvdb_id, season=season_number, episode=episode_number))), ("{0}".format( _("Remove from library").replace( _("Library").lower(), _("Playlist").lower())), "RunPlugin({0})".format( plugin.url_for("lists_remove_season_from_list", src="tvdb", id=tvdb_id, season=season_number, episode=episode_number))) ] item = ({ 'label': label, 'path': plugin.url_for("tv_play", id=tvdb_id, season=season_number, episode=episode_number, mode='default'), 'context_menu': context_menu, 'info': episode_info, 'is_playable': True, 'info_type': 'video', 'stream_info': { 'video': {} }, 'thumbnail': episode_info['poster'], 'poster': episode_info['poster'], 'icon': get_icon_path("tv"), 'properties': { 'fanart_image': episode_info['fanart'] }, }) elif item_type == "movie": movie = list_item["movie"] movie_info = get_trakt_movie_metadata(movie) try: tmdb_id = movie_info['tmdb'] except: tmdb_id = "" try: imdb_id = movie_info['imdb'] except: imdb_id = "" if tmdb_id != None and tmdb_id != "": src = "tmdb" id = tmdb_id elif imdb_id != None and mdb_id != "": src = "imdb" id = imdb_id else: src = "" id = "" if src == "": item = None else: if xbmc.getCondVisibility("system.hasaddon(script.qlickplay)"): context_menu = [ (_("Scan item to library"), "RunPlugin({0})".format( plugin.url_for("movies_add_to_library", src=src, id=id))), ("%s %s" % (_("Movie"), _("Trailer").lower()), "RunScript(script.qlickplay,info=playtrailer,id={0})". format(id)), ("[COLOR ff0084ff]Q[/COLOR]lick[COLOR ff0084ff]P[/COLOR]lay", "RunScript(script.qlickplay,info=movieinfo,id={0})". format(id)), ("%s %s (%s)" % ("Recommended", _("movies"), "TMDb"), "ActivateWindow(10025,plugin://script.qlickplay/?info=similarmovies&id={0})" .format(id)) ] elif xbmc.getCondVisibility( "system.hasaddon(script.extendedinfo)"): context_menu = [ (_("Scan item to library"), "RunPlugin({0})".format( plugin.url_for("movies_add_to_library", src=src, id=id))), ("%s %s" % (_("Movie"), _("Trailer").lower()), "RunScript(script.extendedinfo,info=playtrailer,id={0})" .format(id)), ((_("Extended movie info"), _("Extended movie info"), "RunScript(script.extendedinfo,info=extendedinfo,id={0})" .format(id)), ("%s %s (%s)" % ("Recommended", _("movies"), "TMDb"), "ActivateWindow(10025,plugin://script.extendedinfo/?info=similarmovies&id={0})" .format(id))) ] else: context_menu = [ (_("Scan item to library"), "RunPlugin({0})".format( plugin.url_for("movies_add_to_library", src=src, id=id))) ] context_menu.append( ("%s %s (%s)" % ("Related", _("movies"), "Trakt"), "ActivateWindow(10025,{0})".format( plugin.url_for("movies_related", id=id, page=1)))) context_menu.append( ("{0} {1}...".format(_("Select"), _("Stream").lower()), "PlayMedia({0})".format( plugin.url_for("movies_play", src=src, id=id, mode='select')))) context_menu.append( (_("Add to playlist"), "RunPlugin({0})".format( plugin.url_for("lists_add_movie_to_list", src=src, id=id)))) context_menu.append( (_("Movie information"), 'Action(Info)')) if imdb_id != None and imdb_id != "": context_menu.append( ("Show Actors", "ActivateWindow(10025,{0})".format( plugin.url_for("people_list_movie_people", id=imdb_id, source="imdb", fanart=get_background_path())))) elif tmdb_id != None and tmdb_id != "": context_menu.append( ("Show Actors", "ActivateWindow(10025,{0})".format( plugin.url_for("people_list_movie_people", id=tmdb_id, source="tmdb", fanart=get_background_path())))) item = make_movie_item(movie_info, True) elif item_type == "person": person_id = list_item['person']['ids']['trakt'] person_tmdb_id = list_item['person']['ids']['tmdb'] context_menu = [] try: import_tmdb() person_images = tmdb.People( person_tmdb_id).images()['profiles'] person_image = 'https://image.tmdb.org/t/p/w640' + person_images[ 0]['file_path'] except: person_image = '' person_name = to_utf8(list_item['person']['name']) item = ({ 'label': person_name, 'path': plugin.url_for("trakt_movies_person", person_id=person_id), 'context_menu': context_menu, #'info': season_info, 'thumbnail': person_image, 'icon': get_icon_path("movies"), 'poster': person_image, 'properties': { 'fanart_image': person_image }, }) if item is not None: items.append(item) for item in items: item['properties'] = {'fanart_image': get_background_path()} return items
def music_search_track_term(term, page): search_results = lastfm.search_track(term, page) tracks = search_results["trackmatches"]["track"] items_per_page = search_results["opensearch:itemsPerPage"] start_index = search_results["opensearch:startIndex"] total_results = search_results["opensearch:totalResults"] items = [] for track in tracks: large_image = track["image"][-1]["#text"] track_name = to_utf8(track["name"]) artist_name = to_utf8(track["artist"]) context_menu = [("{0} {1} {2}...".format(_("Select"), _("Audio").lower(), _("Stream").lower()), "PlayMedia({0})".format( plugin.url_for("music_play_audio", artist_name=artist_name, track_name=track_name, mode='context'))), (_("Scan item to library"), "RunPlugin({0})".format( plugin.url_for("music_add_to_library", artist_name=artist_name, track_name=track_name))), ("{0} {1} {2}...".format(_("Select"), _("Video").lower(), _("Stream").lower()), "RunPlugin({0})".format( plugin.url_for("music_play_video", artist_name=artist_name, track_name=track_name, mode='context')))] item = { 'label': "{0} - {1}".format(artist_name, track_name), 'path': plugin.url_for("music_play_audio", artist_name=artist_name, track_name=track_name), 'thumbnail': large_image, 'icon': "DefaultMusic.png", 'poster': large_image, 'info': { 'artist': artist_name, }, 'info_type': 'music', 'context_menu': context_menu } items.append(item) if start_index + items_per_page < total_results: items.append({ 'label': _("Next >>"), 'icon': get_icon_path("item_next"), 'path': plugin.url_for("music_search_track_term", term=term, page=int(page) + 1) }) if FORCE == True: plugin.set_view_mode(VIEW) return items else: return items
@plugin.route('/clear_cache') def clear_cache(): """ Clear all caches """ for filename in os.listdir(plugin.storage_path): file_path = os.path.join(plugin.storage_path, filename) try: if os.path.isfile(file_path): os.unlink(file_path) elif os.path.isdir(file_path): shutil.rmtree(file_path) except Exception, e: traceback.print_exc() dialogs.notify(msg='Cache', title='Deleted', delay=5000, image=get_icon_path("metalliq")) @plugin.route('/update_library') def update_library(): is_updating = get_property("updating_library") is_syncing = get_property("syncing_library") now = time.time() if is_syncing and now - int(is_syncing) < plugin.get_setting( SETTING_UPDATE_LIBRARY_INTERVAL, int) * 60: plugin.log.info("Skipping library sync") else: if plugin.get_setting(SETTING_LIBRARY_SYNC_COLLECTION, bool) == True or plugin.get_setting( SETTING_LIBRARY_SYNC_WATCHLIST, bool) == True:
def live(): """ Live TV directory """ library_channels = get_library_channels() if library_channels: items = [ { 'label': "{0} {1}".format(_("View your"), _("Channels").lower()), 'path': plugin.url_for("browse_library_channels"), 'icon': get_icon_path("library"), }, { 'label': "{0}: {1}".format(_("Search"), _("Channel")), 'path': plugin.url_for("live_search"), 'icon': get_icon_path("search"), }, ] else: items = [ { 'label': "{0}: {1}".format(_("Search"), _("Channel")), 'path': plugin.url_for("live_search"), 'icon': get_icon_path("search"), }, ] channels = get_channels() if channels: items.append({ 'label': _("Remove %s") % _("Channels").lower(), 'path': plugin.url_for("clear_channels"), 'icon': get_icon_path("clear"), }) for (index, channel) in enumerate(channels): channelori = channel channel = to_utf8(channel) if channel in library_channels: context_menu = [] else: context_menu = [(_("Scan item to library"), "RunPlugin({0})".format( plugin.url_for("live_add_to_library", channel=channel, mode="library")))] if channel in channels: context_menu.append((_("Remove %s") % _("Channel").lower(), "RunPlugin({0})".format( plugin.url_for("remove_channel", channel=channel)))) if index != 0: context_menu.append((_("Move up"), "RunPlugin({0})".format( plugin.url_for("move_channel_up", channel=channel)))) if index != len(channels) - 1: context_menu.append((_("Move down"), "RunPlugin({0})".format( plugin.url_for("move_channel_down", channel=channel)))) items.append({ 'label': channel, 'path': plugin.url_for("live_play", channel=channel, program="None", language="en", mode="external"), 'icon': "DefaultVideo.png", 'context_menu': context_menu, }) return items
def lists_trakt_add_all_to_library(user, slug): items = lists_trakt_show_list(user, slug) tv_ids = [] movie_ids = [] for item in items: if not isinstance(item, type): if "/tv/" in str(item): if "/tv/play/" in str(item): pre_tvdb = str(item).split(" (plugin://plugin.video.metalliq/tv/play/") pro_tvdb = str(pre_tvdb[1]).split("/") tvdb = str(pro_tvdb[0]) if not tvdb in tv_ids: tv_ids.append(tvdb) elif "/tv/tvdb/" in str(item): pre_tvdb = str(item).split(" (plugin://plugin.video.metalliq/tv/tvdb/") if "/" in str(pre_tvdb[1]): pro_tvdb = str(pre_tvdb[1]).split("/") else: pro_tvdb = str(pre_tvdb[1]).split(")") tvdb = str(pro_tvdb[0]) if not tvdb in tv_ids: tv_ids.append(tvdb) elif "/movies/" in str(item): if "/tmdb/" in str(item): pre_tmdb = str(item).split(" (plugin://plugin.video.metalliq/movies/play/tmdb/") pro_tmdb = str(pre_tmdb[1]).split("/") tmdb = str(pro_tmdb[0]) if not tmdb in movie_ids: movie_ids.append(tmdb) elif "/imdb/" in str(item): pre_imdb = str(item).split(" (plugin://plugin.video.metalliq/movies/play/imdb/") pro_imdb = str(pre_imdb[1]).split("/") imdb = str(pro_imdb[0]) if not imdb in movie_ids: movie_ids.append(imdb) else: if "tvshowtitle" in str(item["info"]): if item["info"]["tvdb_id"] != None and item["info"]["tvdb_id"] != "" and str(item["info"]["tvdb_id"]) not in tv_ids: tv_ids.append(str(item["info"]["tvdb_id"])) elif item["info"]["imdb_id"] != None and item["info"]["imdb_id"] != "" and str(item["info"]["imdb_id"]) not in tv_ids: tv_ids.append(str(item["info"]["imdb_id"])) else: if item["info"]["tmdb"] != None and item["info"]["tmdb"] != "" and str(item["info"]["tmdb"]) not in movie_ids: movie_ids.append(str(item["info"]["tmdb"])) elif item["info"]["imdb_id"] != None and item["info"]["imdb_id"] != "" and str(item["info"]["imdb_id"]) not in movie_ids: movie_ids.append(str(item["info"]["imdb_id"])) if len(tv_ids) > 0: shows_list_file_path = "special://profile/addon_data/plugin.video.metalliq/shows_from_" + slug + "_by_" + user + ".txt" shows_import_file_path = "special://profile/addon_data/plugin.video.metalliq/shows_to_add.txt" if xbmcvfs.exists(shows_list_file_path): os.remove(xbmc.translatePath(shows_import_file_path)) if xbmcvfs.exists(shows_import_file_path): os.remove(xbmc.translatePath(shows_import_file_path)) tv_id_list = "" for id in tv_ids: tv_id_list = tv_id_list + str(id) + '\n' if not xbmcvfs.exists(shows_list_file_path): batch_add_file = xbmcvfs.File(shows_list_file_path, 'w') batch_add_file.write(tv_id_list) batch_add_file.close() if not xbmcvfs.exists(shows_import_file_path): batch_add_file = xbmcvfs.File(shows_import_file_path, 'w') batch_add_file.write(tv_id_list) batch_add_file.close() plugin.notify(msg='TVShows, seasons & episodes', title='Converted to list.txt', delay=3000, image=get_icon_path("tvshows")) if len(movie_ids) > 0: movies_list_file_path = "special://profile/addon_data/plugin.video.metalliq/movies_from_" + slug + "_by_" + user + ".txt" movies_import_file_path = "special://profile/addon_data/plugin.video.metalliq/movies_to_add.txt" if xbmcvfs.exists(movies_list_file_path): os.remove(xbmc.translatePath(movies_import_file_path)) if xbmcvfs.exists(movies_import_file_path): os.remove(xbmc.translatePath(movies_import_file_path)) movie_id_list = "" for id in movie_ids: movie_id_list = movie_id_list + str(id) + '\n' if not xbmcvfs.exists(movies_list_file_path): batch_add_file = xbmcvfs.File(movies_list_file_path, 'w') batch_add_file.write(movie_id_list) batch_add_file.close() if not xbmcvfs.exists(movies_import_file_path): batch_add_file = xbmcvfs.File(movies_import_file_path, 'w') batch_add_file.write(movie_id_list) batch_add_file.close() plugin.notify(msg='Movies', title='Converted to list.txt', delay=3000, image=get_icon_path("movies")) plugin.notify(msg='Generating', title='.strm-files', delay=3000, image=get_icon_path("metalliq")) xbmc.executebuiltin("RunPlugin(plugin://plugin.video.metalliq/movies/batch_add_to_library)")