def login(): username = addon.getSetting('username') password = addon.getSetting('password') subscription_type = [SubscriptionType.hifi, SubscriptionType.premium][int('0' + addon.getSetting('subscription_type'))] if not username or not password: # Ask for username/password dialog = xbmcgui.Dialog() username = dialog.input(_T(30008)) if not username: return password = dialog.input(_T(30009), option=xbmcgui.ALPHANUM_HIDE_INPUT) if not password: return selected = dialog.select(_T(30010), [SubscriptionType.hifi, SubscriptionType.premium]) if selected < 0: return subscription_type = [SubscriptionType.hifi, SubscriptionType.premium][selected] ok = session.login(username, password, subscription_type) if ok and (not addon.getSetting('username') or not addon.getSetting('password')): # Ask about remembering username/password dialog = xbmcgui.Dialog() if dialog.yesno(plugin.name, _T(30209)): addon.setSetting('username', username) addon.setSetting('password', password) xbmc.executebuiltin('Container.update(plugin://%s/, True)' % addon.getAddonInfo('id'))
def artist_bio(artist_id): artist = session.get_artist(artist_id) info = session.get_artist_info(artist_id) text = '' if info.get('summary', None): text += '%s:\n\n' % _T(30230) + info.get('summary') + '\n\n' if info.get('text', None): text += '%s:\n\n' % _T(30225) + info.get('text') if text: xbmcgui.Dialog().textviewer(artist.name, text)
def user_playlist_remove_id(playlist_id, item_id): playlist = session.get_playlist(playlist_id) ok = xbmcgui.Dialog().yesno(_T(30247) % playlist.title, _T(30246)) if ok: xbmc.executebuiltin('ActivateWindow(busydialog)') try: session.user.remove_playlist_entry(playlist_id, item_id=item_id) except Exception, e: log(str(e), level=xbmc.LOGERROR) traceback.print_exc() xbmc.executebuiltin('Dialog.Close(busydialog)') xbmc.executebuiltin('Container.Refresh()')
def user_playlist_delete(playlist_id): dialog = xbmcgui.Dialog() playlist = session.get_playlist(playlist_id) ok = dialog.yesno(_T(30235), _T(30236).format(name=playlist.title, count=playlist.numberOfItems)) if ok: xbmc.executebuiltin('ActivateWindow(busydialog)') try: session.user.delete_playlist(playlist_id) except Exception, e: log(str(e), level=xbmc.LOGERROR) traceback.print_exc() xbmc.executebuiltin('Dialog.Close(busydialog)') xbmc.executebuiltin('Container.Refresh()')
def user_playlist_move_entry(playlist_id, entry_no, item_id): dialog = xbmcgui.Dialog() playlist = session.user.selectPlaylistDialog(headline=_T(30248), allowNew=True) if playlist: xbmc.executebuiltin( "ActivateWindow(busydialog)" ) try: ok = session.user.add_playlist_entries(playlist=playlist, item_ids=[item_id]) if ok: ok = session.user.remove_playlist_entry(playlist_id, entry_no=entry_no) else: dialog.notification(plugin.name, _T('API Call Failed'), xbmcgui.NOTIFICATION_ERROR) except Exception, e: log(str(e), level=xbmc.LOGERROR) traceback.print_exc() xbmc.executebuiltin( "Dialog.Close(busydialog)" ) xbmc.executebuiltin('Container.Refresh()')
def search_type(field): keyboard = xbmc.Keyboard('', _T(30206)) keyboard.doModal() if keyboard.isConfirmed(): keyboardinput = keyboard.getText() if keyboardinput: searchresults = session.search(field, keyboardinput) add_items(searchresults.artists, content='files', end=False) add_items(searchresults.albums, end=False) add_items(searchresults.playlists, end=False) add_items(searchresults.tracks, end=False) add_items(searchresults.videos, end=True)
def my_music(): add_directory(_T(30213), user_playlists) add_directory(_T(30214), plugin.url_for(favorites, content_type='artists')) add_directory(_T(30215), plugin.url_for(favorites, content_type='albums')) add_directory(_T(30216), plugin.url_for(favorites, content_type='playlists')) add_directory(_T(30217), plugin.url_for(favorites, content_type='tracks')) add_directory(_T(30218), plugin.url_for(favorites, content_type='videos'), end=True)
def root(): if session.is_logged_in: add_directory(_T(30201), my_music) add_directory(_T(30202), featured_playlists) categories = Category.groups() for item in categories: add_directory(_T(item), plugin.url_for(category, group=item)) add_directory(_T(30206), search) if session.is_logged_in: add_directory(_T(30207), logout, end=True, isFolder=False) else: add_directory(_T(30208), login, end=True, isFolder=False)
def artist_view(artist_id): if session.is_logged_in: session.user.favorites.load_all() artist = session.get_artist(artist_id) xbmcplugin.setContent(plugin.handle, 'albums') add_directory(_T(30225), plugin.url_for(artist_bio, artist_id), thumb=artist.image, fanart=artist.fanart) add_directory(_T(30226), plugin.url_for(top_tracks, artist_id), thumb=artist.image, fanart=artist.fanart) add_directory(_P('videos'), plugin.url_for(artist_videos, artist_id), thumb=artist.image, fanart=artist.fanart) add_directory(_T(30227), plugin.url_for(artist_radio, artist_id), thumb=artist.image, fanart=artist.fanart) add_directory(_T(30228), plugin.url_for(artist_playlists, artist_id), thumb=artist.image, fanart=artist.fanart) add_directory(_T(30229), plugin.url_for(similar_artists, artist_id), thumb=artist.image, fanart=artist.fanart) if session.is_logged_in: if session.user.favorites.isFavoriteArtist(artist_id): add_directory(_T(30220), plugin.url_for(favorites_remove, content_type='artists', item_id=artist_id), thumb=artist.image, fanart=artist.fanart) else: add_directory(_T(30219), plugin.url_for(favorites_add, content_type='artists', item_id=artist_id), thumb=artist.image, fanart=artist.fanart) albums = session.get_artist_albums(artist_id) + \ session.get_artist_albums_ep_singles(artist_id) + \ session.get_artist_albums_other(artist_id) add_items(albums, content=None)
def category(group): promoGroup = {'rising': 'RISING', 'discovery': 'DISCOVERY', 'featured': 'NEWS'}.get(group, None) items = session.get_category_items(group) totalCount = 0 for item in items: totalCount += len(item.content_types) if totalCount == 1: # Show Single content directly (Movies and TV Shows) for item in items: content_types = item.content_types for content_type in content_types: category_content(group, item.path, content_type, offset=0) return xbmcplugin.setContent(plugin.handle, 'files') if promoGroup and totalCount > 10: # Add Promotions as Folder on the Top if more than 10 Promotions available add_directory(_T(30202), plugin.url_for(featured, group=promoGroup)) # Add Category Items as Folders add_items(items, content=None, end=not(promoGroup and totalCount <= 10)) if promoGroup and totalCount <= 10: # Show up to 10 Promotions as single Items promoItems = session.get_featured(promoGroup, types=['ALBUM', 'PLAYLIST', 'VIDEO']) if promoItems: add_items(promoItems, end=True)
def stream_locked(): xbmcgui.Dialog().notification(heading=plugin.name, message=_T(30242), icon=xbmcgui.NOTIFICATION_INFO)
def search(): add_directory(_T(30106), plugin.url_for(search_type, field='artist')) add_directory(_T(30107), plugin.url_for(search_type, field='album')) add_directory(_T(30108), plugin.url_for(search_type, field='playlist')) add_directory(_T(30109), plugin.url_for(search_type, field='track')) add_directory(_T(30110), plugin.url_for(search_type, field='video'), end=True)
def favorites_remove(content_type, item_id): ok = session.user.favorites.remove(content_type, item_id) if ok: xbmcgui.Dialog().notification(heading=plugin.name, message=_T(30232).format(what=_T(content_type)), icon=xbmcgui.NOTIFICATION_INFO) xbmc.executebuiltin('Container.Refresh()')
@plugin.route('/play_video/<video_id>') def play_video(video_id): media_url = session.get_video_url(video_id) log("Playing: %s" % media_url) li = ListItem(path=media_url) li.setProperty('mimetype', 'video/mp4') xbmcplugin.setResolvedUrl(plugin.handle, True, li) @plugin.route('/stream_locked') def stream_locked(): xbmcgui.Dialog().notification(heading=plugin.name, message=_T(30242), icon=xbmcgui.NOTIFICATION_INFO) if __name__ == '__main__': try: plugin.run() except HTTPError as e: r = e.response if r.status_code in [401, 403]: msg = _T(30210) else: msg = r.reason try: msg = r.json().get('userMessage') except: pass xbmcgui.Dialog().notification('%s Error %s' % (plugin.name, r.status_code), msg, xbmcgui.NOTIFICATION_ERROR) traceback.print_exc()