def blogs_following(offset=0): blogs = {} litems = [] blogres = [] listblogs = [] litems = [] name = '' updated = '' url = '' desc = '' strpage = str(((int(offset) + 20) / 20)) nextitem = ListItem(label="Next Page -> #{0}".format(int(strpage) + 1), label2="More", icon=__imgnext__, thumbnail=__imgnext__, path=plugin.url_for(blogs_following, offset=int(20 + int(offset)))) nextitem.set_art({ 'poster': __imgnext__, 'thumbnail': __imgnext__, 'fanart': __imgnext__ }) nextitem.is_folder = True litems = [nextitem] results = following_list(offset=offset, max=20) # max not working right now, max=50) for b in results: thumb = 'https://api.tumblr.com/v2/blog/{0}/avatar/64'.format( name) #__imgtumblr__ try: thumbd = {} name = b.get(u'name', '') title = b.get(u'title', '') desc = Strip(b.get(u'description', '')) url = b.get(u'url', "http://{0}.tumblr.com".format(name)) updated = b.get(u'updated', 0) updatetext = datetime.datetime.fromtimestamp( updated) #.isoformat() thumb = 'https://api.tumblr.com/v2/blog/{0}/avatar/64'.format(name) iurl = plugin.url_for(endpoint=blogposts, blogname=name, offset=0) lbl = "[COLOR yellow][B]{0}[/B][/COLOR] ({2}:{3} {4}/{5})\n[I]{1}[/I]".format( name, title.encode('latin-1', 'ignore'), updatetext.hour, updatetext.minute, updatetext.day, updatetext.month) lbl2 = title + "\n" + desc.encode('latin-1', 'ignore') litem = ListItem(label=lbl, label2=lbl2, icon=thumb, thumbnail=thumb, path=iurl) litem.set_art({ 'poster': thumb, 'thumbnail': thumb, 'fanart': thumb }) litem.is_folder = True litem.playable = False litems.append(litem) except: pass return litems
def following(offset=0): blogs = {} litems = [] blogres = [] listblogs = [] litems = [] name = '' updated = '' url = '' desc = '' strpage = str(((int(offset) + 20) / 20)) nextitem = ListItem(label="Next Page -> #{0}".format(int(strpage) + 1), label2="More", icon=__imgnext__, thumbnail=__imgnext__, path=plugin.url_for(following, offset=int(20 + int(offset)))) nextitem.set_art({ 'poster': __imgnext__, 'thumbnail': __imgnext__, 'fanart': __imgnext__ }) nextitem.is_folder = True litems = [nextitem] results = following_list( offset=offset) # max not working right now, max=50) for b in results: thumb = __imgtumblr__ try: thumbd = {} name = b.get(u'name', '') title = b.get(u'title', '') desc = b.get(u'description', '') url = b.get(u'url', "http://{0}.tumblr.com".format(name)) updated = b.get(u'updated', '') thumb = b.get('thumb', __imgtumblr__) iurl = plugin.url_for(endpoint=blogposts, blogname=name, offset=0) lbl = "{0}\n{1}".format(name, title.encode('latin-1', 'ignore')) lbl2 = desc.encode('latin-1', 'ignore') litem = ListItem(label=lbl, label2=lbl2, icon=thumb, thumbnail=thumb, path=iurl) litem.set_art({ 'poster': thumb, 'thumbnail': thumb, 'fanart': thumb }) litem.is_folder = True litem.playable = False litems.append(litem) except: pass return litems
def index(): # setview_list() litems = [] itemdashvids = {} itemliked = {} itemfollowing = {} itemtagbrowse = {} itemtagged = {} itemsearch = {} tstamp = str(time.mktime( (datetime.datetime.now() - weekdelta).timetuple())).split('.', 1)[0] info = {"name": "Not logged in", "likes": 1, "following": 1} tinfo = namedtuple("tumblr_info", field_names=info.keys())(*info.values()) try: userinforesp = tclient.info() if isinstance(userinforesp, dict): info = userinforesp.get("user", {}) tinfo = namedtuple('tumblr_info', info.keys(), rename=True)(*info.values()) except: plugin.notify("ERROR: Tumblr needs this addon to be authorized.") try: lbldash = "[B]{0}[/B]'s Dashboard".format(tinfo.name) lblfol = "Following: {0}".format(str(tinfo.following)) lbllike = "Liked: {0}".format(str(tinfo.likes)) itemdash = ListItem(label=lbldash, icon=__imgtumblr__, path=plugin.url_for(dashboard, offset=0)) itemfollowing = ListItem(label=lblfol, path=plugin.url_for(blogs_following, offset=0)) itemliked = ListItem(label=lbllike, path=plugin.url_for(liked, offset=0)) litems.append(itemdash) litems.append(itemfollowing) litems.append(itemliked) #itemargs = {'offset': 0, 'lastid':0} #itemdashvids = makeitem(name='Dashboard Videos', img=__imgtumblr__, path='dashboard', kwargs=itemargs) #itemargs = {'offset':0} #itemliked = makeitem(name='Liked Videos', path='liked', kwargs=itemargs) #itemfollowing = makeitem(name='Following', path='blogs_following', kwargs=itemargs) #itemargs = {'timestamp': str(tstamp)} #itemtagbrowse = makeitem(name='Browse Tags', path='taglist', kwargs=itemargs) #dict(timestamp=str(tstamp))) #itemargs.update({'tagname': 0}) #litems.append(itemdash) #litems.append(itemfollowing) #litems.append(itemliked) #litems.append(itemtagbrowse) except Exception as ex: outmsg = "{0}".format(str(ex)) plugin.notify(msg=outmsg, delay=7000) print outmsg return litems
def test_label(self): item = ListItem('foo') self.assertEqual(item.label, 'foo') item.label = 'bar' self.assertEqual(item.label, 'bar') item.set_label('baz') self.assertEqual(item.get_label(), 'baz')
def test_label2(self): item = ListItem('foo') self.assertIsNone(item.label2) item.label2 = 'bar' self.assertEqual(item.label2, 'bar') item.set_label2('baz') self.assertEqual(item.get_label2(), 'baz')
def new_viditem(v={}, as_dict=False): pathdl = plugin.url_for(endpoint=download, vurl=v.get('contentUrl', v.get('hostPageUrl', ''))) ctxlist = [] citem = ('Download', 'RunPlugin({0})'.format(pathdl),) ctxlist.append(citem) pathdel = plugin.url_for(endpoint=fav_del, idvid=v.get('videoId', '')) citem = ('DELETE', 'RunPlugin({0})'.format(pathdel),) ctxlist.append(citem) img = v.get('thumbnail', v.get('thumbnailUrl', 'DefaultVideo.png')) lbl = v.get('label', v.get('name', '')) lbl2 = v.get('label2', v.get('videoId', '')) vidpath = v.get('path', None) if vidpath is None: vidpath = plugin.url_for(endpoint=play, vtitle=v.get('name', lbl), vurl=v.get('contentUrl', v.get('hostPageUrl', lbl2))) xitem = None if not as_dict: xitem = ListItem(label=lbl, label2=lbl2, icon=img, thumbnail=img, path=vidpath) xitem.add_context_menu_items(items=ctxlist, replace_items=False) xitem.playable = True xitem.is_folder = False xitem.set_info(info_type='video', info_labels={'Title': lbl, 'Plot': lbl2, 'Premiered': v.get('datePublished', '')}) xitem.thumbnail = img xitem.icon = img idvid = v.get('videoId', 0) if idvid is not 0: xitem.set_property(key='videoId', value=idvid) xitem.set_info(info_type='video', info_labels={'VideoID': idvid}) else: xitem = {'label': lbl, 'label2': lbl2, 'icon': img, 'thumbnail': img, 'is_playable': True, 'path': vidpath} return xitem
def test_set_info(self): # noinspection PyUnresolvedReferences with mock.patch.object(xbmcgui.ListItem, 'setInfo') as mock_setInfo: item = ListItem() item.set_info('video', {'title': '300'}) mock_setInfo.assert_called_with('video', {'title': '300'})
def test_is_selected(self): # noinspection PyUnresolvedReferences with mock.patch.object(xbmcgui.ListItem, 'isSelected') as mock_selected: mock_selected.return_value = False item = ListItem() self.assertEqual(item.is_selected(), False) mock_selected.assert_called_with()
def resolveurl(): playable = None resolved = "" url = plugin.keyboard(default='', heading='Video Page URL') if url is not None: name = url if len(url) > 0: url = url.encode('utf-8', 'ignore') item = ListItem(label=name, label2=url, icon='DefaultVideo.png', thumbnail='DefaultVideo.png', path=plugin.url_for(endpoint=play, url=url)) item.playable = True item.set_info(info_type='video', info_labels={ 'Title': url, 'Plot': url }) item.add_stream_info(stream_type='video', stream_values={}) playable = play(url) try: resolved = urlresolver.resolve(url) except: resolved = "" plugin.notify(msg=resolved, title="Playing..") return plugin.play_video(playable) #plugin.redirect(plugin.url_for(index)) #plugin.clear_added_items() #plugin.end_of_directory() #return None return None
def category(name='', url=''): html = '' if not str(url).startswith('http'): url = __BASEURL__ + '/' + url html = DL(url) banner = 'DefaultVideoFolder.png' epre = re.compile( ur'href="(https?://watchseries-online.[a-z]+/episode/.+?)" .+?<span.+?</span>(.+?)</a>' ) matches = epre.findall(html) litems = [] if len(matches) > 1000: matches = matches[0:1000] for eplink, epname in matches: itempath = plugin.url_for(endpoint=episode, name=epname, url=eplink) item = ListItem(label=epname, label2=eplink, icon='DefaultVideo.png', thumbnail='DefaultVideo.png', path=itempath) litems.append(item) plugin.log.info(msg="** {0}\t{1}".format(epname, eplink)) plugin.notify(msg="Category {0}".format(name), title=str(len(litems))) if plugin.get_setting(key='sortalpha', converter=bool): litems.sort(key=lambda litems: litems.label, reverse=True) return litems
def test_select(self): # noinspection PyUnresolvedReferences with mock.patch.object(xbmcgui.ListItem, 'select') as mock_select: item = ListItem() item.selected = True mock_select.assert_called_with(True) item.select(False) mock_select.assert_called_with(False)
def test_poster(self): item = ListItem() self.assertIsNone(item.poster) item.poster = 'bar' self.assertEqual(item.poster, 'bar') item.poster = 'baz' self.assertEqual(item.poster, 'baz')
def test_played(self): item = ListItem() self.assertEqual(item.played, False) item.played = True self.assertEqual(item.played, True) item.played = False self.assertEqual(item.played, False)
def makeitem(name=None, img=None, path='blogposts', playable=False, **kwargs): #if doDebug(): xitem = None try: if not path.startswith('plugin://'): itempath = plugin.url_for(endpoint=path, items=kwargs) else: itempath = path lbl2 = kwargs.get("label2", itempath.partition('plugin.video.tumblrv/')[-1]) if img is None: img = "https://api.tumblr.com/v2/blog/{0}/avatar/64".format(name) xitem = ListItem(label=name, label2=lbl2, icon=img, thumbnail=img, path=itempath) xitem.playable = playable xitem.poster = img #litem = {'label': name, 'thumbnail': img, 'icon': img, 'is_playable': playable, 'path': itempath)} if path == 'blogposts': img = "https://api.tumblr.com/v2/blog/{0}/avatar/64".format(name) elif plugin.request.path.find( 'following/') != -1 or plugin.request.path.find( 'liked/') != -1 or plugin.request.path.find( 'dashboard/') != -1: blogname = kwargs.get('blogname', name) ctxaction = "RunPlugin({0})".format( plugin.url_for(endpoint=blogposts, blogname=blogname)) cname = "[COLOR green]GOTO:[/COLOR] {0}".format(blogname) citem = ( cname, ctxaction, ) ctxlist.append(citem) vidurl = kwargs.get("vidurl", None) if vidurl is not None: pathdl = plugin.url_for(endpoint=download, urlvideo=vidurl) citem = ( 'Download', 'RunPlugin({0})'.format(pathdl), ) ctxlist.append(citem) vidid = kwargs.get('id', None) if vidid is not None: pathaddlike = plugin.url_for(endpoint=addlike, id=vidid) citem = ( 'Like', 'RunPlugin({0})'.format(pathaddlike), ) ctxlist.append(citem) xitem.add_context_menu_items(items=ctxlist, replace_items=False) except Exception as ex: outmsg = "Error: {0}\n{1}\n{2}\n".format(str(ex), str(ex.message), str(ex.args)) plugin.notify(msg=outmsg, delay=10000) print outmsg return xitem
def test_stream_info(self): # noinspection PyUnresolvedReferences with mock.patch.object(xbmcgui.ListItem, 'addStreamInfo') as mock_stream_info: item = ListItem() item.add_stream_info('video', {'duration': 185}) mock_stream_info.assert_called_with('video', {'duration': 185}) item.add_stream_info('audio', {'language': 'en'}) mock_stream_info.assert_called_with('audio', {'language': 'en'})
def dashboard_old(listlikes, alltags, litems): for item in listlikes: if item.get('type', '') == 'video': b = item img = item.get("thumbnail_url", __imgtumblr__) img2 = item.get("image_permalink", __imgtumblr__) alltags.extend(item.get('tags', [])) try: if len(b.get('slug', '')) > 0: lbl = b.get('slug', '') elif len(b.get('title', '')) > 0: lbl = b.get('title', '') elif len(b.get('caption', '')) > 0: lbl = Strip(b.get('caption', '')) elif len(b.get('summary', '')) > 0: lbl = b.get('summary', '') elif len(b.get('source_title', '')) > 0: lbl = b.get('source_title', '') else: lbl = b.get('short_url', '') if len(item.get('summary', '')) > 0: lbl2 = item.get('summary', '') else: lbl2 = item.get('blog_name', '') + " / " + item.get('source_title', '') + "(" + item.get( 'slug_name', '') + ")" except: lbl = b.get('blog_name', '') lbl2 = b.get('short_url', '') vidurl = item.get('video_url', '') img = item.get('thumbnail_url', item.get('image_permalink', item.get('image_permalink', __imgtumblr__))).replace('https:', 'http:') img2 = item.get('image_permalink', item.get('thumbnail_url', item.get('thumbnail_url', __imgtumblr__))).replace('https:', 'http:') if vidurl is not None and len(vidurl) > 10: if len(b.get('caption', '')) > 0: lbl = Strip(b.get('caption', '')) litem = ListItem(label=lbl, label2=lbl2, icon=img2, thumbnail=img, path=vidurl) litem.playable = True litem.is_folder = False if item.get('date', '') is not None: rdate = str(item.get('date', '')).split(' ', 1)[0].strip() litem.set_info(info_type='video', info_labels={'Date': rdate}) litem.set_art({'poster': img2, 'thumbnail': img, 'fanart': img2}) pathdl = plugin.url_for(endpoint=download, urlvideo=vidurl) pathaddlike = plugin.url_for(endpoint=addlike, id=item.get('id', '')) litem.add_context_menu_items( [('Download', 'RunPlugin({0})'.format(pathdl)), ('Like', 'RunPlugin({0})'.format(pathaddlike)), ('Show Image', 'ShowPicture({0})'.format(img)), ]) litems.append(litem) item = listlikes[-1] plugin.set_setting('lastid', str(item.get('id', lastid))) savetags(alltags) # litems.append(nextitem) return litems
def category_episodemake(episodename, episodelink, dateadded=None): ''' Will return a ListItem for the given link to an episode and it's full linked name. Name will be sent to format show to attempt to parse out a date or season from the title. Infolabels are populated with any details that can be parsed from the title as well. Should be used anytime an item needs to be created that is an item for one specific episode of a show. Latest 350, Saved Show, Category (Show listing of all episodes for that series) would all use this. ''' infolbl = {} spath = plugin.url_for(episode, name=episodename, url=episodelink) if plugin.get_setting('playold', converter=bool): spath = spath.replace("plugin.video.watchseries/", "plugin.video.wsonline/") img = "DefaultVideoFolder.png" seasonstr = '' try: eptitle, epdate, epnum = ws.formatshow(episodename) eplbl = ws.formatlabel(eptitle, epdate, epnum) plotstr = "{0} ({1}): {2} {3}".format(epdate, epnum, eptitle, episodelink) infolbl = {'EpisodeName': epdate, 'Title': eptitle, 'Plot': plotstr} if len(epnum) > 0: showS, showE = ws.findepseason(epnum) snum = int(showS) epnum = int(showE) infolbl.update({'Episode': showE, 'Season': showS}) if snum > 0 and epnum > 0: epdate = "S{0}e{1}".format(snum, epnum) infolbl.update({'PlotOutline': epdate}) if dateadded is not None: dateout = str(dateadded.replace(' ', '-')).strip() infolbl.update({"Date": dateout}) item = { 'label': eplbl, 'label2': epdate, 'icon': img, 'thumbnail': img, 'path': spath } item.setdefault(item.keys()[0]) li = ListItem.from_dict(**item) li.set_is_playable(is_playable=True) li.is_folder = True li.set_info(type='video', info_labels=infolbl) li.add_context_menu_items([( 'Autoplay', 'RunPlugin("{0}")'.format( plugin.url_for(endpoint=ws.func_autoplay, url=episodelink)), )]) except: li = ListItem(label=episodename, label2=episodelink, icon=img, thumbnail=img, path=spath) return li
def test_context_menu(self): menu_items = [('label1', 'foo'), ('label2', 'bar')] item = ListItem() item.add_context_menu_items(menu_items) self.assertEqual(item.get_context_menu_items(), menu_items) extra_menu_item = ('label3', 'baz') menu_items.append(extra_menu_item) item.add_context_menu_items([extra_menu_item]) self.assertEqual(item.get_context_menu_items(), menu_items)
def dashboard(lastid=0, offset=0): # setview_thumb() likes = {} listlikes = [] litems = [] strpage = str(((int(offset) + 20) / 20)) # results = tclient.dashboard(offset=offset, limit=100) results = tclient.dashboard(limit=20, offset=offset, type='video', since_id=lastid) nextoff = int(20 + int(offset)) nextitem = ListItem(label="Next Page -> #{0}".format(int(strpage) + 1), label2="Liked Videos", icon=__imgnext__, thumbnail=__imgnext__, path=plugin.url_for(dashboard, offset=nextoff, lastid=lastid)) nextitem.set_art({ 'poster': __imgnext__, 'thumbnail': __imgnext__, 'fanart': __imgnext__ }) nextitem.is_folder = True # litems = [nextitem] litems = [] alltags = [] if results is not None: if results.get('posts', None) is not None: if results.get('posts', None): results = results.get('posts', '') try: if isinstance(results, list): listlikes = results else: listlikes = results.get(results.keys()[0]) except: listlikes = [] else: listlikes = results.get(results.keys()[-1]) litems, alltags = dashboard_items(listlikes) item = listlikes[-1] nextid = item.get('id', ) plugin.set_setting('lastid', nextid) if nextid >= lastid - 20: newid, nextid = get_postids(ForceUpdate=True) newoff = -1 * (newid - nextid) nextitem.path = plugin.url_for(dashboard, offset=newoff, lastid=newid) msgrefresh = "Current ID:{0} Starting Newest ID: {1} off: {2} Latest PostID: {3} new Offset: {4})".format( str(lastid), str(newid), str(nextid), str(offset), str(newoff)) plugin.notify(msgrefresh) savetags(alltags) litems.append(nextitem) return litems
def play(title, video, url): resolved = None mediaurl = None vidhtml = urllib2.urlopen(url).read() vidurl = '' try: matches = re.compile('(http://[^"<]+?.mp4[^"<]+?)"', re.I + re.M + re.S + re.U).findall(vidhtml)[0] if matches is not None: vidurl = matches xbmc.log("MATCH MP4 = {0}".format(vidurl)) vli = ListItem(label=title, label2=url, icon=video, thumbnail=video, path=vidurl) vli.playable = True #plugin.set_resolved_url(plugin.url_for(play, title=title, video=video, url=url)) #xbmc.Player().play(vidurl) #plugin.play_video(vli) #return plugin.play_video(vli) #return xbmc.Player().play(vidurl) except: pass try: if vidurl == '': matches2 = re.compile('(http://[^"<]+?.flv[^"<]+?)"', re.I + re.M + re.S + re.U).findall(vidhtml)[0] if matches2 is not None: vidurl = matches2 xbmc.log("MATCH MP4 = {0}".format(vidurl)) vli = ListItem(label=title, label2=url, icon=video, thumbnail=video, path=vidurl) vli.playable = True #plugin.set_resolved_url(plugin.url_for(play, title=title, video=video, url=url)) #xbmc.Player().play(vidurl) #plugin.set_resolved_url(vli) #plugin.play_video(vli) #plugin.set_resolved_url(plugin.url_for(play, title=title, video=video, url=url)) #return plugin.play_video(vli) except: pass #plugin.set_resolved_url(plugin.url_for(play, title=title, video=video, url=url)) try: if vli is not None: plugin.set_resolved_url(vli) return plugin.play_video(vli) except: pass
def test_art(self): item = ListItem() art = {'thumb': None, 'icon': None} self.assertEqual(item.art, art) art2 = {'thumb': 'something', 'icon': 'else'} item.art = art2 self.assertEqual(item.art, art2) item.set_art(art) self.assertEqual(item.art, art)
def test_path(self): item = ListItem() self.assertIsNone(item.path) item.path = 'bar' self.assertEqual(item.path, 'bar') self.assertEqual(item.get_path(), 'bar') item.set_path('baz') self.assertEqual(item.path, 'baz') self.assertEqual(item.get_path(), 'baz')
def test_thumbnail(self): item = ListItem() self.assertIsNone(item.thumbnail) item.thumbnail = 'bar' self.assertEqual(item.thumbnail, 'bar') self.assertEqual(item.get_thumbnail(), 'bar') item.set_thumbnail('baz') self.assertEqual(item.thumbnail, 'baz') self.assertEqual(item.get_thumbnail(), 'baz')
def test_icon(self): item = ListItem() self.assertIsNone(item.icon) item.icon = 'bar' self.assertEqual(item.icon, 'bar') self.assertEqual(item.get_icon(), 'bar') item.set_icon('baz') self.assertEqual(item.icon, 'baz') self.assertEqual(item.get_icon(), 'baz')
def taglist(timestamp=0): # setview_list() if not os.path.exists(tagpath): json.dump([], fp=open(tagpath, mode='w')) litems = [] alltags = json.load(open(tagpath)) for tag in alltags: turl = plugin.url_for(tags, tagname=tag, timestamp=str(timestamp)) li = ListItem(label=tag, label2=tag, icon=__imgtumblr__, thumbnail=__imgtumblr__, path=turl) li.is_folder = True litems.append(li) return litems
def dashboard_items(results=[]): alltags = [] litems = [] for item in results: if item.get('type', '') == 'video': b = {} b.update(item) lbl = "" lbl2 = "" img = item.get('thumbnail_url', item.get('image_permalink', __imgtumblr__)) alltags.extend(item.get('tags', [])) try: if len(b.get('slug', '')) > 0: lbl = b.get('slug', '') elif len(b.get('title', '')) > 0: lbl = b.get('title', '') elif len(b.get('caption', '')) > 0: lbl = Strip(b.get('caption', '')) elif len(b.get('summary', '')) > 0: lbl = b.get('summary', '') elif len(b.get('source_title', '')) > 0: lbl = b.get('source_title', '') else: lbl = b.get('short_url', '') if len(item.get('summary', '')) > 0: lbl2 = item.get('summary', '') else: lbl2 = item.get('blog_name', "") + " / " + item.get( 'source_title', '') + "(" + item.get('slug_name', '') + ")" except: lbl = b.get(b.keys()[0], "") lbl2 = b.get(b.keys()[-1], "") vidurl = item.get('video_url', "") if vidurl is not None and len(vidurl) > 10: litem = ListItem(label=lbl, label2=lbl2, icon=img, thumbnail=img, path=vidurl) litem.playable = True litem.is_folder = False if item.get('date', '') is not None: rdate = str(item.get('date', '')).split(' ', 1)[0].strip() litem.set_info(info_type='video', info_labels={'Date': rdate}) litem.set_art({'poster': img, 'thumbnail': img, 'fanart': img}) pathdl = plugin.url_for(endpoint=download, urlvideo=vidurl) litem.add_context_menu_items([ ('Download', 'RunPlugin({0})'.format(pathdl)), ]) litems.append(litem) return litems, alltags
def test_selected(self): item = ListItem() self.assertEqual(item.selected, False) self.assertEqual(item.is_selected(), False) item.selected = True self.assertEqual(item.selected, True) self.assertEqual(item.is_selected(), True) item.select(False) self.assertEqual(item.selected, False) self.assertEqual(item.is_selected(), False)
def play_film(identifier): mubi_resolved_info = mubi.get_play_url(identifier) mubi_film = ListItem(path=mubi_resolved_info['url']) if mubi_resolved_info['is_mpd']: mubi_film.set_property('inputstreamaddon', 'inputstream.adaptive') mubi_film.set_property('inputstream.adaptive.manifest_type', 'mpd') if mubi_resolved_info['is_drm']: xbmc.log("Playing DRM films is not currently supported", 4) return None # drm = mubi_resolved_info['drm_item'] # mubi_film.set_property('inputstream.adaptive.license_key', drm['lurl']+'|'+drm['header']+ # '|B{SSM}|'+drm['license_field']) # mubi_film.set_property('inputstream.adaptive.license_type', "com.widevine.alpha") return plugin.set_resolved_url(mubi_film)
def test_context_menu(self): menu_items = [('label1', 'foo'), ('label2', 'bar')] item = ListItem() item.add_context_menu_items(menu_items) self.assertEqual(item.get_context_menu_items(), menu_items) extra_menu_item = ('label3', 'baz') menu_items.append(extra_menu_item) item.add_context_menu_items([extra_menu_item]) self.assertEqual(item.get_context_menu_items(), menu_items) # Verify replace_items branch gets executed and works. item.add_context_menu_items([extra_menu_item], True) self.assertEqual(item.get_context_menu_items(), [extra_menu_item])
def resolveurl(): url = plugin.keyboard(default='', heading='Video Page URL') if url is not None: name = url if len(url) > 0: item = ListItem(label=name, label2=url, icon='DefaultVideo.png', thumbnail='DefaultVideo.png', path=plugin.url_for(endpoint=play, url=url)) item.set_is_playable(True) item.set_info(type='video', info_labels={'Title': url, 'Plot': url}) item.add_stream_info(stream_type='video', stream_values={}) playable = play(url) plugin.notify(msg=playable.path, title="Playing..") plugin.play_video(playable) #plugin.redirect(plugin.url_for(index)) plugin.clear_added_items() plugin.end_of_directory()