def my_library_playlists():
    # Auto playlists - "Thumbs up" and "Last added"

    thumbs_up = xbmcgui.ListItem(utils.translate(30027))
    thumbs_up.setArt({
        'thumb': thumbs.IMG_THUMB_UP,
        'poster': thumbs.IMG_THUMB_UP
    })

    last_added = xbmcgui.ListItem(utils.translate(30026))
    last_added.setArt({'thumb': thumbs.IMG_CLOCK, 'poster': thumbs.IMG_CLOCK})

    items = [
        (utils.build_url(
            url=URL,
            paths=['browse', 'my-library', 'playlist', 'thumbsup'],
            r_path=True,
            r_query=True), thumbs_up, True),
        (utils.build_url(
            url=URL,
            paths=['browse', 'my-library', 'playlist', 'lastadded'],
            r_path=True,
            r_query=True), last_added, True),
    ]

    # User playlists
    items += listing.build_playlist_listitems(GMUSIC.get_user_playlists())
    listing.list_playlists(items)
Пример #2
0
def artist(artist_id):
    top_songs = xbmcgui.ListItem(utils.translate(30066))
    top_songs.setArt({'thumb': thumbs.IMG_STAR, 'poster': thumbs.IMG_STAR})

    related_artists = xbmcgui.ListItem(utils.translate(30067))
    related_artists.setArt({
        'thumb': thumbs.IMG_ARTIST,
        'poster': thumbs.IMG_ARTIST
    })

    items = [
        (utils.build_url(url=URL,
                         paths=['browse', 'artist', artist_id, 'top-songs'],
                         r_path=True), top_songs, True),
        (utils.build_url(
            url=URL,
            paths=['browse', 'artist', artist_id, 'related-artists'],
            r_path=True), related_artists, True)
    ]

    info = GMUSIC.get_artist_info(artist_id=artist_id,
                                  include_albums=True,
                                  max_top_tracks=0,
                                  max_rel_artist=0)

    if 'albums' in info:
        albums = info['albums']
        albums.sort(key=itemgetter('name'))
        albums.sort(key=itemgetter('year'), reverse=True)

        items += listing.build_album_listitems(albums)
        listing.list_albums(items)

    else:
        listing.list_items([])
Пример #3
0
def listen_now():
    ifl = xbmcgui.ListItem(utils.translate(30045))
    ifl.setArt({'thumb': thumbs.IMG_IFL, 'poster': thumbs.IMG_IFL})

    albums = xbmcgui.ListItem(utils.translate(30023))
    albums.setArt({'thumb': thumbs.IMG_ALBUM, 'poster': thumbs.IMG_ALBUM})

    stations = xbmcgui.ListItem(utils.translate(30021))
    stations.setArt({
        'thumb': thumbs.IMG_STATION,
        'poster': thumbs.IMG_STATION
    })

    playlists = xbmcgui.ListItem(utils.translate(30020))
    playlists.setArt({
        'thumb': thumbs.IMG_PLAYLIST,
        'poster': thumbs.IMG_PLAYLIST
    })

    items = [
        (utils.build_url(url=URL,
                         paths=['play', 'station'],
                         queries={'station_id': 'IFL'},
                         r_path=True,
                         r_query=True), ifl, False),
        (utils.build_url(URL, ['albums']), albums, True),
        (utils.build_url(URL, ['stations']), stations, True),
        (utils.build_url(URL, ['playlists']), playlists, True),
    ]

    # Only fetch new information if one full hour has passed
    # to keep things speedy on slow devices
    try:
        last_check = ADDON.getSetting('listen_now_last_update')

    except:
        last_check = -1

    from_cache = True
    if last_check != time.strftime('%Y%m%d%H'):
        from_cache = False
        ADDON.setSetting('listen_now_last_update', time.strftime('%Y%m%d%H'))

    primary_header, situations = gmusic.get_listen_now_situations(from_cache)

    if primary_header and situations:
        situations = xbmcgui.ListItem(primary_header)
        situations.setArt({
            'thumb': thumbs.IMG_ALBUM,
            'poster': thumbs.IMG_ALBUM
        })

        # Add Situations after IFL
        items.insert(1,
                     (utils.build_url(URL, ['situations']), situations, True))

    listing.list_items(items)
def build_artist_listitems(artists, my_library=False):
    items = []
    for artist in artists:
        # Applies to e.g. search results
        if 'artist' in artist:
            artist = artist['artist']

        if 'artistId' not in artist or 'name' not in artist:
            continue

        artist_id = artist['artistId']
        artist_name = artist['name']
        artist_art = thumbs.IMG_ARTIST_FLAT
        if 'artistArtRef' in artist:
            artist_art = artist['artistArtRef']

        item = xbmcgui.ListItem(artist_name)

        item.setArt({
            'thumb': artist_art,
            'poster': artist_art,
            # 'fanart' : artist_art + '=s1920'
        })

        item.setInfo('music', {
            'mediatype': 'artist',
            'artist': artist_name,
        })

        item.addContextMenuItems(items=[(
            utils.translate(30036), 'XBMC.RunPlugin(%s)' %
            utils.build_url(url=URL,
                            paths=['play', 'station'],
                            queries={
                                'station_name': artist_name.encode('utf-8'),
                                'artist_id': artist_id
                            },
                            r_path=True,
                            r_query=True))])

        # My Library entries differ from normal AllAcces ones as users are able
        # to add only parts of the item to there library
        if my_library:
            items.append((utils.build_url(
                url=URL,
                paths=['browse', 'my-library', 'artist', artist_id],
                r_path=True,
                r_query=True), item, True))

        else:
            items.append(
                (utils.build_url(url=URL,
                                 paths=['browse', 'artist', artist_id],
                                 r_path=True,
                                 r_query=True), item, True))

    return items
Пример #5
0
def top_charts():
    songs = xbmcgui.ListItem(utils.translate(30024))
    songs.setArt({'thumb': thumbs.IMG_TRACK, 'poster': thumbs.IMG_TRACK})

    albums = xbmcgui.ListItem(utils.translate(30023))
    albums.setArt({'thumb': thumbs.IMG_ALBUM, 'poster': thumbs.IMG_ALBUM})

    items = [(utils.build_url(URL, ['songs']), songs, True),
             (utils.build_url(URL, ['albums']), albums, True)]

    listing.list_items(items)
Пример #6
0
def browse_stations_categories(category_id):
    categories = GMUSIC.get_station_categories(True)

    if categories:
        items = []
        for category in categories:
            if category['id'] != category_id:
                continue

            subcategories = category['subcategories']
            for sub in subcategories:
                item = xbmcgui.ListItem(sub['display_name'])
                item.setArt({
                    'thumb': thumbs.IMG_STATION,
                    'poster': thumbs.IMG_STATION
                })

                items.append((
                    utils.build_url(
                        url=URL,
                        paths=['browse', 'browse-stations',
                               'subcategories', sub['id']],
                        r_path=True,
                        r_query=True
                    ),
                    item,
                    True
                ))

    listing.list_items(items)
Пример #7
0
def _queue(path, play_next=False):
    playlist = xbmc.PlayList(xbmc.PLAYLIST_MUSIC)
    position = len(playlist) + 1

    if play_next:
        position = playlist.getposition() + 1

    query = dict(urlparse.parse_qsl(urlparse.urlparse(URL).query))
    if 'play_next' in query:
        del query['play_next']
        position = playlist.getposition() + 1

    utils.execute_jsonrpc(method='Playlist.Insert',
                          params={
                              'playlistid': xbmc.PLAYLIST_MUSIC,
                              'position': position,
                              'item': {
                                  'directory':
                                  utils.build_url(url=URL,
                                                  paths=path,
                                                  queries=query,
                                                  r_path=True,
                                                  r_query=True)
                              }
                          })
Пример #8
0
def queue_track(track_id, track_title='', play_next=False):
    track = _get_track_details(track_id)

    path = None
    item = None
    if track:
        listitem = listing.build_song_listitems([track])[0]
        path = listitem[0]
        item = listitem[1]

    else:
        item = xbmcgui.ListItem(track_title)
        item.setArt({'thumb': thumbs.IMG_ALBUM, 'poster': thumbs.IMG_ALBUM})

        path = utils.build_url(url=URL,
                               paths=['play', 'track', track_id],
                               queries={'track_title': track_title},
                               r_path=True,
                               r_query=True)

    playlist = xbmc.PlayList(xbmc.PLAYLIST_MUSIC)
    position = len(playlist) + 1
    if play_next:
        position = playlist.getposition() + 1

    playlist.add(URL=path, listitem=item, index=position)
def my_library_artist(artist_id):
    if artist_id:
        top_songs = xbmcgui.ListItem(utils.translate(30066))
        top_songs.setArt({'thumb': thumbs.IMG_STAR, 'poster': thumbs.IMG_STAR})

        related_artists = xbmcgui.ListItem(utils.translate(30067))
        related_artists.setArt({
            'thumb': thumbs.IMG_ARTIST,
            'poster': thumbs.IMG_ARTIST
        })

        all_albums = xbmcgui.ListItem(utils.translate(30098))
        all_albums.setArt({
            'thumb': thumbs.IMG_ALBUM,
            'poster': thumbs.IMG_ALBUM
        })

        items = [
            (utils.build_url(
                url=URL,
                paths=['browse', 'artist', artist_id, 'top-songs'],
                r_path=True,
                r_query=True,
            ), top_songs, True),
            (utils.build_url(
                url=URL,
                paths=['browse', 'artist', artist_id, 'related-artists'],
                r_path=True,
                r_query=True,
            ), related_artists, True),
            (utils.build_url(
                url=URL,
                paths=['browse', 'artist', artist_id],
                r_path=True,
                r_query=True,
            ), all_albums, True),
        ]

        albums = GMUSIC.get_user_artist_albums(artist_id=artist_id)
        albums.sort(key=itemgetter('name'))
        albums.sort(key=itemgetter('year'), reverse=True)

        items += listing.build_album_listitems(albums, True)

        listing.list_albums(items)
def my_library():
    playlists = xbmcgui.ListItem(utils.translate(30020))
    playlists.setArt({
        'thumb': thumbs.IMG_PLAYLIST,
        'poster': thumbs.IMG_PLAYLIST
    })

    stations = xbmcgui.ListItem(utils.translate(30021))
    stations.setArt({
        'thumb': thumbs.IMG_STATION,
        'poster': thumbs.IMG_STATION
    })

    artists = xbmcgui.ListItem(utils.translate(30022))
    artists.setArt({'thumb': thumbs.IMG_ARTIST, 'poster': thumbs.IMG_ARTIST})

    albums = xbmcgui.ListItem(utils.translate(30023))
    albums.setArt({'thumb': thumbs.IMG_ALBUM, 'poster': thumbs.IMG_ALBUM})

    songs = xbmcgui.ListItem(utils.translate(30024))
    songs.setArt({'thumb': thumbs.IMG_TRACK, 'poster': thumbs.IMG_TRACK})
    genres = xbmcgui.ListItem(utils.translate(30025))
    genres.setArt({'thumb': thumbs.IMG_GENRE, 'poster': thumbs.IMG_GENRE})

    items = [
        (utils.build_url(URL, ['playlists']), playlists, True),
        (utils.build_url(URL, ['stations']), stations, True),
        (utils.build_url(URL, ['artists']), artists, True),
        (utils.build_url(URL, ['albums']), albums, True),
        (utils.build_url(URL, ['songs']), songs, True),
        (utils.build_url(URL, ['genres']), genres, True),
    ]

    listing.list_items(items)
Пример #11
0
def search_history():
    history = _get_search_history()

    # Add "New Search" to the list
    item = xbmcgui.ListItem(utils.translate(30053))
    item.setArt({'thumb': thumbs.IMG_SEARCH, 'poster': thumbs.IMG_SEARCH})

    items = [(utils.build_url(url=URL,
                              paths=['search', 'new'],
                              r_path=True,
                              r_query=True), item, True)]

    for hist in history:
        item = xbmcgui.ListItem(hist)
        item.setArt({'thumb': thumbs.IMG_SEARCH, 'poster': thumbs.IMG_SEARCH})

        items.append((utils.build_url(url=URL,
                                      paths=['search', hist],
                                      r_path=True,
                                      r_query=True), item, True))

    listing.list_items(items)
def my_library_genres():
    genres = GMUSIC.get_my_library_genres()

    items = []
    for genre in genres:
        item = xbmcgui.ListItem(genre)
        item.setArt({'thumb': thumbs.IMG_GENRE, 'poster': thumbs.IMG_GENRE})

        items.append(
            (utils.build_url(url=URL,
                             paths=['browse', 'my-library', 'genre', genre],
                             r_path=True), item, True))

    listing.list_items(items)
def build_situation_listitems(situations):
    items = []
    for situation in situations:
        situation_id = situation['id']
        situation_title = situation['title']
        situation_art = thumbs.IMG_ALBUM
        fanart = None

        description = ''
        if 'description' in situation:
            description = situation['description']

        if 'imageUrl' in situation:
            situation_art = situation['imageUrl']

        if situation_art and situation_art != thumbs.IMG_ALBUM:
            fanart = situation_art + "=w1280-w1280"

        item = xbmcgui.ListItem(situation_title)

        item.setArt({
            'thumb': situation_art,
            'poster': situation_art,
            # 'fanart' : fanart
        })

        item.setInfo(
            'music', {
                'mediatype': 'album',
                'album': situation_title,
                'comment': description,
            })

        items.append((utils.build_url(
            url=URL,
            paths=['browse', 'listen-now', 'situation', situation_id],
            r_path=True,
            r_query=True), item, True))

    return items
Пример #14
0
def browse_stations():
    categories = GMUSIC.get_station_categories(False)

    items = []
    for category in categories:
        item = xbmcgui.ListItem(category['display_name'])
        item.setArt({
            'thumb': thumbs.IMG_STATION,
            'poster': thumbs.IMG_STATION
        })

        items.append((
            utils.build_url(
                url=URL,
                paths=['browse', 'browse-stations',
                       'categories', category['id']],
                r_path=True,
                r_query=True
            ),
            item,
            True
        ))

    listing.list_items(items)
Пример #15
0
def _play(path):
    utils.execute_jsonrpc(method='Playlist.Clear',
                          params={'playlistid': xbmc.PLAYLIST_MUSIC})

    utils.execute_jsonrpc(method='Playlist.Add',
                          params={
                              'playlistid': xbmc.PLAYLIST_MUSIC,
                              'item': {
                                  'directory':
                                  utils.build_url(url=URL,
                                                  paths=path,
                                                  r_path=True)
                              }
                          })

    utils.execute_jsonrpc(
        method='Player.Open',
        params={'item': {
            'playlistid': xbmc.PLAYLIST_MUSIC,
            'position': 0
        }})

    if ADDON.getSetting('auto_fullscreen') == 'true':
        utils.execute_jsonrpc('GUI.SetFullscreen', {'fullscreen': True})
Пример #16
0
def main_menu():
    listen_now = xbmcgui.ListItem(utils.translate(30014))
    listen_now.setArt({
        'thumb': thumbs.IMG_HEADPHONES,
        'poster': thumbs.IMG_HEADPHONES
    })

    top_charts = xbmcgui.ListItem(utils.translate(30015))
    top_charts.setArt({
        'thumb': thumbs.IMG_STAR,
        'poster': thumbs.IMG_STAR
    })

    new_releases = xbmcgui.ListItem(utils.translate(30016))
    new_releases.setArt({
        'thumb': thumbs.IMG_RELEASES,
        'poster': thumbs.IMG_RELEASES
    })

    my_library = xbmcgui.ListItem(utils.translate(30017))
    my_library.setArt({
        'thumb': thumbs.IMG_LIBRARY,
        'poster': thumbs.IMG_LIBRARY
    })

    browse_stations = xbmcgui.ListItem(utils.translate(30018))
    browse_stations.setArt({
        'thumb': thumbs.IMG_STATION,
        'poster': thumbs.IMG_STATION
    })

    search = xbmcgui.ListItem(utils.translate(30019))
    search.setArt({
        'thumb': thumbs.IMG_SEARCH,
        'poster': thumbs.IMG_SEARCH
    })

    items = [
        (
            utils.build_url(URL, ['listen-now']),
            listen_now,
            True
        ),
        (
            utils.build_url(URL, ['top-charts']),
            top_charts,
            True
        ),
        (
            utils.build_url(URL, ['new-releases']),
            new_releases,
            True
        ),
        (
            utils.build_url(URL, ['my-library']),
            my_library,
            True
        ),
        (
            utils.build_url(URL, ['browse-stations']),
            browse_stations,
            True
        ),
        (
            utils.build_url(URL, ['search', 'history'], r_path=True),
            search,
            True
        ),
    ]

    # Add "Update Library" context menu to "My Library" entry
    items[3][1].addContextMenuItems([(
        utils.translate(30030),
        'XBMC.RunPlugin(%s)' % utils.build_url(
            url=URL,
            paths=['my-library', 'update'],
            r_path=True
        )
    )])

    # Add "Clear search history" context menu to "Search" entry
    items[5][1].addContextMenuItems([(
        utils.translate(30012),
        'XBMC.RunPlugin(%s)' % utils.build_url(
            url=URL,
            paths=['clear', 'search-history'],
            r_path=True
        )
    )])

    listing.list_items(items)
def build_album_listitems(albums, my_library=False):
    items = []
    for album in albums:
        # Applies to e.g. search results
        if 'album' in album:
            album = album['album']

        if 'albumId' not in album or 'name' not in album:
            continue

        album_id = album['albumId']
        album_name = album['name']
        album_art = thumbs.IMG_ALBUM
        fanart = None

        if 'albumArtRef' in album:
            album_art = album['albumArtRef']

        if album_art and album_art != thumbs.IMG_ALBUM:
            fanart = album_art + "=w1280-w1280"

        item = xbmcgui.ListItem(album_name)

        item.setArt({
            'thumb': album_art,
            'poster': album_art,
            # 'fanart' : fanart
        })

        item.setInfo(
            'music', {
                'mediatype': 'album',
                'album': album_name,
                'artist': album.get('albumArtist', ''),
                'genre': album.get('genre', ''),
                'year': album.get('year', ''),
            })

        menu_items = []

        if not my_library:
            menu_items.append((
                utils.translate(30037), 'XBMC.RunPlugin(%s)' %
                utils.build_url(url=URL,
                                paths=['my-library', 'add', 'album', album_id],
                                r_path=True,
                                r_query=True)))

        menu_items += [
            (utils.translate(30038), 'XBMC.RunPlugin(%s)' %
             utils.build_url(url=URL,
                             paths=['my-library', 'playlist', 'add'],
                             queries={'album_id': album_id},
                             r_path=True,
                             r_query=True)),
            (utils.translate(30036), 'XBMC.RunPlugin(%s)' %
             utils.build_url(url=URL,
                             paths=['play', 'station'],
                             queries={
                                 'station_name': album_name.encode('utf-8'),
                                 'album_id': album_id
                             },
                             r_path=True,
                             r_query=True))
        ]

        if 'artistId' in album:
            menu_items.append(
                (utils.translate(30034),
                 'Container.Update(%s)' % utils.build_url(
                     url=URL,
                     paths=['browse', 'artist', album['artistId'][0]],
                     r_path=True,
                     r_query=True)))

        if my_library:
            menu_items.append(
                (utils.translate(30061),
                 'XBMC.RunPlugin(%s)' % utils.build_url(
                     url=URL,
                     paths=['my-library', 'remove', 'album', album_id],
                     r_path=True,
                     r_query=True)))

        item.addContextMenuItems(items=menu_items)

        # My Library entries differ from normal AllAcces ones as users are able
        # to add only parts of the item to there library
        if my_library:
            items.append((utils.build_url(
                url=URL,
                paths=['browse', 'my-library', 'album', album_id],
                r_path=True,
                r_query=True), item, True))

        else:
            items.append((utils.build_url(url=URL,
                                          paths=['browse', 'album', album_id],
                                          r_path=True,
                                          r_query=True), item, True))

    return items
def build_song_listitems(tracks,
                         station_id=None,
                         my_library=False,
                         my_library_playlist=False):
    tracks_cache = utils.get_cache_dir(['tracks'])

    items = []
    for elem in tracks:
        # Applies to e.g. search results
        if 'track' in elem:
            track = elem['track']
        else:
            track = elem

        # Try to get an id, otherwise we skip
        # Important, always try to get a trackId first, than
        # storeId and than id
        if 'trackId' in track:
            track_id = track['trackId']

        elif 'storeId' in track:
            track_id = track['storeId']

        elif 'id' in track:
            track_id = track['id']

        else:
            continue

        # In case of playlists, user uploaded songs come without
        # metadata (title, album, etc.)
        # All we can do at this point is to check the library cache
        # entry and use the informations from there (if it exists)
        #
        # We only do this if the title is missing as other metadata
        # isn't as important and we don't want to do this to often
        if 'title' not in track:
            _track = GMUSIC.get_my_library_song_details(track_id)
            if _track:
                track = _track

        track_title = track.get('title', '')
        album_art = thumbs.IMG_TRACK
        fanart = None

        if 'albumArtRef' in track and len(track['albumArtRef']) > 0:
            album_art = track['albumArtRef'][0]['url']

        if 'artistArtRef' in track and len(track['artistArtRef']) > 0:
            fanart = track['artistArtRef'][0]['url'] + '=s1920'

        item = xbmcgui.ListItem(track_title)

        item.setArt({
            'thumb': album_art,
            'poster': album_art,
            # 'fanart' : fanart
        })

        item.setInfo(
            'music', {
                'mediatype': 'song',
                'title': track_title,
                'tracknumber': track('trackNumber', ''),
                'year': track('year', ''),
                'genre': track('genre', ''),
                'album': track('album', ''),
                'artist': track('artist', ''),
                'rating': track('rating', ''),
                'playcount': track('playCount', ''),
            })

        menu_items = []

        if not my_library and 'id' not in track:
            # Add "Add to library" to context menu
            menu_items.append((
                utils.translate(30037), 'XBMC.RunPlugin(%s)' %
                utils.build_url(url=URL,
                                paths=['my-library', 'add', 'track', track_id],
                                r_path=True,
                                r_query=True)))

        # Add "Add to playlist" to context menu
        menu_items.append(
            (utils.translate(30038), 'XBMC.RunPlugin(%s)' %
             utils.build_url(url=URL,
                             paths=['my-library', 'playlist', 'add'],
                             queries={'track_id': track_id},
                             r_path=True,
                             r_query=True)))

        if my_library_playlist:
            # Add "Remove from playlist" to context menu
            if 'id' in elem:
                menu_items.append((
                    utils.translate(30062), 'XBMC.RunPlugin(%s)' %
                    utils.build_url(url=URL,
                                    paths=['my-library', 'playlist', 'remove'],
                                    queries={'entry_id': elem['id']},
                                    r_path=True,
                                    r_query=True)))

        # Add "Start radio" to context menu
        menu_items.append(
            (utils.translate(30036), 'XBMC.RunPlugin(%s)' %
             utils.build_url(url=URL,
                             paths=['play', 'station'],
                             queries={
                                 'track_id': track_id,
                                 'station_name': track_title.encode('utf-8')
                             },
                             r_path=True,
                             r_query=True)))

        # Add "Go to Artist" to context menu
        if 'artistId' in track and len(track['artistId']) > 0:
            menu_items.append(
                (utils.translate(30034),
                 'Container.Update(%s)' % utils.build_url(
                     url=URL,
                     paths=['browse', 'artist', track['artistId'][0]],
                     r_path=True,
                     r_query=True)))

        # Add "Go to Album" to context menu
        if 'albumId' in track:
            menu_items.append(
                (utils.translate(30035), 'Container.Update(%s)' %
                 utils.build_url(url=URL,
                                 paths=['browse', 'album', track['albumId']],
                                 r_path=True,
                                 r_query=True)))

        # Add "Rate song" to context menu
        menu_items.append((utils.translate(30041), 'XBMC.RunPlugin(%s)' %
                           utils.build_url(url=URL,
                                           paths=['rate'],
                                           queries={'track_id': track_id},
                                           r_path=True,
                                           r_query=True)))

        if my_library and 'id' in track:
            # Add "Remove from library" to context menu
            menu_items.append(
                (utils.translate(30061),
                 'XBMC.RunPlugin(%s)' % utils.build_url(
                     url=URL,
                     paths=['my-library', 'remove', 'track', track['id']],
                     r_path=True,
                     r_query=True)))

        item.addContextMenuItems(items=menu_items)

        item.setProperty('IsPlayable', 'true')
        item.setProperty('Music', 'true')
        item.setProperty('mimetype', 'audio/mpeg')

        # We cache everything so :play_track: doesn't have to fetch those
        # informations again
        with open(os.path.join(tracks_cache, track_id), 'w+') as f:
            f.write(json.dumps(track))

        queries = {}
        if station_id:
            queries['station_id'] = station_id

        items.append((utils.build_url(url=URL,
                                      paths=['play', 'track', track_id],
                                      queries=queries,
                                      r_path=True,
                                      r_query=True), item, False))

    # Clean up the tracks directory
    for _file in os.listdir(tracks_cache):
        _file = os.path.join(tracks_cache, _file)
        m_time = os.stat(_file).st_mtime

        # If older than 24h we remove it
        if m_time < time.time() - 86400:
            os.remove(_file)

    return items
def build_station_listitems(stations):
    items = []
    for station in stations:
        # Applies to e.g. search results
        if 'station' in station:
            station = station['station']

        if 'name' not in station:
            continue

        description = ''
        if 'description' in station:
            description = station['description']

        station_name = station['name']
        station_art = thumbs.IMG_STATION
        fanart = None

        if 'imageUrls' in station and len(station['imageUrls']) > 0:
            station_art = station['imageUrls'][0]['url']

        if station_art and station_art != thumbs.IMG_STATION:
            fanart = station_art + "=w1280-w1280"

        item = xbmcgui.ListItem(station_name)

        item.setArt({
            'thumb': station_art,
            'poster': station_art,
            # 'fanart' : fanart
        })

        item.setInfo('music', {
            'mediatype': 'album',
            'album': station_name,
            'comment': description,
        })

        query = {}
        if 'id' in station:
            query['station_id'] = station['id']

        else:
            seed = station
            if 'seed' in station:
                seed = station['seed']

            query['station_name'] = station_name.encode('utf-8')
            if 'trackId' in seed:
                query['track_id'] = seed['trackId']

            elif 'artistId' in seed:
                query['artist_id'] = seed['artistId']

            elif 'albumId' in seed:
                query['album_id'] = seed['albumId']

            elif 'genreId' in seed:
                query['genre_id'] = seed['genreId']

            elif 'curatedStationId' in seed:
                query['curated_station_id'] = seed['curatedStationId']

            else:
                continue

        items.append((utils.build_url(url=URL,
                                      paths=['play', 'station'],
                                      queries=query,
                                      r_path=True,
                                      r_query=True), item, False))

    return items
def build_playlist_listitems(playlists):
    items = []
    for playlist in playlists:
        # Applies to e.g. search results
        if 'playlist' in playlist:
            playlist = playlist['playlist']

        if 'name' not in playlist:
            continue

        playlist_id = None
        playlist_token = None
        playlist_name = playlist['name']
        playlist_art = thumbs.IMG_PLAYLIST
        fanart = None

        # Find a thumbnail to be displayed
        if 'images' in playlist and len(playlist['images']) > 0:
            playlist_art = playlist['images'][0]['url']

        elif 'albumArtRef' in playlist and len(playlist['albumArtRef']) > 0:
            playlist_art = playlist['albumArtRef'][0]['url']

        if playlist_art and playlist_art != thumbs.IMG_PLAYLIST:
            fanart = playlist_art + "=w1280-w1280"

        # Get the id if available (Would mean it's a user playlist)
        if 'id' in playlist and type(playlist['id']) == unicode:
            playlist_id = playlist['id']

        # Get the shareToken if available
        if 'shareToken' in playlist:
            playlist_token = playlist['shareToken']

        elif 'id' in playlist and 'shareToken' in playlist['id']:
            playlist_token = playlist['id']['shareToken']

        item = xbmcgui.ListItem(playlist_name)

        item.setArt({
            'thumb': playlist_art,
            'poster': playlist_art,
            # 'fanart' : fanart
        })

        item.setInfo('music', {
            'mediatype': 'album',
            'album': playlist['name'],
        })

        paths = []
        query = {}

        if playlist_id:
            paths = ['browse', 'my-library', 'playlist', playlist_id]

        elif playlist_token:
            paths = ['browse', 'shared-playlist', playlist_token]
            query['playlist_token'] = playlist_token

        else:
            continue

        menu_items = []

        if playlist_token:
            menu_items.append(
                (utils.translate(30036), 'XBMC.RunPlugin(%s)' %
                 utils.build_url(url=URL,
                                 paths=['play', 'station'],
                                 queries={'playlist_token': playlist_token},
                                 r_path=True,
                                 r_query=True)))

        # Add "Delete playlist" to user playlist (Only
        # user playlists have a playlist id)
        if playlist_id:
            menu_items.append(
                (utils.translate(30068), 'XBMC.RunPlugin(%s)' %
                 utils.build_url(url=URL,
                                 paths=['my-library', 'playlist', 'delete'],
                                 queries=query,
                                 r_path=True,
                                 r_query=True)))

        item.addContextMenuItems(items=menu_items)

        items.append((utils.build_url(url=URL,
                                      paths=paths,
                                      queries=query,
                                      r_path=True,
                                      r_query=True), item, True))

    return items
Пример #21
0
def search(query):
    history_file = os.path.join(_CACHE_DIR, 'search_history.json')
    history = _get_search_history()

    # It was a new search so we add it to the history
    if query.decode('utf-8').lower() not in (hist.lower() for hist in history):
        history.insert(0, query)
        with codecs.open(history_file, 'w+', encoding='utf-8') as f:
            f.write(json.dumps(history[:20], indent=2))

    result = GMUSIC.search(query)

    if not result:
        listing.list_items([])
        return

    items = []
    if 'artist_hits' in result and len(result['artist_hits']) > 0:
        item = xbmcgui.ListItem(
            '%s (%s)' % (utils.translate(30022), len(result['artist_hits'])))
        item.setArt({'thumb': thumbs.IMG_ARTIST, 'poster': thumbs.IMG_ARTIST})

        items.append((utils.build_url(url=URL,
                                      paths=['search', 'artists', query],
                                      r_path=True,
                                      r_query=True), item, True))

    if 'album_hits' in result and len(result['album_hits']) > 0:
        item = xbmcgui.ListItem(
            '%s (%s)' % (utils.translate(30023), len(result['album_hits'])))
        item.setArt({'thumb': thumbs.IMG_ALBUM, 'poster': thumbs.IMG_ALBUM})

        items.append((utils.build_url(url=URL,
                                      paths=['search', 'albums', query],
                                      r_path=True,
                                      r_query=True), item, True))

    if 'playlist_hits' in result and len(result['playlist_hits']) > 0:
        item = xbmcgui.ListItem(
            '%s (%s)' % (utils.translate(30020), len(result['playlist_hits'])))
        item.setArt({
            'thumb': thumbs.IMG_PLAYLIST,
            'poster': thumbs.IMG_PLAYLIST
        })

        items.append((utils.build_url(url=URL,
                                      paths=['search', 'playlists', query],
                                      r_path=True,
                                      r_query=True), item, True))

    if 'station_hits' in result and len(result['station_hits']) > 0:
        item = xbmcgui.ListItem(
            '%s (%s)' % (utils.translate(30021), len(result['station_hits'])))
        item.setArt({
            'thumb': thumbs.IMG_STATION,
            'poster': thumbs.IMG_STATION
        })

        items.append((utils.build_url(url=URL,
                                      paths=['search', 'stations', query],
                                      r_path=True,
                                      r_query=True), item, True))

    if 'song_hits' in result and len(result['song_hits']) > 0:
        item = xbmcgui.ListItem(
            '%s (%s)' % (utils.translate(30024), len(result['song_hits'])))
        item.setArt({'thumb': thumbs.IMG_TRACK, 'poster': thumbs.IMG_TRACK})

        items.append((utils.build_url(url=URL,
                                      paths=['search', 'songs', query],
                                      r_path=True,
                                      r_query=True), item, True))

    listing.list_items(items)
import sys

import xbmcaddon

# Adds all libraries to our path
# see "resources/libs/lib/__init__.py"
import resources.libs  # noqa

ADDON = xbmcaddon.Addon()

ADDON_HANDLE = None
URL = None

if len(sys.argv) > 1:
    ADDON_HANDLE = int(sys.argv[1])
    URL = sys.argv[0] + sys.argv[2]

    if URL == 'plugin://plugin.audio.linuxwhatelse.gmusic/':
        from addon import utils
        URL = utils.build_url(URL, ['browse'])