def start_info_actions(info, params): if "artistname" in params: params["artistname"] = params.get("artistname", "").split(" feat. ")[0].strip() params["artist_mbid"] = utils.fetch_musicbrainz_id(params["artistname"]) utils.log(info) utils.pp(params) if "prefix" in params and not params["prefix"].endswith('.'): params["prefix"] = params["prefix"] + '.' # Audio if info == 'discography': discography = AudioDB.get_artist_discography(params["artistname"]) if not discography: discography = LastFM.get_artist_albums(params.get("artist_mbid")) return discography elif info == 'mostlovedtracks': return AudioDB.get_most_loved_tracks(params["artistname"]) elif info == 'trackdetails': return AudioDB.get_track_details(params.get("id", "")) elif info == 'topartists': return LastFM.get_top_artists() # RottenTomatoesMovies elif info == 'intheatermovies': return RottenTomatoes.get_movies("movies/in_theaters") elif info == 'boxofficemovies': return RottenTomatoes.get_movies("movies/box_office") elif info == 'openingmovies': return RottenTomatoes.get_movies("movies/opening") elif info == 'comingsoonmovies': return RottenTomatoes.get_movies("movies/upcoming") elif info == 'toprentalmovies': return RottenTomatoes.get_movies("dvds/top_rentals") elif info == 'currentdvdmovies': return RottenTomatoes.get_movies("dvds/current_releases") elif info == 'newdvdmovies': return RottenTomatoes.get_movies("dvds/new_releases") elif info == 'upcomingdvdmovies': return RottenTomatoes.get_movies("dvds/upcoming") # The MovieDB elif info == 'incinemamovies': return tmdb.get_tmdb_movies("now_playing") elif info == 'upcomingmovies': return tmdb.get_tmdb_movies("upcoming") elif info == 'topratedmovies': return tmdb.get_tmdb_movies("top_rated") elif info == 'popularmovies': return tmdb.get_tmdb_movies("popular") elif info == 'ratedmovies': return tmdb.get_rated_media_items("movies") elif info == 'starredmovies': return tmdb.get_fav_items("movies") elif info == 'accountlists': account_lists = tmdb.handle_misc(tmdb.get_account_lists()) for item in account_lists: item["directory"] = True return account_lists elif info == 'listmovies': return tmdb.get_movies_from_list(params["id"]) elif info == 'airingtodaytvshows': return tmdb.get_tmdb_shows("airing_today") elif info == 'onairtvshows': return tmdb.get_tmdb_shows("on_the_air") elif info == 'topratedtvshows': return tmdb.get_tmdb_shows("top_rated") elif info == 'populartvshows': return tmdb.get_tmdb_shows("popular") elif info == 'ratedtvshows': return tmdb.get_rated_media_items("tv") elif info == 'ratedepisodes': return tmdb.get_rated_media_items("tv/episodes") elif info == 'starredtvshows': return tmdb.get_fav_items("tv") elif info == 'similarmovies': movie_id = params.get("id") if not movie_id: movie_id = tmdb.get_movie_tmdb_id(imdb_id=params.get("imdb_id"), dbid=params.get("dbid")) if movie_id: return tmdb.get_similar_movies(movie_id) elif info == 'similartvshows': tvshow_id = None dbid = params.get("dbid") name = params.get("name") tmdb_id = params.get("tmdb_id") tvdb_id = params.get("tvdb_id") imdb_id = params.get("imdb_id") if tmdb_id: tvshow_id = tmdb_id elif dbid and int(dbid) > 0: tvdb_id = local_db.get_imdb_id("tvshow", dbid) if tvdb_id: tvshow_id = tmdb.get_show_tmdb_id(tvdb_id) elif tvdb_id: tvshow_id = tmdb.get_show_tmdb_id(tvdb_id) elif imdb_id: tvshow_id = tmdb.get_show_tmdb_id(imdb_id, "imdb_id") elif name: tvshow_id = tmdb.search_media(media_name=name, year="", media_type="tv") if tvshow_id: return tmdb.get_similar_tvshows(tvshow_id) elif info == 'studio': if params.get("id"): return tmdb.get_company_data(params["id"]) elif params.get("studio"): company_data = tmdb.search_company(params["studio"]) if company_data: return tmdb.get_company_data(company_data[0]["id"]) elif info == 'set': if params.get("dbid"): name = local_db.get_set_name(params["dbid"]) if name: params["setid"] = tmdb.get_set_id(name) if params.get("setid"): set_data, _ = tmdb.get_set_movies(params["setid"]) return set_data elif info == 'movielists': movie_id = params.get("id") if not movie_id: movie_id = tmdb.get_movie_tmdb_id(imdb_id=params.get("imdb_id"), dbid=params.get("dbid")) if movie_id: return tmdb.get_movie_lists(movie_id) elif info == 'keywords': movie_id = params.get("id") if not movie_id: movie_id = tmdb.get_movie_tmdb_id(imdb_id=params.get("imdb_id"), dbid=params.get("dbid")) if movie_id: return tmdb.get_keywords(movie_id) elif info == 'popularpeople': return tmdb.get_popular_actors() elif info == 'personmovies': person = tmdb.get_person_info(person_label=params.get("person"), skip_dialog=True) if person and person.get("id"): movies = tmdb.get_person_movies(person["id"]) for item in movies: del item["credit_id"] return utils.reduce_list(movies, key="department") elif info == 'traktsimilarmovies': if params.get("id") or params.get("dbid"): if params.get("dbid"): movie_id = local_db.get_imdb_id("movie", params["dbid"]) else: movie_id = params["id"] return Trakt.get_similar("movie", movie_id) elif info == 'traktsimilartvshows': if params.get("id") or params.get("dbid"): if params.get("dbid"): if params.get("type") == "episode": tvshow_id = local_db.get_tvshow_id_by_episode(params["dbid"]) else: tvshow_id = local_db.get_imdb_id(media_type="tvshow", dbid=params["dbid"]) else: tvshow_id = params["id"] return Trakt.get_similar("show", tvshow_id) elif info == 'airingepisodes': return Trakt.get_episodes("shows") elif info == 'premiereepisodes': return Trakt.get_episodes("premieres") elif info == 'trendingshows': return Trakt.get_shows("trending") elif info == 'popularshows': return Trakt.get_shows("popular") elif info == 'anticipatedshows': return Trakt.get_shows("anticipated") elif info == 'mostcollectedshows': return Trakt.get_shows_from_time("collected") elif info == 'mostplayedshows': return Trakt.get_shows_from_time("played") elif info == 'mostwatchedshows': return Trakt.get_shows_from_time("watched") elif info == 'trendingmovies': return Trakt.get_movies("trending") elif info == 'traktpopularmovies': return Trakt.get_movies("popular") elif info == 'mostplayedmovies': return Trakt.get_movies_from_time("played") elif info == 'mostwatchedmovies': return Trakt.get_movies_from_time("watched") elif info == 'mostcollectedmovies': return Trakt.get_movies_from_time("collected") elif info == 'mostanticipatedmovies': return Trakt.get_movies("anticipated") elif info == 'traktboxofficemovies': return Trakt.get_movies("boxoffice") elif info == 'similarartistsinlibrary': return local_db.get_similar_artists(params.get("artist_mbid")) elif info == 'trackinfo': addon.clear_global('%sSummary' % params.get("prefix", "")) if params["artistname"] and params["trackname"]: track_info = LastFM.get_track_info(artist_name=params["artistname"], track=params["trackname"]) addon.set_global('%sSummary' % params.get("prefix", ""), track_info["summary"]) elif info == 'topartistsnearevents': artists = local_db.get_artists() import BandsInTown return BandsInTown.get_near_events(artists[0:49]) elif info == 'youtubesearchvideos': addon.set_global('%sSearchValue' % params.get("prefix", ""), params.get("id", "")) if params.get("id"): listitems = YouTube.search(search_str=params.get("id", ""), hd=params.get("hd"), orderby=params.get("orderby", "relevance")) return listitems.get("listitems", []) elif info == 'youtubeplaylistvideos': return YouTube.get_playlist_videos(params.get("id", "")) elif info == 'youtubeusersearchvideos': user_name = params.get("id") if user_name: playlists = YouTube.get_user_playlists(user_name) return YouTube.get_playlist_videos(playlists["uploads"]) elif info == 'favourites': if params.get("id"): items = favs.get_favs_by_type(params["id"]) else: items = favs.get_favs() addon.set_global('favourite.count', str(len(items))) if items: addon.set_global('favourite.1.name', items[-1]["label"]) return items elif info == 'similarlocalmovies' and "dbid" in params: return local_db.get_similar_movies(params["dbid"]) elif info == 'iconpanel': return favs.get_icon_panel(int(params["id"])), "IconPanel" + str(params["id"]) # ACTIONS if params.get("handle"): xbmcplugin.setResolvedUrl(handle=int(params.get("handle")), succeeded=False, listitem=xbmcgui.ListItem()) if info in ['playmovie', 'playepisode', 'playmusicvideo', 'playalbum', 'playsong']: kodijson.play_media(media_type=info.replace("play", ""), dbid=params.get("dbid"), resume=params.get("resume", "true")) elif info == "openinfodialog": if xbmc.getCondVisibility("System.HasModalDialog"): container_id = "" else: container_id = "Container(%s)" % utils.get_infolabel("System.CurrentControlId") dbid = utils.get_infolabel("%sListItem.DBID" % container_id) db_type = utils.get_infolabel("%sListItem.DBType" % container_id) if db_type == "movie": params = {"dbid": dbid, "id": utils.get_infolabel("%sListItem.Property(id)" % container_id), "name": utils.get_infolabel("%sListItem.Title" % container_id)} start_info_actions("extendedinfo", params) elif db_type == "tvshow": params = {"dbid": dbid, "tvdb_id": utils.get_infolabel("%sListItem.Property(tvdb_id)" % container_id), "id": utils.get_infolabel("%sListItem.Property(id)" % container_id), "name": utils.get_infolabel("%sListItem.Title" % container_id)} start_info_actions("extendedtvinfo", params) elif db_type == "season": params = {"tvshow": utils.get_infolabel("%sListItem.TVShowTitle" % container_id), "season": utils.get_infolabel("%sListItem.Season" % container_id)} start_info_actions("seasoninfo", params) elif db_type == "episode": params = {"tvshow": utils.get_infolabel("%sListItem.TVShowTitle" % container_id), "season": utils.get_infolabel("%sListItem.Season" % container_id), "episode": utils.get_infolabel("%sListItem.Episode" % container_id)} start_info_actions("extendedepisodeinfo", params) elif db_type in ["actor", "director"]: params = {"name": utils.get_infolabel("%sListItem.Label" % container_id)} start_info_actions("extendedactorinfo", params) else: utils.notify("Error", "Could not find valid content type") elif info == "ratedialog": if xbmc.getCondVisibility("System.HasModalDialog"): container_id = "" else: container_id = "Container(%s)" % utils.get_infolabel("System.CurrentControlId") dbid = utils.get_infolabel("%sListItem.DBID" % container_id) db_type = utils.get_infolabel("%sListItem.DBType" % container_id) if db_type == "movie": params = {"dbid": dbid, "id": utils.get_infolabel("%sListItem.Property(id)" % container_id), "type": "movie"} start_info_actions("ratemedia", params) elif db_type == "tvshow": params = {"dbid": dbid, "id": utils.get_infolabel("%sListItem.Property(id)" % container_id), "type": "tv"} start_info_actions("ratemedia", params) if db_type == "episode": params = {"tvshow": utils.get_infolabel("%sListItem.TVShowTitle" % container_id), "season": utils.get_infolabel("%sListItem.Season" % container_id), "type": "episode"} start_info_actions("ratemedia", params) elif info == 'youtubebrowser': wm.open_youtube_list(search_str=params.get("id", "")) elif info == 'moviedbbrowser': if addon.get_global('infodialogs.active'): return None addon.set_global('infodialogs.active', "true") search_str = params.get("id", "") if not search_str and params.get("search"): result = xbmcgui.Dialog().input(heading=addon.LANG(16017), type=xbmcgui.INPUT_ALPHANUM) if result and result > -1: search_str = result else: return None wm.open_video_list(search_str=search_str, mode="search") addon.clear_global('infodialogs.active') elif info == 'extendedinfo': if addon.get_global('infodialogs.active'): return None addon.set_global('infodialogs.active', "true") wm.open_movie_info(movie_id=params.get("id"), dbid=params.get("dbid"), imdb_id=params.get("imdb_id"), name=params.get("name")) addon.clear_global('infodialogs.active') elif info == 'extendedactorinfo': if addon.get_global('infodialogs.active'): return None addon.set_global('infodialogs.active', "true") wm.open_actor_info(actor_id=params.get("id"), name=params.get("name")) addon.clear_global('infodialogs.active') elif info == 'extendedtvinfo': if addon.get_global('infodialogs.active'): return None addon.set_global('infodialogs.active', "true") wm.open_tvshow_info(tmdb_id=params.get("id"), tvdb_id=params.get("tvdb_id"), dbid=params.get("dbid"), imdb_id=params.get("imdb_id"), name=params.get("name")) addon.clear_global('infodialogs.active') elif info == 'seasoninfo': if addon.get_global('infodialogs.active'): return None addon.set_global('infodialogs.active', "true") wm.open_season_info(tvshow=params.get("tvshow"), dbid=params.get("dbid"), season=params.get("season")) addon.clear_global('infodialogs.active') elif info == 'extendedepisodeinfo': if addon.get_global('infodialogs.active'): return None addon.set_global('infodialogs.active', "true") wm.open_episode_info(tvshow=params.get("tvshow"), tvshow_id=params.get("tvshow_id"), dbid=params.get("dbid"), episode=params.get("episode"), season=params.get("season")) addon.clear_global('infodialogs.active') elif info == 'albuminfo': if params.get("id"): album_details = AudioDB.get_album_details(params.get("id")) utils.dict_to_windowprops(album_details, params.get("prefix", "")) elif info == 'artistdetails': artist_details = AudioDB.get_artist_details(params["artistname"]) utils.dict_to_windowprops(artist_details, params.get("prefix", "")) elif info == 'ratemedia': media_type = params.get("type") if not media_type: return None if params.get("id"): tmdb_id = params["id"] elif media_type == "movie": tmdb_id = tmdb.get_movie_tmdb_id(imdb_id=params.get("imdb_id"), dbid=params.get("dbid"), name=params.get("name")) elif media_type == "tv" and params.get("dbid"): tvdb_id = local_db.get_imdb_id(media_type="tvshow", dbid=params["dbid"]) tmdb_id = tmdb.get_show_tmdb_id(tvdb_id=tvdb_id) else: return False rating = utils.input_userrating() tmdb.set_rating(media_type=media_type, media_id=tmdb_id, rating=rating, dbid=params.get("dbid")) elif info == 'action': for builtin in params.get("id", "").split("$$"): xbmc.executebuiltin(builtin) elif info == "youtubevideo": xbmc.executebuiltin("Dialog.Close(all,true)") wm.play_youtube_video(params.get("id", "")) elif info == 'playtrailer': wm.show_busy() if params.get("id"): movie_id = params["id"] elif int(params.get("dbid", -1)) > 0: movie_id = local_db.get_imdb_id(media_type="movie", dbid=params["dbid"]) elif params.get("imdb_id"): movie_id = tmdb.get_movie_tmdb_id(params["imdb_id"]) else: movie_id = "" if movie_id: trailer = tmdb.get_trailer(movie_id) wm.hide_busy() time.sleep(0.1) if trailer: wm.play_youtube_video(trailer) elif params.get("title"): wm.open_youtube_list(search_str=params["title"]) else: wm.hide_busy() elif info == 'deletecache': addon.clear_globals() for rel_path in os.listdir(addon.DATA_PATH): path = os.path.join(addon.DATA_PATH, rel_path) try: if os.path.isdir(path): shutil.rmtree(path) except Exception as e: utils.log(e) utils.notify("Cache deleted") elif info == 'syncwatchlist': pass
def start_info_actions(infos, params): if "artistname" in params: params["artistname"] = params.get("artistname", "").split(" feat. ")[0].strip() params["artist_mbid"] = fetch_musicbrainz_id(params["artistname"]) prettyprint(params) prettyprint(infos) if "prefix" in params and (not params["prefix"].endswith('.')) and (params["prefix"]): params["prefix"] = params["prefix"] + '.' for info in infos: data = [], "" # Images if info == 'xkcd': from MiscScraper import get_xkcd_images data = get_xkcd_images(), "XKCD" elif info == 'cyanide': from MiscScraper import get_cyanide_images data = get_cyanide_images(), "CyanideHappiness" elif info == 'dailybabes': from MiscScraper import get_babe_images data = get_babe_images(), "DailyBabes" elif info == 'dailybabe': from MiscScraper import get_babe_images data = get_babe_images(single=True), "DailyBabe" # Audio elif info == 'discography': discography = AudioDB.get_artist_discography(params["artistname"]) if not discography: discography = LastFM.get_artist_albums(params.get("artist_mbid")) data = discography, "discography" elif info == 'mostlovedtracks': data = AudioDB.get_most_loved_tracks(params["artistname"]), "MostLovedTracks" elif info == 'musicvideos': pass # if "audiodbid" in artist_details: # data = get_musicvideos(artist_details["audiodbid"]), "MusicVideos" elif info == 'trackdetails': if params.get("id", ""): data = AudioDB.get_track_details(params.get("id", "")), "Trackinfo" elif info == 'albumshouts': if params["artistname"] and params["albumname"]: data = LastFM.get_album_shouts(params["artistname"], params["albumname"]), "Shout" elif info == 'artistshouts': if params["artistname"]: data = LastFM.get_artist_shouts(params["artistname"]), "Shout" elif info == 'topartists': data = LastFM.get_top_artists(), "TopArtists" elif info == 'hypedartists': data = LastFM.get_hyped_artists(), "HypedArtists" elif info == 'latestdbmovies': data = local_db.get_movies('"sort": {"order": "descending", "method": "dateadded"}', params.get("limit", 10)), "LatestMovies" elif info == 'randomdbmovies': data = local_db.get_movies('"sort": {"method": "random"}', params.get("limit", 10)), "RandomMovies" elif info == 'inprogressdbmovies': method = '"sort": {"order": "descending", "method": "lastplayed"}, "filter": {"field": "inprogress", "operator": "true", "value": ""}' data = local_db.get_movies(method, params.get("limit", 10)), "RecommendedMovies" # RottenTomatoesMovies elif info == 'intheaters': data = RottenTomatoes.get_movies("movies/in_theaters"), "InTheatersMovies" elif info == 'boxoffice': data = RottenTomatoes.get_movies("movies/box_office"), "BoxOffice" elif info == 'opening': data = RottenTomatoes.get_movies("movies/opening"), "Opening" elif info == 'comingsoon': data = RottenTomatoes.get_movies("movies/upcoming"), "ComingSoonMovies" elif info == 'toprentals': data = RottenTomatoes.get_movies("dvds/top_rentals"), "TopRentals" elif info == 'currentdvdreleases': data = RottenTomatoes.get_movies("dvds/current_releases"), "CurrentDVDs" elif info == 'newdvdreleases': data = RottenTomatoes.get_movies("dvds/new_releases"), "NewDVDs" elif info == 'upcomingdvds': data = RottenTomatoes.get_movies("dvds/upcoming"), "UpcomingDVDs" # The MovieDB elif info == 'incinemas': data = TheMovieDB.get_tmdb_movies("now_playing"), "InCinemasMovies" elif info == 'upcoming': data = TheMovieDB.get_tmdb_movies("upcoming"), "UpcomingMovies" elif info == 'topratedmovies': data = TheMovieDB.get_tmdb_movies("top_rated"), "TopRatedMovies" elif info == 'popularmovies': data = TheMovieDB.get_tmdb_movies("popular"), "PopularMovies" elif info == 'ratedmovies': data = TheMovieDB.get_rated_media_items("movies"), "RatedMovies" elif info == 'starredmovies': data = TheMovieDB.get_fav_items("movies"), "StarredMovies" elif info == 'accountlists': account_lists = TheMovieDB.handle_misc(TheMovieDB.get_account_lists()) for item in account_lists: item["directory"] = True data = account_lists, "AccountLists" elif info == 'listmovies': movies = TheMovieDB.get_movies_from_list(params["id"]) data = movies, "AccountLists" elif info == 'airingtodaytvshows': data = TheMovieDB.get_tmdb_shows("airing_today"), "AiringTodayTVShows" elif info == 'onairtvshows': data = TheMovieDB.get_tmdb_shows("on_the_air"), "OnAirTVShows" elif info == 'topratedtvshows': data = TheMovieDB.get_tmdb_shows("top_rated"), "TopRatedTVShows" elif info == 'populartvshows': data = TheMovieDB.get_tmdb_shows("popular"), "PopularTVShows" elif info == 'ratedtvshows': data = TheMovieDB.get_rated_media_items("tv"), "RatedTVShows" elif info == 'starredtvshows': data = TheMovieDB.get_fav_items("tv"), "StarredTVShows" elif info == 'similarmovies': movie_id = params.get("id", False) if not movie_id: movie_id = TheMovieDB.get_movie_tmdb_id(imdb_id=params.get("imdb_id", False), dbid=params.get("dbid", False)) if movie_id: data = TheMovieDB.get_similar_movies(movie_id), "SimilarMovies" elif info == 'similartvshows': tvshow_id = None dbid = params.get("dbid", False) name = params.get("name", False) tmdb_id = params.get("tmdb_id", False) tvdb_id = params.get("tvdb_id", False) imdb_id = params.get("imdb_id", False) if tmdb_id: tvshow_id = tmdb_id elif dbid and int(dbid) > 0: tvdb_id = local_db.get_imdb_id("tvshow", dbid) if tvdb_id: tvshow_id = TheMovieDB.get_show_tmdb_id(tvdb_id) elif tvdb_id: tvshow_id = TheMovieDB.get_show_tmdb_id(tvdb_id) elif imdb_id: tvshow_id = TheMovieDB.get_show_tmdb_id(imdb_id, "imdb_id") elif name: tvshow_id = TheMovieDB.search_media(media_name=name, year="", media_type="tv") if tvshow_id: data = TheMovieDB.get_similar_tvshows(tvshow_id), "SimilarTVShows" elif info == 'studio': if "id" in params and params["id"]: data = TheMovieDB.get_company_data(params["id"]), "StudioInfo" elif "studio" in params and params["studio"]: company_data = TheMovieDB.search_company(params["studio"]) if company_data: data = TheMovieDB.get_company_data(company_data[0]["id"]), "StudioInfo" elif info == 'set': if params.get("dbid") and "show" not in str(params.get("type", "")): name = local_db.get_set_name(params["dbid"]) if name: params["setid"] = TheMovieDB.get_set_id(name) if params.get("setid"): set_data, _ = TheMovieDB.get_set_movies(params["setid"]) if set_data: data = set_data, "MovieSetItems" elif info == 'movielists': movie_id = params.get("id", False) if not movie_id: movie_id = TheMovieDB.get_movie_tmdb_id(imdb_id=params.get("imdb_id", False), dbid=params.get("dbid", False)) if movie_id: data = TheMovieDB.get_movie_lists(movie_id), "MovieLists" elif info == 'keywords': movie_id = params.get("id", False) if not movie_id: movie_id = TheMovieDB.get_movie_tmdb_id(imdb_id=params.get("imdb_id", False), dbid=params.get("dbid", False)) if movie_id: data = TheMovieDB.get_keywords(movie_id), "Keywords" elif info == 'popularpeople': data = TheMovieDB.get_popular_actors(), "PopularPeople" elif info == 'directormovies': if params.get("director"): director_info = TheMovieDB.get_person_info(person_label=params["director"], skip_dialog=True) if director_info and director_info.get("id"): movies = TheMovieDB.get_person_movies(director_info["id"]) for item in movies: del item["credit_id"] data = merge_dict_lists(movies, key="department"), "DirectorMovies" elif info == 'writermovies': if params.get("writer") and not params["writer"].split(" / ")[0] == params.get("director", "").split(" / ")[0]: writer_info = TheMovieDB.get_person_info(person_label=params["writer"], skip_dialog=True) if writer_info and writer_info.get("id"): movies = TheMovieDB.get_person_movies(writer_info["id"]) for item in movies: del item["credit_id"] data = merge_dict_lists(movies, key="department"), "WriterMovies" elif info == 'similarmoviestrakt': if params.get("id", False) or params.get("dbid"): if params.get("dbid"): movie_id = local_db.get_imdb_id("movie", params["dbid"]) else: movie_id = params.get("id", "") data = Trakt.get_similar("movie", movie_id), "SimilarMovies" elif info == 'similartvshowstrakt': if (params.get("id", "") or params["dbid"]): if params.get("dbid"): if params.get("type") == "episode": tvshow_id = local_db.get_tvshow_id_by_episode(params["dbid"]) else: tvshow_id = local_db.get_imdb_id(media_type="tvshow", dbid=params["dbid"]) else: tvshow_id = params.get("id", "") data = Trakt.get_similar("show", tvshow_id), "SimilarTVShows" elif info == 'airingshows': data = Trakt.get_calendar_shows("shows"), "AiringShows" elif info == 'premiereshows': data = Trakt.get_calendar_shows("premieres"), "PremiereShows" elif info == 'trendingshows': data = Trakt.get_trending_shows(), "TrendingShows" elif info == 'trendingmovies': data = Trakt.get_trending_movies(), "TrendingMovies" elif info == 'similarartistsinlibrary': if params.get("artist_mbid"): data = local_db.get_similar_artists(params.get("artist_mbid")), "SimilarArtists" elif info == 'artistevents': if params.get("artist_mbid"): data = LastFM.get_events(params.get("artist_mbid")), "ArtistEvents" elif info == 'youtubesearch': HOME.setProperty('%sSearchValue' % params.get("prefix", ""), params.get("id", "")) # set properties if params.get("id"): listitems = YouTube.search(search_str=params.get("id", ""), hd=params.get("hd", ""), orderby=params.get("orderby", "relevance")) data = listitems.get("listitems", []), "YoutubeSearch" elif info == 'youtubeplaylist': if params.get("id"): data = YouTube.get_playlist_videos(params.get("id", "")), "YoutubePlaylist" elif info == 'youtubeusersearch': user_name = params.get("id", "") if user_name: playlists = YouTube.get_user_playlists(user_name) data = YouTube.get_playlist_videos(playlists["uploads"]), "YoutubeUserSearch" elif info == 'nearevents': eventinfo = LastFM.get_near_events(tag=params.get("tag", ""), festivals_only=params.get("festivalsonly", ""), lat=params.get("lat", ""), lon=params.get("lon", ""), location=params.get("location", ""), distance=params.get("distance", "")) data = eventinfo, "NearEvents" elif info == 'trackinfo': HOME.setProperty('%sSummary' % params.get("prefix", ""), "") # set properties if params["artistname"] and params["trackname"]: track_info = LastFM.get_track_info(artist=params["artistname"], track=params["trackname"]) HOME.setProperty('%sSummary' % params.get("prefix", ""), track_info["summary"]) # set properties elif info == 'venueevents': if params["location"]: params["id"] = LastFM.get_venue_id(params["location"]) if params.get("id", ""): data = LastFM.get_venue_events(params.get("id", "")), "VenueEvents" else: notify("Error", "Could not find venue") elif info == 'topartistsnearevents': artists = local_db.get_artists() import BandsInTown data = BandsInTown.get_near_events(artists[0:49]), "TopArtistsNearEvents" elif info == 'favourites': if params.get("id", ""): favs = get_favs_by_type(params.get("id", "")) else: favs = get_favs() HOME.setProperty('favourite.count', str(len(favs))) if favs: HOME.setProperty('favourite.1.name', favs[-1]["Label"]) data = favs, "Favourites" elif info == 'similarlocal' and "dbid" in params: data = local_db.get_similar_movies(params["dbid"]), "SimilarLocalMovies" elif info == 'iconpanel': data = get_icon_panel(int(params["id"])), "IconPanel" + str(params["id"]) elif info == 'autocomplete': data = get_autocomplete_items(params["id"]), "AutoComplete" elif info == 'weather': data = get_weather_images(), "WeatherImages" elif info == "sortletters": data = get_sort_letters(params["path"], params.get("id", "")), "SortLetters" # ACTIONS elif info == 't9input': resolve_url(params.get("handle")) from T9Search import T9Search dialog = T9Search(call=None, start_value="") KodiJson.send_text(text=dialog.search_str) elif info in ['playmovie', 'playepisode', 'playmusicvideo', 'playalbum', 'playsong']: resolve_url(params.get("handle")) KodiJson.play_media(media_type=info.replace("play", ""), dbid=params.get("dbid"), resume=params.get("resume", "true")) elif info == "openinfodialog": resolve_url(params.get("handle")) dbid = xbmc.getInfoLabel("ListItem.DBID") if not dbid: dbid = xbmc.getInfoLabel("ListItem.Property(dbid)") if xbmc.getCondVisibility("Container.Content(movies)"): params = {"dbid": dbid, "id": xbmc.getInfoLabel("ListItem.Property(id)"), "name": xbmc.getInfoLabel("ListItem.Title")} start_info_actions(["extendedinfo"], params) elif xbmc.getCondVisibility("Container.Content(tvshows)"): params = {"dbid": dbid, "id": xbmc.getInfoLabel("ListItem.Property(id)"), "name": xbmc.getInfoLabel("ListItem.Title")} start_info_actions(["extendedtvinfo"], params) elif xbmc.getCondVisibility("Container.Content(seasons)"): params = {"tvshow": xbmc.getInfoLabel("ListItem.TVShowTitle"), "season": xbmc.getInfoLabel("ListItem.Season")} start_info_actions(["seasoninfo"], params) elif xbmc.getCondVisibility("Container.Content(episodes)"): params = {"tvshow": xbmc.getInfoLabel("ListItem.TVShowTitle"), "season": xbmc.getInfoLabel("ListItem.Season"), "episode": xbmc.getInfoLabel("ListItem.Episode")} start_info_actions(["extendedepisodeinfo"], params) elif xbmc.getCondVisibility("Container.Content(actors) | Container.Content(directors)"): params = {"name": xbmc.getInfoLabel("ListItem.Label")} start_info_actions(["extendedactorinfo"], params) else: notify("Error", "Could not find valid content type") elif info == "ratedialog": resolve_url(params.get("handle")) if xbmc.getCondVisibility("Container.Content(movies)"): params = {"dbid": xbmc.getInfoLabel("ListItem.DBID"), "id": xbmc.getInfoLabel("ListItem.Property(id)"), "type": "movie"} start_info_actions(["ratemedia"], params) elif xbmc.getCondVisibility("Container.Content(tvshows)"): params = {"dbid": xbmc.getInfoLabel("ListItem.DBID"), "id": xbmc.getInfoLabel("ListItem.Property(id)"), "type": "tv"} start_info_actions(["ratemedia"], params) elif xbmc.getCondVisibility("Container.Content(episodes)"): params = {"tvshow": xbmc.getInfoLabel("ListItem.TVShowTitle"), "season": xbmc.getInfoLabel("ListItem.Season"), "type": "episode"} start_info_actions(["ratemedia"], params) elif info == 'youtubebrowser': resolve_url(params.get("handle")) wm.open_youtube_list(search_str=params.get("id", "")) elif info == 'moviedbbrowser': resolve_url(params.get("handle")) search_str = params.get("id", "") if not search_str and params.get("search", ""): result = xbmcgui.Dialog().input(heading=LANG(16017), type=xbmcgui.INPUT_ALPHANUM) if result and result > -1: search_str = result else: return None wm.open_video_list(search_str=search_str, mode="search") elif info == 'extendedinfo': resolve_url(params.get("handle")) HOME.setProperty('infodialogs.active', "true") wm.open_movie_info(movie_id=params.get("id", ""), dbid=params.get("dbid", None), imdb_id=params.get("imdb_id", ""), name=params.get("name", "")) HOME.clearProperty('infodialogs.active') elif info == 'extendedactorinfo': resolve_url(params.get("handle")) HOME.setProperty('infodialogs.active', "true") wm.open_actor_info(actor_id=params.get("id", ""), name=params.get("name", "")) HOME.clearProperty('infodialogs.active') elif info == 'extendedtvinfo': resolve_url(params.get("handle")) HOME.setProperty('infodialogs.active', "true") wm.open_tvshow_info(tvshow_id=params.get("id", ""), tvdb_id=params.get("tvdb_id", ""), dbid=params.get("dbid", None), imdb_id=params.get("imdb_id", ""), name=params.get("name", "")) HOME.clearProperty('infodialogs.active') elif info == 'seasoninfo': resolve_url(params.get("handle")) HOME.setProperty('infodialogs.active', "true") wm.open_season_info(tvshow=params.get("tvshow"), dbid=params.get("dbid"), season=params.get("season")) HOME.clearProperty('infodialogs.active') elif info == 'extendedepisodeinfo': resolve_url(params.get("handle")) HOME.setProperty('infodialogs.active', "true") wm.open_episode_info(tvshow=params.get("tvshow"), tvshow_id=params.get("tvshow_id"), dbid=params.get("dbid"), episode=params.get("episode"), season=params.get("season")) HOME.clearProperty('infodialogs.active') elif info == 'albuminfo': resolve_url(params.get("handle")) if params.get("id", ""): album_details = AudioDB.get_album_details(params.get("id", "")) pass_dict_to_skin(album_details, params.get("prefix", "")) elif info == 'artistdetails': resolve_url(params.get("handle")) artist_details = AudioDB.get_artist_details(params["artistname"]) pass_dict_to_skin(artist_details, params.get("prefix", "")) elif info == 'ratemedia': resolve_url(params.get("handle")) media_type = params.get("type", False) if media_type: if params.get("id") and params["id"]: tmdb_id = params["id"] elif media_type == "movie": tmdb_id = TheMovieDB.get_movie_tmdb_id(imdb_id=params.get("imdb_id", ""), dbid=params.get("dbid", ""), name=params.get("name", "")) elif media_type == "tv" and params["dbid"]: tvdb_id = local_db.get_imdb_id(media_type="tvshow", dbid=params["dbid"]) tmdb_id = TheMovieDB.get_show_tmdb_id(tvdb_id=tvdb_id) else: return False TheMovieDB.set_rating_prompt(media_type=media_type, media_id=tmdb_id) elif info == 'setfocus': resolve_url(params.get("handle")) xbmc.executebuiltin("SetFocus(22222)") elif info == 'playliststats': resolve_url(params.get("handle")) get_playlist_stats(params.get("id", "")) elif info == 'slideshow': resolve_url(params.get("handle")) window_id = xbmcgui.getCurrentwindow_id() window = xbmcgui.Window(window_id) # focusid = Window.getFocusId() num_items = window.getFocus().getSelectedPosition() for i in range(0, num_items): notify(item.getProperty("Image")) elif info == 'action': resolve_url(params.get("handle")) for builtin in params.get("id", "").split("$$"): xbmc.executebuiltin(builtin) return None elif info == 'selectautocomplete': resolve_url(params.get("handle")) try: window_id = xbmcgui.getCurrentWindowDialogId() window = xbmcgui.Window(window_id) except: return None KodiJson.send_text(text=params.get("id"), close_keyboard=False) # xbmc.executebuiltin("SendClick(103,32)") window.setFocusId(300) elif info == 'bounce': resolve_url(params.get("handle")) HOME.setProperty(params.get("name", ""), "True") xbmc.sleep(200) HOME.clearProperty(params.get("name", "")) elif info == "youtubevideo": resolve_url(params.get("handle")) xbmc.executebuiltin("Dialog.Close(all,true)") PLAYER.play_youtube_video(params.get("id", "")) elif info == 'playtrailer': resolve_url(params.get("handle")) xbmc.executebuiltin("ActivateWindow(busydialog)") if params.get("id", ""): movie_id = params.get("id", "") elif int(params.get("dbid", -1)) > 0: movie_id = local_db.get_imdb_id(media_type="movie", dbid=params["dbid"]) elif params.get("imdb_id", ""): movie_id = get_movie_tmdb_id(params.get("imdb_id", "")) else: movie_id = "" if movie_id: trailer = TheMovieDB.get_trailer(movie_id) xbmc.executebuiltin("Dialog.Close(busydialog)") xbmc.sleep(100) if trailer: PLAYER.play_youtube_video(trailer) elif params.get("title"): wm.open_youtube_list(search_str=params.get("title", "")) else: xbmc.executebuiltin("Dialog.Close(busydialog)") elif info == 'deletecache': resolve_url(params.get("handle")) HOME.clearProperties() import shutil for rel_path in os.listdir(ADDON_DATA_PATH): path = os.path.join(ADDON_DATA_PATH, rel_path) try: if os.path.isdir(path): shutil.rmtree(path) except Exception as e: log(e) notify("Cache deleted") elif info == 'syncwatchlist': pass elif info == "widgetdialog": resolve_url(params.get("handle")) widget_selectdialog() listitems, prefix = data if params.get("handle"): xbmcplugin.addSortMethod(params.get("handle"), xbmcplugin.SORT_METHOD_TITLE) xbmcplugin.addSortMethod(params.get("handle"), xbmcplugin.SORT_METHOD_VIDEO_YEAR) xbmcplugin.addSortMethod(params.get("handle"), xbmcplugin.SORT_METHOD_DURATION) if info.endswith("shows"): xbmcplugin.setContent(params.get("handle"), 'tvshows') else: xbmcplugin.setContent(params.get("handle"), 'movies') pass_list_to_skin(name=prefix, data=listitems, prefix=params.get("prefix", ""), handle=params.get("handle", ""), limit=params.get("limit", 20))
def start_info_actions(info, params): if "artistname" in params: params["artistname"] = params.get("artistname", "").split(" feat. ")[0].strip() params["artist_mbid"] = fetch_musicbrainz_id(params["artistname"]) log(info) prettyprint(params) if "prefix" in params and not params["prefix"].endswith('.'): params["prefix"] = params["prefix"] + '.' # Audio if info == 'discography': discography = AudioDB.get_artist_discography(params["artistname"]) if not discography: discography = LastFM.get_artist_albums(params.get("artist_mbid")) return discography elif info == 'mostlovedtracks': return AudioDB.get_most_loved_tracks(params["artistname"]) elif info == 'trackdetails': return AudioDB.get_track_details(params.get("id", "")) elif info == 'topartists': return LastFM.get_top_artists() elif info == 'latestdbmovies': return LocalDB.local_db.get_movies( '"sort": {"order": "descending", "method": "dateadded"}', params.get("limit", 10)) elif info == 'randomdbmovies': return LocalDB.local_db.get_movies('"sort": {"method": "random"}', params.get("limit", 10)) elif info == 'inprogressdbmovies': method = '"sort": {"order": "descending", "method": "lastplayed"}, "filter": {"field": "inprogress", "operator": "true", "value": ""}' return LocalDB.local_db.get_movies(method, params.get("limit", 10)) # RottenTomatoesMovies elif info == 'intheatermovies': return RottenTomatoes.get_movies("movies/in_theaters") elif info == 'boxofficemovies': return RottenTomatoes.get_movies("movies/box_office") elif info == 'openingmovies': return RottenTomatoes.get_movies("movies/opening") elif info == 'comingsoonmovies': return RottenTomatoes.get_movies("movies/upcoming") elif info == 'toprentalmovies': return RottenTomatoes.get_movies("dvds/top_rentals") elif info == 'currentdvdmovies': return RottenTomatoes.get_movies("dvds/current_releases") elif info == 'newdvdmovies': return RottenTomatoes.get_movies("dvds/new_releases") elif info == 'upcomingdvdmovies': return RottenTomatoes.get_movies("dvds/upcoming") # The MovieDB elif info == 'incinemamovies': return tmdb.get_tmdb_movies("now_playing") elif info == 'upcomingmovies': return tmdb.get_tmdb_movies("upcoming") elif info == 'topratedmovies': return tmdb.get_tmdb_movies("top_rated") elif info == 'popularmovies': return tmdb.get_tmdb_movies("popular") elif info == 'ratedmovies': return tmdb.get_rated_media_items("movies") elif info == 'starredmovies': return tmdb.get_fav_items("movies") elif info == 'accountlists': account_lists = tmdb.handle_misc(tmdb.get_account_lists()) for item in account_lists: item["directory"] = True return account_lists elif info == 'listmovies': return tmdb.get_movies_from_list(params["id"]) elif info == 'airingtodaytvshows': return tmdb.get_tmdb_shows("airing_today") elif info == 'onairtvshows': return tmdb.get_tmdb_shows("on_the_air") elif info == 'topratedtvshows': return tmdb.get_tmdb_shows("top_rated") elif info == 'populartvshows': return tmdb.get_tmdb_shows("popular") elif info == 'ratedtvshows': return tmdb.get_rated_media_items("tv") elif info == 'starredtvshows': return tmdb.get_fav_items("tv") elif info == 'similarmovies': movie_id = params.get("id") if not movie_id: movie_id = tmdb.get_movie_tmdb_id(imdb_id=params.get("imdb_id"), dbid=params.get("dbid")) if movie_id: return tmdb.get_similar_movies(movie_id) elif info == 'similartvshows': tvshow_id = None dbid = params.get("dbid") name = params.get("name") tmdb_id = params.get("tmdb_id") tvdb_id = params.get("tvdb_id") imdb_id = params.get("imdb_id") if tmdb_id: tvshow_id = tmdb_id elif dbid and int(dbid) > 0: tvdb_id = LocalDB.local_db.get_imdb_id("tvshow", dbid) if tvdb_id: tvshow_id = tmdb.get_show_tmdb_id(tvdb_id) elif tvdb_id: tvshow_id = tmdb.get_show_tmdb_id(tvdb_id) elif imdb_id: tvshow_id = tmdb.get_show_tmdb_id(imdb_id, "imdb_id") elif name: tvshow_id = tmdb.search_media(media_name=name, year="", media_type="tv") if tvshow_id: return tmdb.get_similar_tvshows(tvshow_id) elif info == 'studio': if params.get("id"): return tmdb.get_company_data(params["id"]) elif params.get("studio"): company_data = tmdb.search_company(params["studio"]) if company_data: return tmdb.get_company_data(company_data[0]["id"]) elif info == 'set': if params.get("dbid") and "show" not in params.get("type", ""): name = LocalDB.local_db.get_set_name(params["dbid"]) if name: params["setid"] = tmdb.get_set_id(name) if params.get("setid"): set_data, _ = tmdb.get_set_movies(params["setid"]) return set_data elif info == 'movielists': movie_id = params.get("id") if not movie_id: movie_id = tmdb.get_movie_tmdb_id(imdb_id=params.get("imdb_id"), dbid=params.get("dbid")) if movie_id: return tmdb.get_movie_lists(movie_id) elif info == 'keywords': movie_id = params.get("id") if not movie_id: movie_id = tmdb.get_movie_tmdb_id(imdb_id=params.get("imdb_id"), dbid=params.get("dbid")) if movie_id: return tmdb.get_keywords(movie_id) elif info == 'popularpeople': return tmdb.get_popular_actors() elif info == 'directormovies': director_info = tmdb.get_person_info( person_label=params.get("director"), skip_dialog=True) if director_info and director_info.get("id"): movies = tmdb.get_person_movies(director_info["id"]) for item in movies: del item["credit_id"] return merge_dict_lists(movies, key="department") elif info == 'writermovies': writer = params.get("writer") if writer and not writer.split(" / ")[0] == params.get( "director", "").split(" / ")[0]: writer_info = tmdb.get_person_info(person_label=writer, skip_dialog=True) if writer_info and writer_info.get("id"): movies = tmdb.get_person_movies(writer_info["id"]) for item in movies: del item["credit_id"] return merge_dict_lists(movies, key="department") elif info == 'traktsimilarmovies': if params.get("id") or params.get("dbid"): if params.get("dbid"): movie_id = LocalDB.local_db.get_imdb_id( "movie", params["dbid"]) else: movie_id = params["id"] return Trakt.get_similar("movie", movie_id) elif info == 'traktsimilartvshows': if params.get("id") or params.get("dbid"): if params.get("dbid"): if params.get("type") == "episode": tvshow_id = LocalDB.local_db.get_tvshow_id_by_episode( params["dbid"]) else: tvshow_id = LocalDB.local_db.get_imdb_id( media_type="tvshow", dbid=params["dbid"]) else: tvshow_id = params["id"] return Trakt.get_similar("show", tvshow_id) elif info == 'airingepisodes': return Trakt.get_calendar_shows("shows") elif info == 'premiereepisodes': return Trakt.get_calendar_shows("premieres") elif info == 'trendingshows': return Trakt.get_trending_shows() elif info == 'trendingmovies': return Trakt.get_trending_movies() elif info == 'similarartistsinlibrary': return LocalDB.local_db.get_similar_artists(params.get("artist_mbid")) elif info == 'trackinfo': HOME.clearProperty('%sSummary' % params.get("prefix", "")) if params["artistname"] and params["trackname"]: track_info = LastFM.get_track_info( artist_name=params["artistname"], track=params["trackname"]) HOME.setProperty('%sSummary' % params.get("prefix", ""), track_info["summary"]) elif info == 'topartistsnearevents': artists = LocalDB.local_db.get_artists() import BandsInTown return BandsInTown.get_near_events(artists[0:49]) elif info == 'youtubesearch': HOME.setProperty('%sSearchValue' % params.get("prefix", ""), params.get("id", "")) if params.get("id"): listitems = YouTube.search(search_str=params.get("id", ""), hd=params.get("hd", ""), orderby=params.get( "orderby", "relevance")) return listitems.get("listitems", []) elif info == 'youtubeplaylist': return YouTube.get_playlist_videos(params.get("id", "")) elif info == 'youtubeusersearch': user_name = params.get("id") if user_name: playlists = YouTube.get_user_playlists(user_name) return YouTube.get_playlist_videos(playlists["uploads"]) elif info == 'favourites': if params.get("id"): favs = get_favs_by_type(params["id"]) else: favs = get_favs() HOME.setProperty('favourite.count', str(len(favs))) if favs: HOME.setProperty('favourite.1.name', favs[-1]["Label"]) return favs elif info == 'similarlocalmovies' and "dbid" in params: return LocalDB.local_db.get_similar_movies(params["dbid"]) elif info == 'iconpanel': return get_icon_panel(int( params["id"])), "IconPanel" + str(params["id"]) elif info == 'weather': return get_weather_images() elif info == "sortletters": return get_sort_letters(params["path"], params.get("id", "")) # ACTIONS resolve_url(params.get("handle")) if info == 't9input': import T9Search dialog = T9Search.T9Search(call=None, start_value="") KodiJson.send_text(text=dialog.search_str) elif info in [ 'playmovie', 'playepisode', 'playmusicvideo', 'playalbum', 'playsong' ]: KodiJson.play_media(media_type=info.replace("play", ""), dbid=params.get("dbid"), resume=params.get("resume", "true")) elif info == "openinfodialog": if xbmc.getCondVisibility("System.HasModalDialog"): container_id = "" else: container_id = "Container(%s)" % get_infolabel( "System.CurrentControlId") dbid = get_infolabel("%sListItem.DBID" % container_id) db_type = get_infolabel("%sListItem.DBType" % container_id) if not dbid: dbid = get_infolabel("%sListItem.Property(dbid)" % container_id) if db_type == "movie": params = { "dbid": dbid, "id": get_infolabel("%sListItem.Property(id)" % container_id), "name": get_infolabel("%sListItem.Title" % container_id) } start_info_actions("extendedinfo", params) elif db_type == "tvshow": params = { "dbid": dbid, "tvdb_id": get_infolabel("%sListItem.Property(tvdb_id)" % container_id), "id": get_infolabel("%sListItem.Property(id)" % container_id), "name": get_infolabel("%sListItem.Title" % container_id) } start_info_actions("extendedtvinfo", params) elif db_type == "season": params = { "tvshow": get_infolabel("%sListItem.TVShowTitle" % container_id), "season": get_infolabel("%sListItem.Season" % container_id) } start_info_actions("seasoninfo", params) elif db_type == "episode": params = { "tvshow": get_infolabel("%sListItem.TVShowTitle" % container_id), "season": get_infolabel("%sListItem.Season" % container_id), "episode": get_infolabel("%sListItem.Episode" % container_id) } start_info_actions("extendedepisodeinfo", params) elif db_type in ["actor", "director"]: params = {"name": get_infolabel("%sListItem.Label" % container_id)} start_info_actions("extendedactorinfo", params) else: notify("Error", "Could not find valid content type") elif info == "ratedialog": if xbmc.getCondVisibility("System.HasModalDialog"): container_id = "" else: container_id = "Container(%s)" % get_infolabel( "System.CurrentControlId") dbid = get_infolabel("%sListItem.DBID" % container_id) db_type = get_infolabel("%sListItem.DBType" % container_id) if not dbid: dbid = get_infolabel("%sListItem.Property(dbid)" % container_id) if db_type == "movie": params = { "dbid": dbid, "id": get_infolabel("%sListItem.Property(id)" % container_id), "type": "movie" } start_info_actions("ratemedia", params) elif db_type == "tvshow": params = { "dbid": dbid, "id": get_infolabel("%sListItem.Property(id)" % container_id), "type": "tv" } start_info_actions("ratemedia", params) if db_type == "episode": params = { "tvshow": get_infolabel("%sListItem.TVShowTitle" % container_id), "season": get_infolabel("%sListItem.Season" % container_id), "type": "episode" } start_info_actions("ratemedia", params) elif info == 'youtubebrowser': wm.open_youtube_list(search_str=params.get("id", "")) elif info == 'moviedbbrowser': search_str = params.get("id", "") if not search_str and params.get("search"): result = xbmcgui.Dialog().input(heading=LANG(16017), type=xbmcgui.INPUT_ALPHANUM) if result and result > -1: search_str = result else: return None wm.open_video_list(search_str=search_str, mode="search") elif info == 'extendedinfo': HOME.setProperty('infodialogs.active', "true") wm.open_movie_info(movie_id=params.get("id"), dbid=params.get("dbid"), imdb_id=params.get("imdb_id"), name=params.get("name")) HOME.clearProperty('infodialogs.active') elif info == 'extendedactorinfo': HOME.setProperty('infodialogs.active', "true") wm.open_actor_info(actor_id=params.get("id"), name=params.get("name")) HOME.clearProperty('infodialogs.active') elif info == 'extendedtvinfo': HOME.setProperty('infodialogs.active', "true") wm.open_tvshow_info(tmdb_id=params.get("id"), tvdb_id=params.get("tvdb_id"), dbid=params.get("dbid"), imdb_id=params.get("imdb_id"), name=params.get("name")) HOME.clearProperty('infodialogs.active') elif info == 'seasoninfo': HOME.setProperty('infodialogs.active', "true") wm.open_season_info(tvshow=params.get("tvshow"), dbid=params.get("dbid"), season=params.get("season")) HOME.clearProperty('infodialogs.active') elif info == 'extendedepisodeinfo': HOME.setProperty('infodialogs.active', "true") wm.open_episode_info(tvshow=params.get("tvshow"), tvshow_id=params.get("tvshow_id"), dbid=params.get("dbid"), episode=params.get("episode"), season=params.get("season")) HOME.clearProperty('infodialogs.active') elif info == 'albuminfo': if params.get("id"): album_details = AudioDB.get_album_details(params.get("id")) pass_dict_to_skin(album_details, params.get("prefix", "")) elif info == 'artistdetails': artist_details = AudioDB.get_artist_details(params["artistname"]) pass_dict_to_skin(artist_details, params.get("prefix", "")) elif info == 'ratemedia': media_type = params.get("type") if media_type: if params.get("id"): tmdb_id = params["id"] elif media_type == "movie": tmdb_id = tmdb.get_movie_tmdb_id(imdb_id=params.get("imdb_id"), dbid=params.get("dbid"), name=params.get("name")) elif media_type == "tv" and params.get("dbid"): tvdb_id = LocalDB.local_db.get_imdb_id(media_type="tvshow", dbid=params["dbid"]) tmdb_id = tmdb.get_show_tmdb_id(tvdb_id=tvdb_id) else: return False tmdb.set_rating_prompt(media_type=media_type, media_id=tmdb_id, dbid=params.get("dbid")) elif info == 'playliststats': get_playlist_stats(params.get("id", "")) elif info == 'slideshow': window_id = xbmcgui.getCurrentwindow_id() window = xbmcgui.Window(window_id) # focusid = Window.getFocusId() num_items = window.getFocus().getSelectedPosition() for i in range(0, num_items): notify(item.getProperty("Image")) elif info == 'action': for builtin in params.get("id", "").split("$$"): xbmc.executebuiltin(builtin) elif info == "youtubevideo": xbmc.executebuiltin("Dialog.Close(all,true)") VideoPlayer.PLAYER.play_youtube_video(params.get("id", "")) elif info == 'playtrailer': xbmc.executebuiltin("ActivateWindow(busydialog)") if params.get("id"): movie_id = params["id"] elif int(params.get("dbid", -1)) > 0: movie_id = LocalDB.local_db.get_imdb_id(media_type="movie", dbid=params["dbid"]) elif params.get("imdb_id"): movie_id = tmdb.get_movie_tmdb_id(params["imdb_id"]) else: movie_id = "" if movie_id: trailer = tmdb.get_trailer(movie_id) xbmc.executebuiltin("Dialog.Close(busydialog)") time.sleep(0.1) if trailer: VideoPlayer.PLAYER.play_youtube_video(trailer) elif params.get("title"): wm.open_youtube_list(search_str=params["title"]) else: xbmc.executebuiltin("Dialog.Close(busydialog)") elif info == 'deletecache': HOME.clearProperties() import shutil for rel_path in os.listdir(ADDON_DATA_PATH): path = os.path.join(ADDON_DATA_PATH, rel_path) try: if os.path.isdir(path): shutil.rmtree(path) except Exception as e: log(e) notify("Cache deleted") elif info == 'syncwatchlist': pass elif info == "widgetdialog": widget_selectdialog()
def start_info_actions(info, params): if "artistname" in params: params["artistname"] = params.get("artistname", "").split(" feat. ")[0].strip() params["artist_mbid"] = fetch_musicbrainz_id(params["artistname"]) log(info) prettyprint(params) if "prefix" in params and not params["prefix"].endswith('.'): params["prefix"] = params["prefix"] + '.' # Audio if info == 'discography': discography = AudioDB.get_artist_discography(params["artistname"]) if not discography: discography = LastFM.get_artist_albums(params.get("artist_mbid")) return discography elif info == 'mostlovedtracks': return AudioDB.get_most_loved_tracks(params["artistname"]) elif info == 'trackdetails': return AudioDB.get_track_details(params.get("id", "")) elif info == 'topartists': return LastFM.get_top_artists() elif info == 'latestdbmovies': return LocalDB.local_db.get_movies('"sort": {"order": "descending", "method": "dateadded"}', params.get("limit", 10)) elif info == 'randomdbmovies': return LocalDB.local_db.get_movies('"sort": {"method": "random"}', params.get("limit", 10)) elif info == 'inprogressdbmovies': method = '"sort": {"order": "descending", "method": "lastplayed"}, "filter": {"field": "inprogress", "operator": "true", "value": ""}' return LocalDB.local_db.get_movies(method, params.get("limit", 10)) # RottenTomatoesMovies elif info == 'intheatermovies': return RottenTomatoes.get_movies("movies/in_theaters") elif info == 'boxofficemovies': return RottenTomatoes.get_movies("movies/box_office") elif info == 'openingmovies': return RottenTomatoes.get_movies("movies/opening") elif info == 'comingsoonmovies': return RottenTomatoes.get_movies("movies/upcoming") elif info == 'toprentalmovies': return RottenTomatoes.get_movies("dvds/top_rentals") elif info == 'currentdvdmovies': return RottenTomatoes.get_movies("dvds/current_releases") elif info == 'newdvdmovies': return RottenTomatoes.get_movies("dvds/new_releases") elif info == 'upcomingdvdmovies': return RottenTomatoes.get_movies("dvds/upcoming") # The MovieDB elif info == 'incinemamovies': return tmdb.get_tmdb_movies("now_playing") elif info == 'upcomingmovies': return tmdb.get_tmdb_movies("upcoming") elif info == 'topratedmovies': return tmdb.get_tmdb_movies("top_rated") elif info == 'popularmovies': return tmdb.get_tmdb_movies("popular") elif info == 'ratedmovies': return tmdb.get_rated_media_items("movies") elif info == 'starredmovies': return tmdb.get_fav_items("movies") elif info == 'accountlists': account_lists = tmdb.handle_misc(tmdb.get_account_lists()) for item in account_lists: item["directory"] = True return account_lists elif info == 'listmovies': return tmdb.get_movies_from_list(params["id"]) elif info == 'airingtodaytvshows': return tmdb.get_tmdb_shows("airing_today") elif info == 'onairtvshows': return tmdb.get_tmdb_shows("on_the_air") elif info == 'topratedtvshows': return tmdb.get_tmdb_shows("top_rated") elif info == 'populartvshows': return tmdb.get_tmdb_shows("popular") elif info == 'ratedtvshows': return tmdb.get_rated_media_items("tv") elif info == 'starredtvshows': return tmdb.get_fav_items("tv") elif info == 'similarmovies': movie_id = params.get("id") if not movie_id: movie_id = tmdb.get_movie_tmdb_id(imdb_id=params.get("imdb_id"), dbid=params.get("dbid")) if movie_id: return tmdb.get_similar_movies(movie_id) elif info == 'similartvshows': tvshow_id = None dbid = params.get("dbid") name = params.get("name") tmdb_id = params.get("tmdb_id") tvdb_id = params.get("tvdb_id") imdb_id = params.get("imdb_id") if tmdb_id: tvshow_id = tmdb_id elif dbid and int(dbid) > 0: tvdb_id = LocalDB.local_db.get_imdb_id("tvshow", dbid) if tvdb_id: tvshow_id = tmdb.get_show_tmdb_id(tvdb_id) elif tvdb_id: tvshow_id = tmdb.get_show_tmdb_id(tvdb_id) elif imdb_id: tvshow_id = tmdb.get_show_tmdb_id(imdb_id, "imdb_id") elif name: tvshow_id = tmdb.search_media(media_name=name, year="", media_type="tv") if tvshow_id: return tmdb.get_similar_tvshows(tvshow_id) elif info == 'studio': if params.get("id"): return tmdb.get_company_data(params["id"]) elif params.get("studio"): company_data = tmdb.search_company(params["studio"]) if company_data: return tmdb.get_company_data(company_data[0]["id"]) elif info == 'set': if params.get("dbid") and "show" not in params.get("type", ""): name = LocalDB.local_db.get_set_name(params["dbid"]) if name: params["setid"] = tmdb.get_set_id(name) if params.get("setid"): set_data, _ = tmdb.get_set_movies(params["setid"]) return set_data elif info == 'movielists': movie_id = params.get("id") if not movie_id: movie_id = tmdb.get_movie_tmdb_id(imdb_id=params.get("imdb_id"), dbid=params.get("dbid")) if movie_id: return tmdb.get_movie_lists(movie_id) elif info == 'keywords': movie_id = params.get("id") if not movie_id: movie_id = tmdb.get_movie_tmdb_id(imdb_id=params.get("imdb_id"), dbid=params.get("dbid")) if movie_id: return tmdb.get_keywords(movie_id) elif info == 'popularpeople': return tmdb.get_popular_actors() elif info == 'directormovies': director_info = tmdb.get_person_info(person_label=params.get("director"), skip_dialog=True) if director_info and director_info.get("id"): movies = tmdb.get_person_movies(director_info["id"]) for item in movies: del item["credit_id"] return merge_dict_lists(movies, key="department") elif info == 'writermovies': writer = params.get("writer") if writer and not writer.split(" / ")[0] == params.get("director", "").split(" / ")[0]: writer_info = tmdb.get_person_info(person_label=writer, skip_dialog=True) if writer_info and writer_info.get("id"): movies = tmdb.get_person_movies(writer_info["id"]) for item in movies: del item["credit_id"] return merge_dict_lists(movies, key="department") elif info == 'traktsimilarmovies': if params.get("id") or params.get("dbid"): if params.get("dbid"): movie_id = LocalDB.local_db.get_imdb_id("movie", params["dbid"]) else: movie_id = params["id"] return Trakt.get_similar("movie", movie_id) elif info == 'traktsimilartvshows': if params.get("id") or params.get("dbid"): if params.get("dbid"): if params.get("type") == "episode": tvshow_id = LocalDB.local_db.get_tvshow_id_by_episode(params["dbid"]) else: tvshow_id = LocalDB.local_db.get_imdb_id(media_type="tvshow", dbid=params["dbid"]) else: tvshow_id = params["id"] return Trakt.get_similar("show", tvshow_id) elif info == 'airingepisodes': return Trakt.get_calendar_shows("shows") elif info == 'premiereepisodes': return Trakt.get_calendar_shows("premieres") elif info == 'trendingshows': return Trakt.get_trending_shows() elif info == 'trendingmovies': return Trakt.get_trending_movies() elif info == 'similarartistsinlibrary': return LocalDB.local_db.get_similar_artists(params.get("artist_mbid")) elif info == 'trackinfo': HOME.clearProperty('%sSummary' % params.get("prefix", "")) if params["artistname"] and params["trackname"]: track_info = LastFM.get_track_info(artist_name=params["artistname"], track=params["trackname"]) HOME.setProperty('%sSummary' % params.get("prefix", ""), track_info["summary"]) elif info == 'topartistsnearevents': artists = LocalDB.local_db.get_artists() import BandsInTown return BandsInTown.get_near_events(artists[0:49]) elif info == 'youtubesearch': HOME.setProperty('%sSearchValue' % params.get("prefix", ""), params.get("id", "")) if params.get("id"): listitems = YouTube.search(search_str=params.get("id", ""), hd=params.get("hd", ""), orderby=params.get("orderby", "relevance")) return listitems.get("listitems", []) elif info == 'youtubeplaylist': return YouTube.get_playlist_videos(params.get("id", "")) elif info == 'youtubeusersearch': user_name = params.get("id") if user_name: playlists = YouTube.get_user_playlists(user_name) return YouTube.get_playlist_videos(playlists["uploads"]) elif info == 'favourites': if params.get("id"): favs = get_favs_by_type(params["id"]) else: favs = get_favs() HOME.setProperty('favourite.count', str(len(favs))) if favs: HOME.setProperty('favourite.1.name', favs[-1]["Label"]) return favs elif info == 'similarlocalmovies' and "dbid" in params: return LocalDB.local_db.get_similar_movies(params["dbid"]) elif info == 'iconpanel': return get_icon_panel(int(params["id"])), "IconPanel" + str(params["id"]) elif info == 'weather': return get_weather_images() # ACTIONS resolve_url(params.get("handle")) if info == 't9input': import T9Search dialog = T9Search.T9Search(call=None, start_value="") KodiJson.send_text(text=dialog.search_str) elif info in ['playmovie', 'playepisode', 'playmusicvideo', 'playalbum', 'playsong']: KodiJson.play_media(media_type=info.replace("play", ""), dbid=params.get("dbid"), resume=params.get("resume", "true")) elif info == "openinfodialog": if xbmc.getCondVisibility("System.HasModalDialog"): container_id = "" else: container_id = "Container(%s)" % get_infolabel("System.CurrentControlId") dbid = get_infolabel("%sListItem.DBID" % container_id) db_type = get_infolabel("%sListItem.DBType" % container_id) if not dbid: dbid = get_infolabel("%sListItem.Property(dbid)" % container_id) if db_type == "movie": params = {"dbid": dbid, "id": get_infolabel("%sListItem.Property(id)" % container_id), "name": get_infolabel("%sListItem.Title" % container_id)} start_info_actions("extendedinfo", params) elif db_type == "tvshow": params = {"dbid": dbid, "tvdb_id": get_infolabel("%sListItem.Property(tvdb_id)" % container_id), "id": get_infolabel("%sListItem.Property(id)" % container_id), "name": get_infolabel("%sListItem.Title" % container_id)} start_info_actions("extendedtvinfo", params) elif db_type == "season": params = {"tvshow": get_infolabel("%sListItem.TVShowTitle" % container_id), "season": get_infolabel("%sListItem.Season" % container_id)} start_info_actions("seasoninfo", params) elif db_type == "episode": params = {"tvshow": get_infolabel("%sListItem.TVShowTitle" % container_id), "season": get_infolabel("%sListItem.Season" % container_id), "episode": get_infolabel("%sListItem.Episode" % container_id)} start_info_actions("extendedepisodeinfo", params) elif db_type in ["actor", "director"]: params = {"name": get_infolabel("%sListItem.Label" % container_id)} start_info_actions("extendedactorinfo", params) else: notify("Error", "Could not find valid content type") elif info == "ratedialog": if xbmc.getCondVisibility("System.HasModalDialog"): container_id = "" else: container_id = "Container(%s)" % get_infolabel("System.CurrentControlId") dbid = get_infolabel("%sListItem.DBID" % container_id) db_type = get_infolabel("%sListItem.DBType" % container_id) if not dbid: dbid = get_infolabel("%sListItem.Property(dbid)" % container_id) if db_type == "movie": params = {"dbid": dbid, "id": get_infolabel("%sListItem.Property(id)" % container_id), "type": "movie"} start_info_actions("ratemedia", params) elif db_type == "tvshow": params = {"dbid": dbid, "id": get_infolabel("%sListItem.Property(id)" % container_id), "type": "tv"} start_info_actions("ratemedia", params) if db_type == "episode": params = {"tvshow": get_infolabel("%sListItem.TVShowTitle" % container_id), "season": get_infolabel("%sListItem.Season" % container_id), "type": "episode"} start_info_actions("ratemedia", params) elif info == 'youtubebrowser': wm.open_youtube_list(search_str=params.get("id", "")) elif info == 'moviedbbrowser': active = HOME.getProperty('infodialogs.active') if active: return None HOME.setProperty('infodialogs.active', "true") search_str = params.get("id", "") if not search_str and params.get("search"): result = xbmcgui.Dialog().input(heading=LANG(16017), type=xbmcgui.INPUT_ALPHANUM) if result and result > -1: search_str = result else: return None wm.open_video_list(search_str=search_str, mode="search") HOME.clearProperty('infodialogs.active') elif info == 'extendedinfo': active = HOME.getProperty('infodialogs.active') if active: return None HOME.setProperty('infodialogs.active', "true") wm.open_movie_info(movie_id=params.get("id"), dbid=params.get("dbid"), imdb_id=params.get("imdb_id"), name=params.get("name")) HOME.clearProperty('infodialogs.active') elif info == 'extendedactorinfo': active = HOME.getProperty('infodialogs.active') if active: return None HOME.setProperty('infodialogs.active', "true") wm.open_actor_info(actor_id=params.get("id"), name=params.get("name")) HOME.clearProperty('infodialogs.active') elif info == 'extendedtvinfo': active = HOME.getProperty('infodialogs.active') if active: return None HOME.setProperty('infodialogs.active', "true") wm.open_tvshow_info(tmdb_id=params.get("id"), tvdb_id=params.get("tvdb_id"), dbid=params.get("dbid"), imdb_id=params.get("imdb_id"), name=params.get("name")) HOME.clearProperty('infodialogs.active') elif info == 'seasoninfo': active = HOME.getProperty('infodialogs.active') if active: return None HOME.setProperty('infodialogs.active', "true") wm.open_season_info(tvshow=params.get("tvshow"), dbid=params.get("dbid"), season=params.get("season")) HOME.clearProperty('infodialogs.active') elif info == 'extendedepisodeinfo': active = HOME.getProperty('infodialogs.active') if active: return None HOME.setProperty('infodialogs.active', "true") wm.open_episode_info(tvshow=params.get("tvshow"), tvshow_id=params.get("tvshow_id"), dbid=params.get("dbid"), episode=params.get("episode"), season=params.get("season")) HOME.clearProperty('infodialogs.active') elif info == 'albuminfo': if params.get("id"): album_details = AudioDB.get_album_details(params.get("id")) pass_dict_to_skin(album_details, params.get("prefix", "")) elif info == 'artistdetails': artist_details = AudioDB.get_artist_details(params["artistname"]) pass_dict_to_skin(artist_details, params.get("prefix", "")) elif info == 'ratemedia': media_type = params.get("type") if media_type: if params.get("id"): tmdb_id = params["id"] elif media_type == "movie": tmdb_id = tmdb.get_movie_tmdb_id(imdb_id=params.get("imdb_id"), dbid=params.get("dbid"), name=params.get("name")) elif media_type == "tv" and params.get("dbid"): tvdb_id = LocalDB.local_db.get_imdb_id(media_type="tvshow", dbid=params["dbid"]) tmdb_id = tmdb.get_show_tmdb_id(tvdb_id=tvdb_id) else: return False tmdb.set_rating_prompt(media_type=media_type, media_id=tmdb_id, dbid=params.get("dbid")) elif info == 'slideshow': window_id = xbmcgui.getCurrentwindow_id() window = xbmcgui.Window(window_id) # focusid = Window.getFocusId() num_items = window.getFocus().getSelectedPosition() for i in range(0, num_items): notify(item.getProperty("Image")) elif info == 'action': for builtin in params.get("id", "").split("$$"): xbmc.executebuiltin(builtin) elif info == "youtubevideo": xbmc.executebuiltin("Dialog.Close(all,true)") VideoPlayer.PLAYER.play_youtube_video(params.get("id", "")) elif info == 'playtrailer': xbmc.executebuiltin("ActivateWindow(busydialog)") if params.get("id"): movie_id = params["id"] elif int(params.get("dbid", -1)) > 0: movie_id = LocalDB.local_db.get_imdb_id(media_type="movie", dbid=params["dbid"]) elif params.get("imdb_id"): movie_id = tmdb.get_movie_tmdb_id(params["imdb_id"]) else: movie_id = "" if movie_id: trailer = tmdb.get_trailer(movie_id) xbmc.executebuiltin("Dialog.Close(busydialog)") time.sleep(0.1) if trailer: VideoPlayer.PLAYER.play_youtube_video(trailer) elif params.get("title"): wm.open_youtube_list(search_str=params["title"]) else: xbmc.executebuiltin("Dialog.Close(busydialog)") elif info == 'deletecache': HOME.clearProperties() import shutil for rel_path in os.listdir(ADDON_DATA_PATH): path = os.path.join(ADDON_DATA_PATH, rel_path) try: if os.path.isdir(path): shutil.rmtree(path) except Exception as e: log(e) notify("Cache deleted") elif info == 'syncwatchlist': pass