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("movies"), }, { '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("movies"), # TODO '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("movies"), # TODO 'context_menu': [(_("Add to library"), "RunPlugin({0})".format( plugin.url_for(movies_trakt_watchlist_to_library)))], }, ] fanart = plugin.addon.getAddonInfo('fanart') for item in items: item['properties'] = {'fanart_image': fanart} return items
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"), 'context_menu': [(_("Remove %s") % _("Channel").lower(), "RunPlugin({0})".format( plugin.url_for("live_remove_from_channel", channel=library_channel)))] }) return items
def list_episodes_tvdb(id, season_num): import_tvdb() id = int(id) season_num = int(season_num) show = tvdb[id] show_info = get_tvshow_metadata_tvdb(show, banners=False) title = show_info['name'] season = show[season_num] season_info = get_season_metadata_tvdb(show_info, season, banners=True) items = [] for (episode_num, episode) in season.items(): if episode_num == 0 or not episode.has_aired(flexible=True): break episode_info = get_episode_metadata_tvdb(season_info, episode) if xbmc.getCondVisibility("system.hasaddon(script.qlickplay)"): context_menu = [(_("[COLOR ff0084ff]Q[/COLOR]lick[COLOR ff0084ff]P[/COLOR]lay"), "RunScript(script.qlickplay,info=episodeinfo,tvshow={0},season={1},episode={2})".format(title, season_num, episode_num)), (_("TV trailer"),"RunScript(script.qlickplay,info=playtvtrailer,tvdb_id={0})".format(id)), (_("Recommended tv shows (TMDb)"),"ActivateWindow(10025,plugin://script.qlickplay/?info=similartvshows&tvdb_id={0})".format(id))] elif xbmc.getCondVisibility("system.hasaddon(script.extendedinfo)"): context_menu = [(_("Extended episode info"), "RunScript(script.extendedinfo,info=episodeinfo,tvshow={0},season={1},episode={2})".format(title, season_num, episode_num)), (_("TV trailer"),"RunScript(script.extendedinfo,info=playtvtrailer,tvdb_id={0})".format(id)), (_("Recommended tv shows (TMDb)"),"ActivateWindow(10025,plugin://script.extendedinfo/?info=similartvshows&tvdb_id={0})".format(id))] else: context_menu = [] context_menu.append((_("Select stream..."),"PlayMedia({0})".format(plugin.url_for("tv_play", id=id, season=season_num, episode=episode_num, mode='select')))) context_menu.append((_("Add to list"), "RunPlugin({0})".format(plugin.url_for("lists_add_episode_to_list", src='tvdb', id=id, season=season_num, episode = episode_num)))) context_menu.append((_("Show info"),'Action(Info)')) items.append({'label': episode_info.get('title'), 'path': plugin.url_for("tv_play", id=id, season=season_num, episode=episode_num, mode='default'), 'context_menu': context_menu, 'info': episode_info, 'is_playable': True, 'info_type': 'video', 'stream_info': {'video': {}}, 'thumbnail': episode_info['poster'], 'poster': season_info['poster'], 'icon': "DefaultVideo.png", 'properties' : {'fanart_image' : episode_info['fanart']}, }) return items
def music_play(artist_name, track_name, album_name, mode): items = [{ 'label': "{0} {1}".format(_("Play"), _("Audio").lower()), 'path': plugin.url_for("music_play_audio", artist_name=artist_name, track_name=track_name, album_name=album_name, mode=mode) }, { 'label': "{0} {1}".format(_("Play"), _("Video").lower()), 'path': plugin.url_for("music_play_video", artist_name=artist_name, track_name=track_name, album_name=album_name, mode=mode) }] if plugin.get_setting(SETTING_PREFERRED_MUSIC_TYPE, unicode) == "audio": music_play_audio(artist_name, track_name, album_name, mode) else: music_play_video(artist_name, track_name, album_name, mode)
def make_tvshow_item(info): tvdb_id = info['tvdb_id'] context_menu = [ ( _("Add to library"), "RunPlugin({0})".format(plugin.url_for("tv_add_to_library", id=tvdb_id)) ), ( _("Show info"), 'Action(Info)' ), ( _("Add to list"), "RunPlugin({0})".format(plugin.url_for("lists_add_show_to_list", src='tvdb', id=tvdb_id,)) ) ] return {'label': info['title'], 'path': plugin.url_for("tv_tvshow", id=tvdb_id), 'context_menu': context_menu, 'thumbnail': info['poster'], 'icon': "DefaultVideo.png", 'poster': info['poster'], 'properties' : {'fanart_image' : info['fanart']}, 'info_type': 'video', 'stream_info': {'video': {}}, 'info': info}
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 music_top_artists_by_country(country, page): results = lastfm.get_top_artists_by_country(country, page) artists = results["topartists"]["artist"] items = [] for artist in artists: large_image = artist["image"][-1]["#text"] name = to_utf8(artist["name"]) context_menu = [ ( _("Add to library"), "RunPlugin({0})".format(plugin.url_for("music_add_artist_to_library", artist_name=name)), ) ] item = { "label": name, "path": plugin.url_for(music_artist_albums, artist_name=name), "thumbnail": large_image, "icon": "DefaultMusic.png", "poster": large_image, "info": {"artist": name}, "info_type": "music", "context_menu": context_menu, } items.append(item) return items
def make_tvshow_item(tvdb_show, tmdb_show=None): tvdb_info = get_tvshow_metadata_tvdb(tvdb_show) tmdb_info = get_tvshow_metadata_tmdb(tmdb_show) info = {} info.update(tvdb_info) info.update(dict((k,v) for k,v in tmdb_info.iteritems() if v)) # Prefer translated info if LANG != "en": for key in ('name', 'title', 'plot'): if is_ascii(info.get(key,'')) and not is_ascii(tvdb_info.get(key,'')): info[key] = tvdb_info[key] tvdb_id = info['tvdb_id'] context_menu = [ ( _("Add to library"), "RunPlugin({0})".format(plugin.url_for("tv_add_to_library", id=tvdb_id)) ), ( _("Show info"), 'Action(Info)' ) ] return {'label': info['title'], 'path': plugin.url_for(tv_tvshow, id=tvdb_id), 'context_menu': context_menu, 'thumbnail': info['poster'], 'icon': "DefaultVideo.png", 'poster': info['poster'], 'properties' : {'fanart_image' : info['fanart']}, 'info_type': 'video', 'info': info}
def people_list_show_people(id, source, fanart): items = [] try: if source == "imdb": people = trakt.get_show_people(id) else: xbmcgui.Dialog().ok("Error", "No cast info found") return plugin.finish(items=[]) except: xbmcgui.Dialog().ok("Error", "No cast info found") return plugin.finish(items=[]) if "cast" in people: for actor in people["cast"]: context_menu = [ ( "Convert to bob_xml", "RunPlugin({0})".format( plugin.url_for("bob_convert_person_to_xml", trakt_id=actor["person"]["ids"]["trakt"])) ) ] image = get_person_artwork(actor) label = "{0} ({1})".format(to_utf8(actor["person"]["name"]), to_utf8(actor["character"])) info = actor["person"]["biography"] items.append({'label': label, 'path': plugin.url_for("people_list_person_select", id=actor["person"]["ids"]["trakt"], name=to_utf8(actor["person"]["name"])), 'info': info, 'thumbnail': image, 'poster': image, 'context_menu': context_menu, 'icon': "DefaultVideo.png", 'properties': {'fanart_image': fanart}, }) return plugin.finish(items=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 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 music_top_artists_by_country(country, page): results = lastfm.get_top_artists_by_country(country, page) artists = results["topartists"]["artist"] items = [] for artist in artists: large_image = artist["image"][-1]["#text"] name = to_utf8(artist["name"]) context_menu = [ ( _("Scan item to library"), "RunPlugin({0})".format(plugin.url_for("music_add_artist_to_library", artist_name=name)) ) ] item = { 'label': name, 'path': plugin.url_for("music_artist_albums", artist_name=name), 'thumbnail': large_image, 'icon': "DefaultMusic.png", 'poster': large_image, 'info': { 'artist': name, }, 'info_type': 'music', 'context_menu': context_menu } items.append(item) if FORCE == True: plugin.set_view_mode(VIEW); return items else: return items
def music_top_artists(page): results = lastfm.get_top_artists(page) artists = results["artists"]["artist"] items = [] for artist in artists: large_image = artist["image"][-1]["#text"] name = to_utf8(artist["name"]) context_menu = [ ( _("Add to library"), "RunPlugin({0})".format(plugin.url_for("music_add_artist_to_library", artist_name=name)) ) ] item = { 'label': name, 'path': plugin.url_for(music_artist_albums, artist_name=name), 'thumbnail': large_image, 'icon': "DefaultMusic.png", 'poster': large_image, 'info': { 'artist': name, }, 'info_type': 'music', 'context_menu': context_menu } items.append(item) return items
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 make_movie_item(movie_info): tmdb_id = movie_info['tmdb'] context_menu = [ ( _("Select stream..."), "PlayMedia({0})".format(plugin.url_for("movies_play", src='tmdb', id=tmdb_id, mode='select')) ), ( _("Add to library"), "RunPlugin({0})".format(plugin.url_for("movies_add_to_library", id=tmdb_id)) ), ( _("Show info"), 'Action(Info)' ), ] return {'label': movie_info['title'], 'path': plugin.url_for("movies_play", src='tmdb', id=tmdb_id, mode='default'), 'context_menu': context_menu, 'thumbnail': movie_info['poster'], 'icon': "DefaultVideo.png", 'poster': movie_info['poster'], 'properties' : {'fanart_image' : movie_info['fanart']}, 'is_playable': True, 'info_type': 'video', 'info': movie_info}
def make_tvshow_item(info): tvdb_id = info['tvdb_id'] context_menu = [(_("Add to library"), "RunPlugin({0})".format( plugin.url_for("tv_add_to_library", id=tvdb_id))), (_("Show info"), 'Action(Info)'), (_("Add to list"), "RunPlugin({0})".format( plugin.url_for( "lists_add_show_to_list", src='tvdb', id=tvdb_id, )))] return { 'label': info['title'], 'path': plugin.url_for("tv_tvshow", id=tvdb_id), 'context_menu': context_menu, 'thumbnail': info['poster'], 'icon': "DefaultVideo.png", 'poster': info['poster'], 'properties': { 'fanart_image': info['fanart'] }, 'info_type': 'video', 'stream_info': { 'video': {} }, 'info': info }
def music_top_artists_by_country(country, page): results = lastfm.get_top_artists_by_country(country, page) artists = results["topartists"]["artist"] items = [] for artist in artists: large_image = artist["image"][-1]["#text"] name = to_utf8(artist["name"]) context_menu = [(_("Scan item to library"), "RunPlugin({0})".format( plugin.url_for("music_add_artist_to_library", artist_name=name)))] item = { 'label': name, 'path': plugin.url_for("music_artist_albums", artist_name=name), 'thumbnail': large_image, 'icon': "DefaultMusic.png", 'poster': large_image, 'info': { 'artist': name, }, 'info_type': 'music', 'context_menu': context_menu } items.append(item) 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), '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 list_episodes_tvdb(id, season_num): import_tvdb() id = int(id) season_num = int(season_num) show = tvdb[id] show_info = get_tvshow_metadata_tvdb(show, banners=False) season = show[season_num] season_info = get_season_metadata_tvdb(show_info, season, banners=True) items = [] for (episode_num, episode) in season.items(): if episode_num == 0 or not episode.has_aired(flexible=True): break episode_info = get_episode_metadata_tvdb(season_info, episode) context_menu = [(_("Select stream..."), "PlayMedia({0})".format( plugin.url_for("tv_play", id=id, season=season_num, episode=episode_num, mode='select'))), (_("Show info"), 'Action(Info)')] items.append({ 'label': episode_info.get('title'), 'path': plugin.url_for("tv_play", id=id, season=season_num, episode=episode_num, mode='default'), 'context_menu': context_menu, 'info': episode_info, 'is_playable': True, 'info_type': 'video', 'stream_info': { 'video': {} }, 'thumbnail': episode_info['poster'], 'poster': season_info['poster'], 'icon': "DefaultVideo.png", 'properties': { 'fanart_image': episode_info['fanart'] }, }) return items
def music_artist_album_tracks(artist_name, album_name): artist_name = to_utf8(artist_name) album_name = to_utf8(album_name) results = lastfm.get_album_info(artist_name, album_name) items = [] for track in results["tracks"]["track"]: track_name = to_utf8(track["name"]) track_number = track["@attr"]["rank"] image = results["image"][-1]["#text"] 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, album_name=album_name ) ), ), ( _("Musicvideo"), "RunPlugin({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": "{0}. {1}".format(track_number, track_name), "path": plugin.url_for("music_play_audio", artist_name=artist_name, track_name=track_name), "thumbnail": image, "icon": "DefaultMusic.png", "poster": image, "info_type": "music", "context_menu": context_menu, } else: item = { "label": "{0}. {1}".format(track_number, track_name), "path": plugin.url_for( "music_play_video", artist_name=artist_name, album_name=album_name, track_name=track_name ), "thumbnail": image, "icon": "DefaultMusicVideo.png", "poster": image, "info_type": "music", "context_menu": context_menu, } items.append(item) 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 = [(_("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 music_search_album_term(term, page): search_results = lastfm.search_album(term, page) albums = search_results["albummatches"]["album"] items_per_page = search_results["opensearch:itemsPerPage"] start_index = search_results["opensearch:startIndex"] total_results = search_results["opensearch:totalResults"] items = [] for album in albums: large_image = album["image"][-1]["#text"] album_name = to_utf8(album["name"]) artist_name = to_utf8(album["artist"]) context_menu = [(_("Scan item to library"), "RunPlugin({0})".format( plugin.url_for("music_add_album_to_library", artist_name=artist_name, album_name=album_name)))] item = { 'label': "{0} - {1}".format(artist_name, album_name), 'path': plugin.url_for("music_artist_album_tracks", artist_name=artist_name, album_name=album_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': "{0} {1}".format(_("Next page"), " >>"), 'icon': get_icon_path("item_next"), 'path': plugin.url_for("music_search_album_term", term=term, page=int(page) + 1) }) if FORCE == True: plugin.set_view_mode(VIEW) return items else: return items
def make_movie_item(movie_info, is_list = False): tmdb_id = movie_info.get('tmdb') imdb_id = movie_info.get('imdb') if tmdb_id: id = tmdb_id src = 'tmdb' else: id = imdb_id src = 'imdb' context_menu = [ ( _("Select stream..."), "PlayMedia({0})".format(plugin.url_for("movies_play", src=src, id=id, mode='select')) ), ( _("Add to library"), "RunPlugin({0})".format(plugin.url_for("movies_add_to_library", src=src, id=id)) ), ( _("Add to list"), "RunPlugin({0})".format(plugin.url_for("lists_add_movie_to_list", src=src, id=id)) ), ( _("Show info"), 'Action(Info)' ), ] if is_list: context_menu.append( ( _("Remove from list"), "RunPlugin({0})".format(plugin.url_for("lists_remove_movie_from_list", src=src, id=id)) ) ) return { 'label': movie_info['title'], 'path': plugin.url_for("movies_play", src=src, id=id, mode='default'), 'context_menu': context_menu, 'thumbnail': movie_info['poster'], 'icon': "DefaultVideo.png", 'poster': movie_info['poster'], 'properties' : {'fanart_image' : movie_info['fanart']}, 'is_playable': True, 'info_type': 'video', 'stream_info': {'video': {}}, 'info': movie_info }
def music_search(): items = [ {"label": _("Search artist"), "path": plugin.url_for("music_search_artist"), "icon": get_icon_path("search")}, {"label": _("Search album"), "path": plugin.url_for("music_search_album"), "icon": get_icon_path("search")}, {"label": _("Search track"), "path": plugin.url_for("music_search_track"), "icon": get_icon_path("search")}, ] fanart = plugin.addon.getAddonInfo("fanart") for item in items: item["properties"] = {"fanart_image": get_background_path()} return items
def music_top_tracks_by_country(country, page): results = lastfm.get_top_tracks_by_country(country, page) tracks = results["tracks"]["track"] items = [] for track in tracks: large_image = track["image"][-1]["#text"] track_name = to_utf8(track["name"]) artist_name = to_utf8(track["artist"]["name"]) context_menu = [ ("{0} {1}...".format(_("Select"), _("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))) #, # ( # _("Music video"), # "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 FORCE == True: plugin.set_view_mode(VIEW) return items else: 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 = [ ( _("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"), "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), } ) 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
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_album_tracks(artist_name, album_name): artist_name = to_utf8(artist_name) album_name = to_utf8(album_name) results = lastfm.get_album_info(artist_name, album_name) items = [] for track in results["tracks"]["track"]: track_name = to_utf8(track["name"]) track_number = track["@attr"]["rank"] image = results["image"][-1]["#text"] 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, album_name=album_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='default')) ) ] if plugin.get_setting(SETTING_PREFERRED_MUSIC_TYPE, unicode) == "audio": item = { 'label': "{0}. {1}".format(track_number, track_name), 'path': plugin.url_for("music_play_audio", artist_name=artist_name, track_name=track_name), 'thumbnail': image, 'icon': "DefaultMusic.png", 'poster': image, 'info_type': 'music', 'context_menu': context_menu, } else: item = { 'label': "{0}. {1}".format(track_number, track_name), 'path': plugin.url_for("music_play_video", artist_name=artist_name, album_name=album_name, track_name=track_name), 'thumbnail': image, 'icon': "DefaultMusicVideo.png", 'poster': image, 'info_type': 'music', 'context_menu': context_menu, } items.append(item) if FORCE == True: plugin.set_view_mode(VIEW); return items else: return items
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 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 make_movie_item(movie_info, is_list = False): try: tmdb_id = movie_info.get('tmdb') except: tmdb_id = "" if tmdb_id == "": try: tmdb_id = info['tmdb'] except: tmdb_id = False try: imdb_id = movie_info.get('imdb') except: imdb_id = "" if imdb_id == "": try: imdb_id = info['imdb'] except: imdb_id = False if movie_info['poster'] == None or movie_info['poster'] == "": movie_info['poster'] = "https://raw.githubusercontent.com/OpenELEQ/Style/master/MetalliQ/default/unavailable.png" if movie_info['fanart'] == None or movie_info['fanart'] == "": movie_info['fanart'] = get_background_path() if tmdb_id: id = tmdb_id src = 'tmdb' elif imdb_id: id = imdb_id src = 'imdb' else: dialogs.notify(msg="tmdb or imdb id", title=_("%s not found").replace("%s ",""), delay=3000, image=get_icon_path("movies")) 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"), "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 is_list: context_menu.append( ( "{0}".format(_("Remove from library").replace(_("Library").lower(),_("Playlist").lower())), "RunPlugin({0})".format(plugin.url_for("lists_remove_movie_from_list", src=src, id=id)) ) ) return { 'label': movie_info['title'], 'path': plugin.url_for("movies_play", src=src, id=id, mode='default'), 'context_menu': context_menu, 'thumbnail': movie_info['poster'], 'icon': movie_info['poster'], 'banner': movie_info['fanart'], 'poster': movie_info['poster'], 'properties' : {'fanart_image' : movie_info['fanart']}, 'is_playable': True, 'info_type': 'video', 'stream_info': {'video': {}}, 'info': movie_info }
def list_episodes_tvdb(id, season_num): import_tvdb() id = int(id) season_num = int(season_num) show = tvdb[id] show_info = get_tvshow_metadata_tvdb(show, banners=False) season = show[season_num] season_info = get_season_metadata_tvdb(show_info, season, banners=True) items = [] for (episode_num, episode) in season.items(): if episode_num == 0 or not episode.has_aired(flexible=True): break episode_info = get_episode_metadata_tvdb(season_info, episode) context_menu = [ ( _("Select stream..."), "PlayMedia({0})".format(plugin.url_for("tv_play", id=id, season=season_num, episode=episode_num, mode='select')) ), ( _("Show info"), 'Action(Info)' ), ( _("Add to list"), "RunPlugin({0})".format(plugin.url_for("lists_add_episode_to_list", src='tvdb', id=id, season=season_num, episode = episode_num)) ), ] items.append({'label': episode_info.get('title'), 'path': plugin.url_for("tv_play", id=id, season=season_num, episode=episode_num, mode='default'), 'context_menu': context_menu, 'info': episode_info, 'is_playable': True, 'info_type': 'video', 'stream_info': {'video': {}}, 'thumbnail': episode_info['poster'], 'poster': season_info['poster'], 'icon': "DefaultVideo.png", 'properties' : {'fanart_image' : episode_info['fanart']}, }) return items
def music_artist_album_tracks(artist_name, album_name): artist_name = to_utf8(artist_name) album_name = to_utf8(album_name) results = lastfm.get_album_info(artist_name, album_name) items = [] for track in results["tracks"]["track"]: track_name = to_utf8(track["name"]) track_number = track["@attr"]["rank"] image = results["image"][-1]["#text"] 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, album_name=album_name)) ), ( _("Musicvideo"), "RunPlugin({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': "{0}. {1}".format(track_number, track_name), 'path': plugin.url_for("music_play_audio", artist_name=artist_name, track_name=track_name), 'thumbnail': image, 'icon': "DefaultMusic.png", 'poster': image, 'info_type': 'music', 'context_menu': context_menu, } else: item = { 'label': "{0}. {1}".format(track_number, track_name), 'path': plugin.url_for("music_play_video", artist_name=artist_name, album_name=album_name, track_name=track_name), 'thumbnail': image, 'icon': "DefaultMusicVideo.png", 'poster': image, 'info_type': 'music', 'context_menu': context_menu, } items.append(item) 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 make_movie_item(movie_info, is_list = False): try: tmdb_id = movie_info.get('tmdb') except: tmdb_id = "" if tmdb_id == "": try: tmdb_id = info['tmdb'] except: tmdb_id = False try: imdb_id = movie_info.get('imdb') except: imdb_id = "" if imdb_id == "": try: imdb_id = info['imdb'] except: imdb_id = False if movie_info['poster'] == None or movie_info['poster'] == "": movie_info['poster'] = "http://mrblamo.xyz/chappaaiunavailable.png" if movie_info['fanart'] == None or movie_info['fanart'] == "": movie_info['fanart'] = get_background_path() if tmdb_id: id = tmdb_id src = 'tmdb' elif imdb_id: id = imdb_id src = 'imdb' else: dialogs.notify(msg="tmdb or imdb id", title=_("%s not found").replace("%s ",""), delay=3000, image=get_icon_path("movies")) 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 purple]Mr Blamo[/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"), "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 is_list: context_menu.append( ( "{0}".format(_("Remove from library").replace(_("Library").lower(),_("Playlist").lower())), "RunPlugin({0})".format(plugin.url_for("lists_remove_movie_from_list", src=src, id=id)) ) ) return { 'label': movie_info['title'], 'path': plugin.url_for("movies_play", src=src, id=id, mode='default'), 'context_menu': context_menu, 'thumbnail': movie_info['poster'], 'icon': movie_info['poster'], 'banner': movie_info['fanart'], 'poster': movie_info['poster'], 'properties' : {'fanart_image' : movie_info['fanart']}, 'is_playable': True, 'info_type': 'video', 'stream_info': {'video': {}}, 'info': movie_info }
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 tv_genres(): """ TV genres list """ genres = get_tv_genres() return sorted([{ 'label': name, 'icon': get_genre_icon(id), 'path': plugin.url_for(tv_genre, id=id, page='1') } for id, name in genres.items()], key=lambda k: k['label'])
def add_movie_to_library(library_folder, src, id, date): changed = False # create nfo file nfo_filepath = os.path.join(library_folder, str(id) + ".nfo") if not xbmcvfs.exists(nfo_filepath): changed = True nfo_file = xbmcvfs.File(nfo_filepath, 'w') if src == "imdb": content = "http://www.imdb.com/title/%s/" % str(id) else: content = "http://www.themoviedb.org/movie/%s" % str(id) nfo_file.write(content) nfo_file.close() if date and plugin.get_setting(SETTING_LIBRARY_SET_DATE, converter=bool): os.utime(nfo_filepath, (date, date)) # create strm file strm_filepath = os.path.join(library_folder, str(id) + ".strm") if not xbmcvfs.exists(strm_filepath): changed = True strm_file = xbmcvfs.File(strm_filepath, 'w') content = plugin.url_for("movies_play", src=src, id=id, mode='library') strm_file.write(content) strm_file.close() if date and plugin.get_setting(SETTING_LIBRARY_SET_DATE, converter=bool): os.utime(strm_filepath, (date, date)) return changed
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 search(search_func, term=None): """ Search wrapper """ external = False if plugin.id == xbmc.getInfoLabel('Container.PluginName'): # Skip if search item isn't currently selected label = xbmc.getInfoLabel('ListItem.label') if label and not equals(label, _("Search")): return else: external = True if term is None: # Get search keyword search_entered = plugin.keyboard(heading=_("search for")) if not search_entered: return else: search_entered = term # Perform search url = plugin.url_for(search_func, term=search_entered, page='1') if external: xbmc.executebuiltin('ActivateWindow(10025,"plugin://%s/",return)' % plugin.id) xbmc.executebuiltin('Container.Update("%s")' % url) else: plugin.redirect(url)
def library_tv_strm(show, folder, id, season, episode): # Create season folder enc_season = ('Season %s' % season).translate(None, '\/:*?"<>|').strip('.') folder = os.path.join(folder, enc_season) try: xbmcvfs.mkdir(folder) except: pass # Create episode strm enc_name = 'S%02dE%02d' % (season, episode) stream = os.path.join( folder, enc_name + "%s" % plugin.get_setting(SETTING_LIBRARY_TAGS, unicode) + ".strm") if not xbmcvfs.exists(stream): file = xbmcvfs.File(stream, 'w') content = plugin.url_for("tv_play", id=id, season=season, episode=episode, mode='library') file.write(str(content)) file.close() if plugin.get_setting(SETTING_LIBRARY_SET_DATE, bool): try: firstaired = show[season][episode]['firstaired'] t = date_to_timestamp(firstaired) os.utime(stream, (t, t)) except: pass
def add_channel_to_library(library_folder, channel, play_plugin=None): changed = False # create channel folder channel_folder = os.path.join(library_folder, str(channel) + "/") if not xbmcvfs.exists(channel_folder): try: xbmcvfs.mkdir(channel_folder) except: pass # create nfo file nfo_filepath = os.path.join(channel_folder, str(channel) + ".nfo") if not xbmcvfs.exists(nfo_filepath): changed = True nfo_file = xbmcvfs.File(nfo_filepath, "w") content = "%s" % str(channel) nfo_file.write(content) nfo_file.close() # Create play with file if play_plugin is not None: player_filepath = os.path.join(channel_folder, "player.info") player_file = xbmcvfs.File(player_filepath, "w") content = "{0}".format(play_plugin) player_file.write(content) player_file.close() # create strm file strm_filepath = os.path.join(channel_folder, str(channel) + ".strm") if not xbmcvfs.exists(strm_filepath): changed = True strm_file = xbmcvfs.File(strm_filepath, "w") content = plugin.url_for("live_play", channel=channel, program="None", language="en", mode="library") strm_file.write(content) strm_file.close() return changed
def movies_genres(): """ List all movie genres """ genres = get_base_genres() return sorted([{ 'label': name, 'icon': get_genre_icon(id), 'path': plugin.url_for(movies_genre, id=id, page='1') } for id, name in genres.items()], key=lambda k: k['label'])
def library_tv_strm(show, folder, id, season, episode): # Create season folder enc_season = ('Season %s' % season).translate(None, '\/:*?"<>|').strip('.') folder = os.path.join(folder, enc_season) try: xbmcvfs.mkdir(folder) except: pass # Create episode strm enc_name = 'S%02dE%02d' % (season, episode) stream = os.path.join(folder, enc_name + '.strm') if not xbmcvfs.exists(stream): file = xbmcvfs.File(stream, 'w') content = plugin.url_for("tv_play", id=id, season=season, episode=episode, mode='library') file.write(str(content)) file.close() if plugin.get_setting(SETTING_LIBRARY_SET_DATE, converter=bool): try: firstaired = show[season][episode]['firstaired'] t = date_to_timestamp(firstaired) os.utime(stream, (t,t)) except: pass
def list_seasons_tvdb(id): import_tvdb() id = int(id) show = tvdb[id] show_info = get_tvshow_metadata_tvdb(show, banners=False) context_menu = [ ( _("Show info"), 'Action(Info)' ) ] items = [] for (season_num, season) in show.items(): if season_num == 0 or not season.has_aired(): continue season_info = get_season_metadata_tvdb(show_info, season) items.append({'label': u"%s %d" % (_("Season"), season_num), 'path': plugin.url_for(tv_season, id=id, season_num=season_num), 'context_menu': context_menu, 'info': season_info, 'thumbnail': season_info['poster'], 'icon': "DefaultVideo.png", 'poster': season_info['poster'], 'properties' : {'fanart_image' : season_info['fanart']}, }) return items
def add_channel_to_library(library_folder, channel, play_plugin = None): changed = False # create channel folder channel_folder = os.path.join(library_folder, str(channel)+'/') if not xbmcvfs.exists(channel_folder): try: xbmcvfs.mkdir(channel_folder) except: pass # create nfo file nfo_filepath = os.path.join(channel_folder, str(channel)+".nfo") if not xbmcvfs.exists(nfo_filepath): changed = True nfo_file = xbmcvfs.File(nfo_filepath, 'w') content = "%s" % str(channel) nfo_file.write(content) nfo_file.close() # Create play with file if play_plugin is not None: player_filepath = os.path.join(channel_folder, 'player.info') player_file = xbmcvfs.File(player_filepath, 'w') content = "{0}".format(play_plugin) player_file.write(content) player_file.close() # create strm file strm_filepath = os.path.join(channel_folder, str(channel)+".strm") if not xbmcvfs.exists(strm_filepath): changed = True strm_file = xbmcvfs.File(strm_filepath, 'w') content = plugin.url_for("live_play", channel=channel, program="None", language="en", mode="library") strm_file.write(content) strm_file.close() return changed
def batch_add_movies_to_library(library_folder, id): if id == None: return changed = False movie_folder = os.path.join(library_folder, str(id) + "/") if not xbmcvfs.exists(movie_folder): try: xbmcvfs.mkdir(movie_folder) except: pass nfo_filepath = os.path.join(movie_folder, str(id) + ".nfo") if not xbmcvfs.exists(nfo_filepath): changed = True nfo_file = xbmcvfs.File(nfo_filepath, "w") content = "http://www.imdb.com/title/%s/" % str(id) nfo_file.write(content) nfo_file.close() strm_filepath = os.path.join(movie_folder, str(id) + ".strm") src = "imdb" if not xbmcvfs.exists(strm_filepath): changed = True strm_file = xbmcvfs.File(strm_filepath, "w") try: content = plugin.url_for("movies_play", src=src, id=id, mode="library") strm_file.write(content) strm_file.close() except: pass if xbmc.getCondVisibility("system.hasaddon(script.qlickplay)"): xbmc.executebuiltin("RunScript(script.qlickplay,info=afteradd)") if xbmc.getCondVisibility("system.hasaddon(script.extendedinfo)"): xbmc.executebuiltin("RunScript(script.extendedinfo,info=afteradd)") return changed
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 batch_add_movies_to_library(library_folder, id): if id == None: return changed = False movie_folder = os.path.join(library_folder, str(id)+'/') if not xbmcvfs.exists(movie_folder): try: xbmcvfs.mkdir(movie_folder) except: pass player_filepath = os.path.join(movie_folder, 'player.info') player_file = xbmcvfs.File(player_filepath, 'w') content = "{0}".format(plugin.get_setting(SETTING_MOVIES_DEFAULT_PLAYER_FROM_LIBRARY, unicode)) player_file.write(content) player_file.close() # create nfo file nfo_filepath = os.path.join(movie_folder, str(id)+ "%s" % plugin.get_setting(SETTING_LIBRARY_TAGS, unicode) + ".nfo") if not xbmcvfs.exists(nfo_filepath): changed = True nfo_file = xbmcvfs.File(nfo_filepath, 'w') content = "http://www.imdb.com/title/%s/" % str(id) nfo_file.write(content) nfo_file.close() strm_filepath = os.path.join(movie_folder, str(id) + "%s" % plugin.get_setting(SETTING_LIBRARY_TAGS, unicode) + ".strm") src = "imdb" if not xbmcvfs.exists(strm_filepath): changed = True strm_file = xbmcvfs.File(strm_filepath, 'w') try: content = plugin.url_for("movies_play", src=src, id=id, mode='library') strm_file.write(content) strm_file.close() except: pass # 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 changed