def album_list_ready (self, ds): self.file = self.album_template.render (error = ds.get_error(), list = ds.get_top_albums(), artist = ds.get_artist(), datasource = LastFM.datasource_link (self.basepath), stylesheet = self.styles) self.load_view ()
def get_similar_artists(self, artist_id): import LastFM simi_artists = LastFM.get_similar_artists(artist_id) if simi_artists is None: log('Last.fm didn\'t return proper response') return None if not self.artists: self.artists = self.get_artists() artists = [] for simi_artist, kodi_artist in itertools.product(simi_artists, self.artists): if kodi_artist['musicbrainzartistid'] and kodi_artist['musicbrainzartistid'] == simi_artist['mbid']: artists.append(kodi_artist) elif kodi_artist['artist'] == simi_artist['name']: data = get_kodi_json(method="AudioLibrary.GetArtistDetails", params='{"properties": ["genre", "description", "mood", "style", "born", "died", "formed", "disbanded", "yearsactive", "instrument", "fanart", "thumbnail"], "artistid": %s}' % str(kodi_artist['artistid'])) item = data["result"]["artistdetails"] artists.append({"title": item['label'], "Genre": " / ".join(item['genre']), "thumb": item['thumbnail'], "Fanart": item['fanart'], "Description": item['description'], "Born": item['born'], "Died": item['died'], "Formed": item['formed'], "Disbanded": item['disbanded'], "YearsActive": " / ".join(item['yearsactive']), "Style": " / ".join(item['style']), "Mood": " / ".join(item['mood']), "Instrument": " / ".join(item['instrument']), "LibraryPath": 'musicdb://artists/' + str(item['artistid']) + '/'}) log('%i of %i artists found in last.FM are in Kodi database' % (len(artists), len(simi_artists))) return artists
def fetch_top_tracks (self, artist): if LastFM.user_has_account() is False: return artist = urllib.quote_plus (artist) function = self.artist['top_tracks']['function'] cache = self.artist['top_tracks']['cache'] cachekey = "lastfm:artist:%s:%s" % (function, artist) url = '%sartist.%s&artist=%s&api_key=%s' % (LastFM.URL_PREFIX, function, artist, LastFM.API_KEY) cache.fetch(cachekey, url, self.fetch_artist_data_cb, self.artist['top_tracks'])
def get_similar_artists(self, artist_id): import LastFM simi_artists = LastFM.get_similar_artists(artist_id) if simi_artists is None: log('Last.fm didn\'t return proper response') return None if not self.artists: self.artists = self.get_artists() artists = [] for simi_artist, kodi_artist in itertools.product( simi_artists, self.artists): if kodi_artist['musicbrainzartistid'] and kodi_artist[ 'musicbrainzartistid'] == simi_artist['mbid']: artists.append(kodi_artist) elif kodi_artist['artist'] == simi_artist['name']: data = get_kodi_json( method="AudioLibrary.GetArtistDetails", params= '{"properties": ["genre", "description", "mood", "style", "born", "died", "formed", "disbanded", "yearsactive", "instrument", "fanart", "thumbnail"], "artistid": %s}' % str(kodi_artist['artistid'])) item = data["result"]["artistdetails"] artists.append({ "title": item['label'], "Genre": " / ".join(item['genre']), "thumb": item['thumbnail'], "Fanart": item['fanart'], "Description": item['description'], "Born": item['born'], "Died": item['died'], "Formed": item['formed'], "Disbanded": item['disbanded'], "YearsActive": " / ".join(item['yearsactive']), "Style": " / ".join(item['style']), "Mood": " / ".join(item['mood']), "Instrument": " / ".join(item['instrument']), "LibraryPath": 'musicdb://artists/' + str(item['artistid']) + '/' }) log('%i of %i artists found in last.FM are in Kodi database' % (len(artists), len(simi_artists))) return artists
def fetch_album_list(self, artist): if LastFM.user_has_account() is False: self.error = LastFM.NO_ACCOUNT_ERROR self.emit("albums-ready") return self.artist = artist qartist = urllib.parse.quote_plus(artist) self.error = None url = "%sartist.gettopalbums&artist=%s&api_key=%s&format=json" % (LastFM.URL_PREFIX, qartist, LastFM.API_KEY) cachekey = "lastfm:artist:gettopalbumsjson:%s" % qartist self.ranking_cache.fetch(cachekey, url, self.parse_album_list, artist)
def fetch_album_list(self, artist): if LastFM.user_has_account() is False: self.error = LastFM.NO_ACCOUNT_ERROR self.emit('albums-ready') return self.artist = artist qartist = urllib.quote_plus(artist) self.error = None url = "%sartist.gettopalbums&artist=%s&api_key=%s" % ( LastFM.URL_PREFIX, qartist, LastFM.API_KEY) cachekey = 'lastfm:artist:gettopalbums:%s' % qartist self.ranking_cache.fetch(cachekey, url, self.parse_album_list, artist)
def artist_info_ready (self, ds): # Can only be called after the artist-info-ready signal has fired. # If called any other time, the behavior is undefined try: info = ds.get_artist_info () small, med, big = info['images'] or (None, None, None) summary, full_bio = info['bio'] or (None, None) self.file = self.template.render (artist = ds.get_current_artist (), error = ds.get_error (), image = med, fullbio = full_bio, shortbio = summary, datasource = LastFM.datasource_link (self.basepath), stylesheet = self.styles ) self.load_view () except Exception, e: print "Problem in info ready: %s" % e
def artist_info_ready (self, ds): # Can only be called after the artist-info-ready signal has fired. # If called any other time, the behavior is undefined try: info = ds.get_artist_info () small, med, big = info['images'] or (None, None, None) summary, full_bio = info['bio'] or (None, None) self.file = self.template.render (artist = ds.get_current_artist (), error = ds.get_error (), image = med, fullbio = full_bio, shortbio = summary, datasource = LastFM.datasource_link (self.basepath), stylesheet = self.styles ) self.load_view () except Exception as e: print("Problem in info ready: %s" % e)
def fetch_artist_data (self, artist): """ Initiate the fetching of all artist data. Fetches artist info, similar artists, artist top albums and top tracks. Downloads XML files from last.fm and saves as parsed DOM documents in self.artist dictionary. Must be called before any of the get_* methods. """ self.current_artist = artist if LastFM.user_has_account() is False: self.error = LastFM.NO_ACCOUNT_ERROR self.emit ('artist-info-ready') return self.error = None artist = urllib.quote_plus (artist) for key, value in self.artist.items(): cachekey = "lastfm:artist:%s:%s" % (value['function'], artist) url = '%sartist.%s&artist=%s&api_key=%s' % (LastFM.URL_PREFIX, value['function'], artist, LastFM.API_KEY) value['cache'].fetch(cachekey, url, self.fetch_artist_data_cb, value)
def get_similar_artists(self, artist_id): """ get list of artists from db which are similar to artist with *artist_id based on LastFM online data """ import LastFM simi_artists = LastFM.get_similar_artists(artist_id) if simi_artists is None: utils.log('Last.fm didn\'t return proper response') return None if not self.artists: self.artists = self.get_artists() artists = ItemList(content_type="artists") for simi_artist, kodi_artist in itertools.product(simi_artists, self.artists): if kodi_artist['musicbrainzartistid'] and kodi_artist['musicbrainzartistid'] == simi_artist['mbid']: artists.append(kodi_artist) elif kodi_artist['artist'] == simi_artist['name']: data = kodijson.get_json(method="AudioLibrary.GetArtistDetails", params={"properties": ["genre", "description", "mood", "style", "born", "died", "formed", "disbanded", "yearsactive", "instrument", "fanart", "thumbnail"], "artistid": kodi_artist['artistid']}) item = data["result"]["artistdetails"] artwork = {"thumb": item['thumbnail'], "fanart": item['fanart']} artists.append({"label": item['label'], "artwork": artwork, "title": item['label'], "genre": " / ".join(item['genre']), "artist_description": item['description'], "userrating": item['userrating'], "born": item['born'], "died": item['died'], "formed": item['formed'], "disbanded": item['disbanded'], "yearsactive": " / ".join(item['yearsactive']), "style": " / ".join(item['style']), "mood": " / ".join(item['mood']), "instrument": " / ".join(item['instrument']), "librarypath": 'musicdb://artists/%s/' % item['artistid']}) utils.log('%i of %i artists found in last.FM are in Kodi database' % (len(artists), len(simi_artists))) return artists
def posts_transclude(profile: NaClProfile): """ Transclude every single post in the posts list of a profile object. Use it before saving the DSU file in order to change the posts list of the profile object before uploading or saving to local. :param profile: current working Profile object :return: modified Profile object """ # posts here is not the actual _posts private list from the NaClProfile object # they are the decrypted copy of the _posts posts = profile.get_posts() print('Transcluding...') for i in range(len(posts)): if '@weather' in posts[i]['entry']: a = OpenWeather.OpenWeather('92697', 'US') entry = a.transclude(posts[i].get_entry()) # entry = profile.encrypt_entry(entry) posts[i].set_entry(entry) if '@lastfm' in posts[i]['entry']: a = LastFM.LastFM('United States') entry = a.transclude(posts[i].get_entry()) # entry = profile.encrypt_entry(entry) posts[i].set_entry(entry) if '@extracredit' in posts[i]['entry']: a = ExtraCreditAPI.Joke() entry = a.transclude(posts[i].get_entry()) # entry = profile.encrypt_entry(entry) posts[i].set_entry(entry) # empty the actual _posts private list from the NaClProfile object profile._posts = [] # move each post in the posts temporary holder back to the actual _posts for post in posts: profile.add_post(post) print_ok('Transcluded!') return profile
def posts_transclude(profile: Profile): """ Transclude every single post in the posts list of a profile object. Use it before saving the DSU file in order to change the posts list of the profile object before uploading or saving to local. :param profile: current working Profile object :return: modified Profile object """ posts = profile._posts print('Transcluding...') for i in range(len(posts)): if '@weather' in posts[i]['entry']: a = OpenWeather.OpenWeather('92697', 'US') posts[i].set_entry(a.transclude(posts[i].get_entry())) if '@lastfm' in posts[i]['entry']: a = LastFM.LastFM('United States') posts[i].set_entry(a.transclude(posts[i].get_entry())) if '@extracredit' in posts[i]['entry']: a = ExtraCreditAPI.Joke() posts[i].set_entry(a.transclude(posts[i].get_entry())) msg = color_mod.color_code('Transcluded!', 'ok') print(msg) return profile
def get_similar_artists(self, artist_id): """ get list of artists from db which are similar to artist with *artist_id based on LastFM online data """ import LastFM simi_artists = LastFM.get_similar_artists(artist_id) if simi_artists is None: utils.log('Last.fm didn\'t return proper response') return None if not self.artists: self.artists = self.get_artists() artists = ItemList(content_type="artists") for simi_artist, kodi_artist in itertools.product( simi_artists, self.artists): if kodi_artist['musicbrainzartistid'] and kodi_artist[ 'musicbrainzartistid'] == simi_artist['mbid']: artists.append(kodi_artist) elif kodi_artist['artist'] == simi_artist['name']: data = kodijson.get_json( method="AudioLibrary.GetArtistDetails", params={ "properties": [ "genre", "description", "mood", "style", "born", "died", "formed", "disbanded", "yearsactive", "instrument", "fanart", "thumbnail" ], "artistid": kodi_artist['artistid'] }) item = data["result"]["artistdetails"] artwork = { "thumb": item['thumbnail'], "fanart": item['fanart'] } artists.append({ "label": item['label'], "artwork": artwork, "title": item['label'], "genre": " / ".join(item['genre']), "artist_description": item['description'], "userrating": item['userrating'], "born": item['born'], "died": item['died'], "formed": item['formed'], "disbanded": item['disbanded'], "yearsactive": " / ".join(item['yearsactive']), "style": " / ".join(item['style']), "mood": " / ".join(item['mood']), "instrument": " / ".join(item['instrument']), "librarypath": 'musicdb://artists/%s/' % item['artistid'] }) utils.log('%i of %i artists found in last.FM are in Kodi database' % (len(artists), len(simi_artists))) return artists
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(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
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))
import common import settings import Tumblr import LastFM import DeviantArt import Flickr #import Artstation import HackerNews from pprint import pprint silos = [ DeviantArt.DAFavs(), Flickr.FlickrFavs(), Tumblr.TumblrFavs(), # Artstation.ASFavs(), LastFM.LastFM(), HackerNews.HackerNews() ] for silo in silos: silo.run()