Пример #1
0
 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 ()
Пример #2
0
 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 ()
Пример #3
0
 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
Пример #4
0
    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'])
Пример #5
0
    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'])
Пример #6
0
 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
Пример #7
0
    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)
Пример #8
0
    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)
Пример #9
0
 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
Пример #10
0
 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)
Пример #11
0
    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)
Пример #12
0
    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)
Пример #13
0
 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
Пример #14
0
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
Пример #15
0
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
Пример #16
0
 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
Пример #17
0
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
Пример #18
0
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()
Пример #19
0
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
Пример #20
0
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))
Пример #21
0
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()