def user_playlist_add_item(item_type, item_id): if item_type == 'playlist': srcPlaylist = session.get_playlist(item_id) if not srcPlaylist: return items = session.get_playlist_items(playlist=srcPlaylist) # Sort Items by Artist, Title sortMode = 'ALBUM' if ALBUM_PLAYLIST_TAG in srcPlaylist.description else 'LABEL' items.sort(key=lambda line: line.getSortText(mode=sortMode).upper(), reverse=False) items = ['%s' % item.id for item in items if item.available] elif item_type.startswith('album'): # Add First Track of the Album tracks = session.get_album_items(item_id) for track in tracks: if track.available: item_id = track.id break items = ['%s' % item_id] else: items = [item_id] playlist = session.user.selectPlaylistDialog(allowNew=True) if playlist: session.show_busydialog(_T(30263), playlist.name) try: session.user.add_playlist_entries(playlist=playlist, item_ids=items) except Exception as e: log(str(e), level=xbmc.LOGERROR) traceback.print_exc() session.hide_busydialog() xbmc.executebuiltin('Container.Refresh()')
def play_video(video_id): media = session.get_video_url(video_id) if media: log("Playing: %s" % media.url) li = ListItem(path=media.url) li.setProperty('mimetype', 'video/mp4') xbmcplugin.setResolvedUrl(plugin.handle, True, li)
def user_playlist_toggle(): if not session.is_logged_in: return url = xbmc.getInfoLabel("ListItem.FilenameandPath") if not _addon_id in url: return if 'play_track/' in url: item_type = 'track' userpl_id = addon.getSetting('default_trackplaylist_id').decode( 'utf-8') userpl_name = addon.getSetting('default_trackplaylist_title').decode( 'utf-8') item_id = url.split('play_track/')[1] item_id = item_id.split('/')[0] item = session.get_track(item_id) elif 'play_video/' in url: item_type = 'video' userpl_id = addon.getSetting('default_videoplaylist_id').decode( 'utf-8') userpl_name = addon.getSetting('default_videoplaylist_title').decode( 'utf-8') item_id = url.split('play_video/')[1] item_id = item_id.split('/')[0] item = session.get_video(item_id) elif 'album/' in url: item_type = 'album' userpl_id = addon.getSetting('default_albumplaylist_id').decode( 'utf-8') userpl_name = addon.getSetting('default_albumplaylist_title').decode( 'utf-8') item_id = url.split('album/')[1] item_id = int('0%s' % item_id.split('/')[0]) item = session.get_album(item_id) if userpl_id: if item._userplaylists and userpl_id in item._userplaylists: user_playlist_remove_album(userpl_id, item.id, dialog=False) return tracks = session.get_album_items(item.id) for track in tracks: if track.available: item.id = track.id # Add First Track of Album break else: return try: if not userpl_id: # Dialog Mode if default Playlist not set user_playlist_add_item(item_type, '%s' % item_id) return if item._userplaylists and userpl_id in item._userplaylists: session.show_busydialog(_T(30264), userpl_name) session.user.remove_playlist_entry(playlist=userpl_id, item_id=item.id) else: session.show_busydialog(_T(30263), userpl_name) session.user.add_playlist_entries(playlist=userpl_id, item_ids=['%s' % item.id]) except Exception, e: log(str(e), level=xbmc.LOGERROR) traceback.print_exc()
def homepage_items(): params = {'locale': session._config.locale, 'deviceType': 'BROWSER'} r = session.request('GET', 'pages/home', params=params) if r.ok: items = [] json_obj = r.json() for row in json_obj['rows']: for module in row['modules']: try: item_type = module['type'] if item_type in HOMEPAGE_ITEM_TYPES: item = FolderItem2( module['title'], plugin.url_for( homepage_item, item_type, urllib.quote_plus( module['pagedList']['dataApiPath']))) items.append(item) else: log('Unknown Homepage Item "%s": %s' % (item_type, module.get('title', 'Unknown')), level=xbmc.LOGDEBUG) except: pass session.add_list_items(items, end=True)
def user_playlist_remove_id(playlist_id, item_id): playlist = session.get_playlist(playlist_id) ok = xbmcgui.Dialog().yesno(_T(30247).format(name=playlist.name), _T(30246)) if ok: session.show_busydialog(_T(30264), playlist.name) try: session.user.remove_playlist_entry(playlist, item_id=item_id) except Exception as e: log(str(e), level=xbmc.LOGERROR) traceback.print_exc() session.hide_busydialog() xbmc.executebuiltin('Container.Refresh()')
def homepage_items(): params = {'locale': session._config.locale, 'deviceType': 'BROWSER'} apiPaths = [] items = [] r = session.request('GET', 'pages/home', params=params) if r.ok: json_obj = r.json() for row in json_obj['rows']: for module in row['modules']: try: item_type = module['type'] if item_type in HOMEPAGE_ITEM_TYPES: apiPath = module['pagedList']['dataApiPath'] item = FolderItem( module['title'], plugin.url_for(homepage_item, item_type, urllib.parse.quote_plus(apiPath))) items.append(item) apiPaths.append(apiPath) else: log('Unknown Homepage Item "%s": %s' % (item_type, module.get('title', 'Unknown')), level=xbmc.LOGDEBUG) except: pass r = session.request('GET', 'pages/videos', params=params) if r.ok: json_obj = r.json() for row in json_obj['rows']: for module in row['modules']: try: item_type = module['type'] if item_type in HOMEPAGE_ITEM_TYPES: apiPath = module['pagedList']['dataApiPath'] item = FolderItem( module['title'], plugin.url_for(homepage_item, item_type, urllib.parse.quote_plus(apiPath))) if not apiPath in apiPaths: if item_type == 'MIX_LIST': item.name = item.name + ' (' + _P( 'videos') + ')' items.insert(1, item) else: items.append(item) apiPaths.append(apiPath) else: log('Unknown Homepage Item "%s": %s' % (item_type, module.get('title', 'Unknown')), level=xbmc.LOGDEBUG) except: pass session.add_list_items(items, end=True)
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: session.show_busydialog(_T(30235), playlist.name) try: session.user.delete_playlist(playlist_id) except Exception as e: log(str(e), level=xbmc.LOGERROR) traceback.print_exc() session.hide_busydialog() xbmc.executebuiltin('Container.Refresh()')
def user_playlist_remove_item(playlist_id, entry_no): item_no = int('0%s' % entry_no) + 1 playlist = session.get_playlist(playlist_id) ok = xbmcgui.Dialog().yesno( _T(30247).format(name=playlist.name), _T(30241).format(entry=item_no)) if ok: session.show_busydialog(_T(30264), playlist.name) try: session.user.remove_playlist_entry(playlist, entry_no=entry_no) except Exception, e: log(str(e), level=xbmc.LOGERROR) traceback.print_exc() session.hide_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 and playlist.id != playlist_id: session.show_busydialog(_T(30265), playlist.name) 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 as e: log(str(e), level=xbmc.LOGERROR) traceback.print_exc() session.hide_busydialog() xbmc.executebuiltin('Container.Refresh()')
def user_playlist_remove_album(playlist_id, item_id, dialog=True): playlist = session.get_playlist(playlist_id) ok = True if dialog: ok = xbmcgui.Dialog().yesno(_T(30247).format(name=playlist.name), _T(30246)) if ok: session.show_busydialog(_T(30264), playlist.name) try: items = session.get_playlist_tracks(playlist) for item in items: if '%s' % item.album.id == '%s' % item_id: session.user.remove_playlist_entry(playlist, entry_no=item._playlist_pos) break # Remove only one Item except Exception as e: log(str(e), level=xbmc.LOGERROR) traceback.print_exc() session.hide_busydialog() xbmc.executebuiltin('Container.Refresh()')
def play_track_cut(track_id, cut_id, album_id): media_url = session.get_media_url(track_id, cut_id=cut_id) log("Playing Cut %s: %s" % (cut_id, media_url)) disableInputstreamAddon = False if not media_url.startswith('http://') and not media_url.startswith('https://') and \ not 'app=' in media_url.lower() and not 'playpath=' in media_url.lower(): # Rebuild RTMP URL if KODI_VERSION >= (17, 0): media_url = 'rtmp://%s' % media_url disableInputstreamAddon = True else: host, tail = media_url.split('/', 1) app, playpath = tail.split('/mp4:', 1) media_url = 'rtmp://%s app=%s playpath=mp4:%s' % (host, app, playpath) li = ListItem(path=media_url) if disableInputstreamAddon: # Krypton can play RTMP Audio Streams without inputstream.rtmp Addon li.setProperty('inputstreamaddon', '') mimetype = 'audio/flac' if session._config.quality == Quality.lossless and session.is_logged_in else 'audio/mpeg' li.setProperty('mimetype', mimetype) xbmcplugin.setResolvedUrl(plugin.handle, True, li)