Esempio n. 1
0
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()')
Esempio n. 2
0
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)
Esempio n. 3
0
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()
Esempio n. 4
0
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)
Esempio n. 5
0
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()')
Esempio n. 6
0
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)
Esempio n. 7
0
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()')
Esempio n. 8
0
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()')
Esempio n. 9
0
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()')
Esempio n. 10
0
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()')
Esempio n. 11
0
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)