Exemplo n.º 1
0
def play(url):
    url = url.decode('utf-8', 'ignore')
    resolved = u''
    try:
        import urlresolver
        resolved = urlresolver.HostedMediaFile(url).resolve()
        vitem = ListItem(label=url, path=resolved)
        vitem.is_folder = False
        vitem.set_is_playable = True
        vitem.set_info(type='video', info_labels={'Title': url})
        vitem.add_stream_info(stream_type='video', stream_values={})
        plugin.set_resolved_url(resolved)
        return plugin.play_video(vitem)
    except:
        plugin.notify(
            msg="Failed to resolve {0} to a playable video.".format(url))
    try:
        if resolved is None or len(resolved) < 5:
            import YoutubeDLWrapper
            ytdl = YoutubeDLWrapper._getYTDL()
            ytdl.clearDownloadParams()
            resolved = ytdl.extract_info(url, download=False)
            vitem = ListItem(label=url, path=resolved)
            vitem.is_folder = False
            vitem.set_is_playable = True
            vitem.set_info(type='video', info_labels={'Title': url})
            vitem.add_stream_info(stream_type='video', stream_values={})
            plugin.set_resolved_url(resolved)
            return plugin.play_video(vitem)
    except:
        plugin.notify(
            msg="Failed to resolve {0} to a playable video.".format(url))
    return None
Exemplo n.º 2
0
 def test_select(self):
     with 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)
Exemplo n.º 3
0
def javmagnet(qbbb='qb',gid='0',uc='0'):
    menus=[]
    baseurl=javbusurl['base']
    if qbbb=='om':
        baseurl=javbusurl['om']
#try:
    rspmagnet=_http('%s/ajax/uncledatoolsbyajax.php?gid=%s&uc=%s&floor=1'%(baseurl,gid,uc),referer=baseurl)
    #xbmc.log(rspmagnet)
    leechmagnet = re.compile('onmouseover.*?href="(?P<magnet>magnet.*?)">\s*(?P<title>.*?)\s*</a>.*?href.*?">\s*(?P<filesize>.*?)\s*</a>.*?href.*?">\s*(?P<createdate>.*?)\s*</a>',  re.S)
    #if qbbb=='om':
    #	leechmagnet = re.compile(r'onmouseover.*?\x29">\s*(?P<title>.*?)\s*</td>.*?">\s*(?P<filesize>.*?)\s*</td>.*?">\s*(?P<createdate>.*?)\s*</td>.*?href="(?P<magnet>magnet.*?)">',  re.S)
    for match in leechmagnet.finditer(rspmagnet):
        
        magnet=match.group('magnet')
        title=match.group('title')
        title = re.sub("<a\x20.*?>", "|", title)
        filesize=match.group('filesize')
        createdate=match.group('createdate')
        

        filemsg ='大小:'+filesize+'  创建时间:'+createdate
        
        listitem=ListItem(label=comm.colorize_label(title, 'bt'), 
            label2=filesize, icon=None,
            thumbnail=xbmc.translatePath( os.path.join( IMAGES_PATH, 'magnet.jpg') ), 
            path=plugin.url_for('execmagnet',
            url=six.ensure_binary(magnet),title=six.ensure_binary(title),msg=six.ensure_binary(filemsg)))
        
        menus.append(listitem)
    return menus
#except:
    plugin.notify('自带磁力获取失败')
    return
Exemplo n.º 4
0
def episode_makeitem(episodename, episodelink):
    '''
    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)
    img = "DefaultVideoFolder.png"
    seasonstr = ''
    try:
        eptitle, epdate, epnum = formatshow(episodename)
        eplbl = formatlabel(eptitle, epdate, epnum)
        plotstr = "{0} ({1}): {2} {3}".format(epdate, epnum, eptitle, episodelink)
        infolbl = {'Date': epdate, 'Title': eptitle, 'Plot': plotstr}
        if len(epnum) > 0:
            showS, showE = findepseason(epnum)
            dictshow = {'Episode': showE, 'Season': showS}
            infolbl.update(dictshow)
            snum = int(showS)
            epnum = int(showE)
            if snum > 0 and epnum > 0:
                epdate = "S{0}e{1}".format(snum, epnum)
        item = {'label': eplbl, 'label2': epdate, 'icon': img, 'thumbnail': img, 'path': spath}
        item.setdefault(item.keys()[0])
        li = ListItem.from_dict(**item)
        li.set_info(type='video', info_labels=infolbl)
        li.add_context_menu_items([('Search [B]{0}[/B]'.format(eptitle), 'RunPlugin({0})'.format(plugin.url_for(query, searchquery=eptitle)),)])
    except:
        li = ListItem(label=episodename, label2=episodelink, icon=img, thumbnail=img, path=spath)
    return li
Exemplo n.º 5
0
def video_detail(seasonId):
    detail = Meiju.video_detail(seasonId)
    title = detail["data"]["seasonDetail"]["title"]
    SEASON_CACHE[seasonId] = detail["data"]  # store season detail
    history = HISTORY.get("list", None)
    playing_episode = "0"
    if history is not None:
        for l in history:
            if l["seasonId"] == seasonId:
                playing_episode = l["index"]
    for episode in detail["data"]["seasonDetail"]["episode_brief"]:
        label = title + episode["episode"]
        if episode["episode"] == playing_episode:
            label = "[B]" + colorize(label, "green") + "[/B]"
        item = ListItem(
            **{
                'label':
                label,
                'path':
                plugin.url_for("play_season",
                               seasonId=seasonId,
                               index=episode["episode"],
                               Esid=episode["sid"]),
            })
        item.set_info(
            "video", {
                "plot": episode["text"],
                "TVShowTitle": episode["text"],
                "episode": int(episode["episode"]),
                "season": 0
            })
        item.set_is_playable(True)
        yield item
    plugin.set_content('episodes')
Exemplo n.º 6
0
 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')
Exemplo n.º 7
0
 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')
Exemplo n.º 8
0
def play(artist, track):
    data = getTrack(artist, track)
    print data
    item = ListItem()
    item.set_label('%s - %s' % (artist, track))
    item.set_path(data['url'])
    item.set_played(True)
    xbmcplugin.setResolvedUrl(plugin.handle, True, item.as_xbmc_listitem())
Exemplo n.º 9
0
 def test_stream_info(self):
     with 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', {'languange': 'en'})
         mock_stream_info.assert_called_with('audio', {'languange': 'en'})
Exemplo n.º 10
0
def javstarlist(qbbb='qb', page=1):
    filter = '/actresses'
    pagestr = ''
    if int(page) > 1:
        pagestr = '/' + str(page)
    url = '%s%s%s' % (javbusurl[qbbb], filter, pagestr)
    try:
        rsp = _http(url)
        releech = 'avatar-box.*?href="%s/star/(?P<starid>.*?)">.*?src="(?P<starimg>.*?)".*?<span>(?P<starname>.*?)</span>' % (
            javbusurl[qbbb])
        # if qbbb=='om':
        # releech=r'star-frame2.*?href="%s/star/(?P<starid>.*?)".*?src="(?P<starimg>.*?)".*?title="(?P<starname>.*?)"'%(javbusurl[qbbb])
        leech = re.compile(releech, re.S)
        menus = []
        for match in leech.finditer(rsp):
            context_menu_items = []
            context_menu_items.append((
                '搜索' + colorize_label(match.group('starname').encode('UTF-8'),
                                      color='00FF00'),
                'RunPlugin(' +
                plugin.url_for('searchinit',
                               stypes='pan,bt',
                               sstr=match.group('starname').encode('UTF-8'),
                               modify='1',
                               otherargs='{}') + ')',
            ))

            listitem = ListItem(
                label='优优:%s' % (match.group('starname')),
                thumbnail=match.group('starimg'),
                path=plugin.url_for('javlist',
                                    qbbb=qbbb,
                                    filtertype='star',
                                    filterkey=match.group('starid'),
                                    page=1),
            )

            if len(context_menu_items) > 0 and listitem != None:
                listitem.add_context_menu_items(context_menu_items, False)
                menus.append(listitem)
        strnextpage = str(int(page) + 1)
        strnextpage = '/' + strnextpage + '">' + strnextpage + '</a>'
        if rsp.find(strnextpage) >= 0:
            menus.append({
                'label':
                '下一页',
                'path':
                plugin.url_for('javstarlist', qbbb=qbbb, page=int(page) + 1),
                'thumbnail':
                xbmc.translatePath(os.path.join(
                    IMAGES_PATH, 'nextpage.png')).decode('utf-8')
            })
        setthumbnail['set'] = True
        return menus
    except:
        plugin.notify('女优列表获取失败')
        return
Exemplo n.º 11
0
    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)
Exemplo n.º 12
0
def play(seasonId="", index="", Esid=""):
    season_data = SEASON_CACHE.get(seasonId)
    title = season_data["seasonDetail"]["title"]
    episode_sid = Esid
    rs = RRMJResolver()
    play_url, _ = rs.get_play(seasonId, episode_sid,
                              plugin.get_setting("quality"))
    if play_url is not None:
        add_history(seasonId, index, Esid, title)
        li = ListItem(title + index, path=play_url)
        plugin.set_resolved_url(li)
Exemplo n.º 13
0
    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')
Exemplo n.º 14
0
    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')
Exemplo n.º 15
0
    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')
Exemplo n.º 16
0
    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)
Exemplo n.º 17
0
def btsearch(enginestr, sstr, sorttype):
    if not sstr or sstr == '0':
        return
    max = int(plugin.get_setting('btmaxresult'))
    max = (max + 1) * 20
    items = []
    if enginestr != 'all' and sorttype == '-1':
        engineinfo = nova2.getengineinfo(enginestr)
        supportsort = engineinfo['support_sort']
        if len(supportsort) > 0:
            sortkeys = {
                'relevance': '相关度',
                'addtime': '创建时间',
                'size': '文件大小',
                'files': '文件数量',
                'popular': '热度',
            }
            dialog = xbmcgui.Dialog()
            sortselectlist = []
            for s in supportsort:
                sortselectlist.append(sortkeys[s])
            sorttype = dialog.select(engineinfo['name'] + '选择排序类型',
                                     sortselectlist)
            if sorttype == -1:
                return None
            sorttype = supportsort[int(sorttype)]
            #plugin.notify(sorttype)
    result = nova2.search(enginestr, sstr, sorttype, maxresult=max)
    msg = '共找到%d条磁力链' % (len(result))
    plugin.notify(msg)

    for res_dict in result:
        title = '[COLOR FF00FFFF]' + res_dict[
            'size'] + '[/COLOR]' + '[COLOR FFCCFFCC]' + res_dict[
                'date'][:10] + '[/COLOR]' + res_dict['name'].encode('UTF-8')
        filemsg = '大小:' + res_dict['size'].encode(
            'UTF-8') + '  创建时间:' + res_dict['date'].encode('UTF-8')
        listitem = ListItem(label=comm.colorize_label(title, 'bt'),
                            label2=res_dict['size'],
                            icon=None,
                            thumbnail=None,
                            path=plugin.url_for(
                                'execmagnet',
                                url=res_dict['link'].encode('UTF-8'),
                                title=title,
                                msg=filemsg))
        #listitem.set_info('picture', {'size': anySizeToBytes(res_dict['size'])})
        context_menu_items = []
        if (list == 'other'):
            titletype = title
        items.append(listitem)
    return items
Exemplo n.º 18
0
def play_movie(imdb_id, year, title):
    xbmcvfs.mkdirs(
        'special://profile/addon_data/plugin.video.search.and.play/Movies.play'
    )
    name = 'special://profile/addon_data/plugin.video.search.and.play/Movies.play/%s.strm' % (
        imdb_id)
    f = xbmcvfs.File(name, "wb")
    movie_library_url = plugin.get_setting('movie.library.url')
    number = plugin.get_setting('movie.library.number')
    if number == "0":
        meta_url = plugin.get_setting('movie.library')
        movie_library_addon = plugin.get_setting('movie.library.addon')
    elif number == "1":
        meta_url = plugin.get_setting('movie.library2')
        movie_library_addon = plugin.get_setting('movie.library2.addon')
    else:
        meta_url = plugin.get_setting('movie.library3')
        movie_library_addon = plugin.get_setting('movie.library3.addon')
    if movie_library_url == "true" and meta_url:
        if movie_library_addon:
            meta_url = re.sub('plugin://.*?/',
                              'plugin://%s/' % movie_library_addon, meta_url)
        if "%M" in meta_url:
            what = base64.b64decode(
                'aHR0cHM6Ly9hcGkudGhlbW92aWVkYi5vcmcvMy9maW5kLyVzP2FwaV9rZXk9ZDY5OTkyZWM4MTBkMGY0MTRkM2RlNGEyMjk0Yjg3MDAmbGFuZ3VhZ2U9ZW4tVVMmZXh0ZXJuYWxfc291cmNlPWltZGJfaWQ='
            )
            url = what % imdb_id
            html = requests.get(url).content
            match = re.search('"id":([0-9]*)', html)
            if match:
                id = match.group(1)
                meta_url = meta_url.replace("%M", id)
        if "%K" in meta_url:
            trakt = trakt_id(imdb_id)
            meta_url = meta_url.replace("%K", trakt)
        meta_url = meta_url.replace("%Y", year)
        meta_url = meta_url.replace("%I", imdb_id)
        meta_url = meta_url.replace("%T", urllib.quote_plus(title))

    else:
        meta_url = 'plugin://%s/movies/play/imdb/%s/library' % (
            plugin.get_setting('catchup.plugin').lower(), imdb_id)
    f.write(meta_url.encode("utf8"))
    f.close()
    item = ListItem(label=title,
                    thumbnail=get_icon_path('settings'),
                    path=meta_url)
    return plugin.set_resolved_url(item)
Exemplo n.º 19
0
def processPlaylists(playlists):
    items = []
    for playlist in playlists:
        item = ListItem()
        title = playlist['name']
        if plugin.get_setting('Show owner') == 'true':
            title += ' @' + playlist['user']['login']
        item.set_label(title)
        item.set_thumbnail(playlist['images']['large'])
        item.set_path(
            plugin.url_for('playlist',
                           playlist_id=str(playlist['playlistId'])))
        item.set_info('music', {
            'Album': playlist['name'],
            'TrackNumber': playlist['itemsCount']
        })
        items.append(item)
    return items
Exemplo n.º 20
0
def play(seasonId='', index='', Esid=''):
    season_data = SEASON_CACHE.get(seasonId).get('season')
    title = season_data['title']
    episode_sid = Esid
    play_url, _ = Meiju.get_by_sid(episode_sid, plugin.get_setting('quality'))
    if play_url is not None:
        play_url = play_url.split('|')
        stackurl = 'stack://' + ' , '.join(play_url)
        add_history(seasonId, index, Esid, title)
        li = ListItem(title + index,
                      path=stackurl,
                      thumbnail=season_data.get('cover'))
        li.set_info('video', {
            'title': title + index,
            'plot': season_data.get('brief', '')
        })

        plugin.set_resolved_url(li)
    else:
        plugin.set_resolved_url(False)
Exemplo n.º 21
0
def get_album(albumId):
    c_list = Meiju.get_album(albumId)
    for one in c_list["data"]["results"]:
        item = ListItem(
            **{
                'label': one.get("title"),
                'path': plugin.url_for("detail", seasonId=one.get("id")),
                'icon': one["cover"],
                'thumbnail': one["cover"],
            })
        item.set_info(
            "video", {
                "plot": one.get("brief", ""),
                "rating ": float(one["score"]),
                "genre": one["cat"],
                "season": one["seasonNo"]
            })
        item.set_is_playable(False)
        yield item
    plugin.set_content('TVShows')
Exemplo n.º 22
0
def watch(sid, season, episode, title, vid):
    if vid == 'None':  # Otherwise request was sent from choose_quality and url already exist
        vid, cookie = sdarot.get_final_video_and_cookie(sid, season, episode)

    if vid:
        item = ListItem(**{
            'label': u'פרק {0}'.format(episode),
            'path': vid,
            'thumbnail': POSTER_PREFIX + sid + '.jpg'
        })

        item.as_xbmc_listitem().setContentLookup(False)
        item.set_property('mimetype', 'video/mp4')
        item.set_property('type', 'movie')
        item.set_info('Video', {
                'Title': title,
                'Genre': u'פרק {0}, עונה {1}'.format(episode, season)
            })

        plugin.set_resolved_url(item)
    else:
        plugin.notify(msg='הייתה בעיה, נסו שוב', title='שגיאה', image=ICON)
Exemplo n.º 23
0
def processTracksList(tracks):
    items = []
    for track in tracks:
        item = ListItem()
        item.set_label('%s - %s' % (track['artistName'], track['trackName']))
        try:
            item.set_thumbnail(track['imageLarge'])
        except:
            pass
        item.set_path(
            plugin.url_for('play',
                           artist=track['artistName'].encode('utf-8'),
                           track=track['trackName'].encode('utf-8')))
        item.set_is_playable(True)
        try:
            item.set_info(
                'music', {
                    'Duration': track['durationSec'],
                    'Title': track['trackName'],
                    'Artist': track['artistName'],
                    'TrackNumber': track['position'],
                })
        except:
            pass

        # Support Track Downloading
        if plugin.get_setting('Download Path') != '':
            item.add_context_menu_items([
                (plugin.get_string(30007), 'XBMC.RunPlugin(' +
                 plugin.url_for('download',
                                artist=track['artistName'].encode('utf-8'),
                                track=track['trackName'].encode('utf-8')) +
                 ')')
            ])

        items.append(item)
    return items
Exemplo n.º 24
0
def episode_makeitem(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)
    img = "DefaultVideoFolder.png"
    seasonstr = ''
    try:
        eptitle, epdate, epnum = formatshow(episodename)
        eplbl = 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 = 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 = dateadded.replace(' ', '-').trim()
            eplbl += " [I][B][LIGHT]{0}[/LIGHT][/B][/I]".format(dateout)
            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_info(type='video', info_labels=infolbl)
    except:
        li = ListItem(label=episodename, label2=episodelink, icon=img, thumbnail=img, path=spath)
    return li
Exemplo n.º 25
0
def play(link, title):
    if link[0] == '/':
        link = HOST + link
    page = get_html(link)
    playurl = re.compile('a href="(http.+?)\"').findall(page)[0]

    if ('le.com' in playurl) or ('letv.com' in playurl):
        videourl = video_from_letv(playurl, m3u8=__m3u8__)
        plugin.set_resolved_url(__m3u8__)
        return

    elif 'sohu.com' in playurl:
        videourl = video_from_sohu
    elif 'qq.com' in playurl:
        videourl = video_from_qq
    elif 'iqiyi.com' in playurl:
        split = urlparse.urlsplit(playurl)
        playurl = '{scheme}://{netloc}{path}/'.format(scheme=split[0],
                                                      netloc=split[1],
                                                      path=split[2])
        videourl = video_from_iqiyi
    elif 'fun.tv' in playurl:
        videourl = video_from_funshion
    elif 'youku.com' in playurl:
        videourl = video_from_youku
    elif 'mgtv.com' in playurl:
        videourl = video_from_mgtv
    else:
        xbmcgui.Dialog().ok(plugin.addon.getAddonInfo('name'), '地址不能解析')
        return

    urls = videourl(playurl)
    stackurl = 'stack://' + ' , '.join(urls)
    li = ListItem(title, path=stackurl)
    li.set_info('video', {'title': title})
    plugin.set_resolved_url(li)
Exemplo n.º 26
0
def dbactor(sstr,sort='time',page=0):
    try:
        url = 'https://movie.douban.com/celebrity/%s/' % (sstr)
        rsp = _http(url)
        celename=celeinfo=celeimg=summary=''
        m = re.search(r"\x22nbg\x22\s+title\x3D\x22(?P<celename>.*?)\x22\s+href\x3D\x22(?P<celeimg>.*?)\x22", rsp, re.DOTALL)
        if m:
            celename = m.group("celename")
            celeimg= m.group("celeimg")
        rtxt = r'(?P<celeinfo>\x3Cli\x3E\s+\x3Cspan\x3E性别.+?)\x3C\x2Ful\x3E'
        m = re.search(rtxt, rsp, re.DOTALL)
        if m:
            celeinfo=m.group('celeinfo')
            celeinfo=re.sub(r'\x3C.*?\x3E','',celeinfo)
            celeinfo=re.sub(r'\x3A\s+','\x3A',celeinfo, re.DOTALL)
            celeinfo=celeinfo.replace(' ','')
            celeinfo=re.sub(r'\s+','\r\n',celeinfo, re.DOTALL)
            #plugin.log.error(celename)
        m = re.search(r'影人简介.*?\x22bd\x22\x3E(?P<summary>.*?)\x3C', rsp, re.DOTALL)
        if m:
            summary = m.group("summary")
        m = re.search(r'\x22all\s+hidden\x22\x3E(?P<summary>.*?)\x3C', rsp, re.DOTALL)
        if m:
            summary = m.group("summary")
        menus =[]
        menus.append({'label':'简介:[COLOR FFFF2222]%s[/COLOR]'%celename,
                    'path':  plugin.url_for('dbsummary', summary=six.ensure_binary(celename+celeinfo+summary)),
                    'thumbnail':celeimg})
        menus.append({'label':comm.colorize_label('影人图片',None,color='32FF94') ,
                    'path':  plugin.url_for('celephotos', cele=six.ensure_binary(sstr),page=0),
                    'thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'picture.png') )})
        if sort=='time':
            menus.append({'label': '按[COLOR FFFF3333]评分[/COLOR]排序',
                'path': plugin.url_for('dbactor',sstr=six.ensure_binary(sstr),sort='vote',page='0')})
        else:
            menus.append({'label': '按[COLOR FFFF3333]时间[/COLOR]排序',
                'path': plugin.url_for('dbactor',sstr=six.ensure_binary(sstr),sort='time',page='0')})
        url = 'https://movie.douban.com/celebrity/%s/movies?start=%d&format=pic&sortby=%s&' % (sstr,int(page)*10,sort)
        rsp = _http(url)
        rtxt=r'subject\x2F(?P<id>[0-9]+)\x2F.*?img\ssrc\x3D\x22(?P<imgurl>.*?)\x22.*?title\x3D\x22(?P<title>.*?)\x22.*?\x22star\s.*?span\x3E(?P<rate>.*?)\x3C\x2Fdiv'
        for sub in re.finditer(rtxt, rsp, re.DOTALL):
            rate = ''
            mrate=re.search(r'\x3Cspan\x3E(?P<rate>[\x2E0-9]+?)\x3C',sub.group('rate').strip(), re.DOTALL)
            if mrate:
                rate=mrate.group('rate')
            
            context_menu_items=[]
            context_menu_items.append(('搜索'+colorize_label(sub.group('title'), color='00FF00'), 
                'RunPlugin('+plugin.url_for('searchinit',stypes='pan,bt,db',sstr=six.ensure_binary(sub.group('title')),modify='1',otherargs='{}')+')',))
                
            listitem=ListItem(label='%s[[COLOR FFFF3333]%s[/COLOR]]'%(sub.group('title'),rate),
                    thumbnail= sub.group('imgurl'), 
                    path = plugin.url_for('dbsubject', subject=sub.group('id')),)
                    
            if len(context_menu_items)>0 and listitem!=None:
                listitem.add_context_menu_items(context_menu_items)
                menus.append(listitem)
        
        m = re.search("\x22count\x22.*?(?P<count>[0-9]+)", rsp, re.DOTALL)
        if m:
            count =int( m.group('count'))
            totalpage=int((count-1)/30)
            if int(page)<totalpage:
                menus.append({'label':'下一页','thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'nextpage.png') ),
                        'path':  plugin.url_for('dbactor',sstr=six.ensure_binary(sstr),sort=sort,page=int(page)+1)})
        plugin.set_content('images')
        setthumbnail['set']=True
        return menus
        return menus
        
    except Exception as e:
        plugin.notify(str(e))
        xbmc.log(msg=format_exc(),level=xbmc.LOGERROR)
        return
Exemplo n.º 27
0
def dbmovie(tags='',sort='U',page=0,addtag=0,scorerange='',year_range=''):
    sorttypes=[('近期热门','U'),('标记最多','T'),('评分最高','S'),('最新上映','R')]
    tags=six.ensure_text(tags)
    if tags=='0': tags=''
    if sort=='0': sort='U'
    if scorerange=='0': scorerange='0,10'
    curyear=int(time.strftime('%Y',time.localtime(time.time())))
    if year_range=='0': year_range='%d,%d'%(1900,curyear)
    tag=''
    if int(addtag)==1:
        tag=dbgettag()
    
    taglist=[]
    if tags:
        taglist.extend(tags.split(','))
    if tag:
        taglist.append(six.ensure_text(tag))
    #plugin.log.error(str(taglist))
    #if len(taglist)<1: return;
    tags=''
    for t in taglist:
        tags+=t.strip()+','
    tags=tags.strip(' ,')
    
    if sort=='set':
        dialog = xbmcgui.Dialog()
        sel = dialog.select('排序类型', [q[0] for q in sorttypes])
        if sel==-1: return
        sort=sorttypes[sel][1]
    sorttype=''
    for q in sorttypes:
        if sort==q[1]:
            sorttype=q[0]
            break
    if scorerange=='set':
        sellow=0
        dialog = xbmcgui.Dialog()
        ranges=['0','1','2','3','4','5','6','7','8','9','10']
        sellow = dialog.select('最低评分', ranges[:10])
        if sellow==-1: return
        if sellow>=9:
            scorerange='9,10'
        else:
            selhigh = dialog.select('最高评分', ranges[sellow+1:])
            if selhigh==-1: return
            scorerange='%d,%d'%(sellow,sellow+selhigh+1)
    if year_range=='set':
        sellow=0
        dialog = xbmcgui.Dialog()
        ranges=['2010','2005','2000','1995','1990','1980','1970','1960','1900']
        
        for intyear in range(2011,curyear+1):
            ranges.insert(0, str(intyear))
        sellow = dialog.select('年代起', ranges)
        if sellow==-1: return
        if sellow==0:
            year_range='%d,%d'%(curyear,curyear)
        else:
            yearlow=ranges[sellow]
            ranges=ranges[:sellow+1]
            selhigh = dialog.select('年代止', ranges)
            if selhigh==-1: return
            yearhigh=ranges[selhigh]
            year_range='%s,%s'%(yearlow,yearhigh)
    
    #url='https://movie.douban.com/j/search_subjects?type=movie&tag=%s&sort=%s&page_limit=20&page_start=%s'%(tags.replace(' ','%20'),sort,str(page))
    url='https://movie.douban.com/j/new_search_subjects?'+parse.urlencode(encode_obj({'tags':tags,'sort':sort,'range':scorerange,'genres':'','start':str(int(page)*20),'year_range':year_range}))
   
    try:
        rsp = _http(url)
        minfo = json.loads(rsp[rsp.index('{'):])
        menus =[]
        for m in minfo['data']:
            context_menu_items=[]
            context_menu_items.append(('搜索'+colorize_label(m['title'], color='00FF00'), 
                'RunPlugin('+plugin.url_for('searchinit',stypes='pan,bt,db',sstr=six.ensure_binary(m['title']),modify='1',otherargs='{}')+')',))
                
            listitem=ListItem(label='%s[[COLOR FFFF3333]%s[/COLOR]]'%(m['title'],m['rate']),
                    thumbnail= m['cover'], 
                    path= plugin.url_for('dbsubject', subject=m['id']),)
                    
            if len(context_menu_items)>0 and listitem!=None:
                listitem.add_context_menu_items(context_menu_items)
                menus.append(listitem)
            
        if len(menus)<=1: 
            plugin.notify('豆瓣标签:无记录')
            return
        tags2='0'
        if tags:
            tags2=tags
        if len(menus)==20:
            menus.append({'label': '下一(第%d)页'%(int(page)+2),
                'path': plugin.url_for('dbmovie',tags=six.ensure_binary(tags2),sort=sort,page=int(page)+1,addtag='0',scorerange=scorerange,year_range=year_range),
                'thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'nextpage.png') )})
        menus.insert(0, {'label': '标签:[COLOR FFFF3333]%s[/COLOR]'%(tags),
            'path': plugin.url_for('dbmovie',tags=six.ensure_binary(tags2),sort=sort,page='0',addtag='1',scorerange=scorerange,year_range=year_range)})
        menus.insert(0, {'label': '年代:[COLOR FFFF3333]%s[/COLOR]'%(year_range),
            'path': plugin.url_for('dbmovie',tags=six.ensure_binary(tags2),sort=sort,page='0',addtag='0',scorerange=scorerange,year_range='set')})
        menus.insert(0, {'label': '评分:[COLOR FFFF3333]%s[/COLOR]'%(scorerange),
            'path': plugin.url_for('dbmovie',tags=six.ensure_binary(tags2),sort=sort,page='0',addtag='0',scorerange='set',year_range=year_range)})
        
        menus.insert(0, {'label': '排序:[COLOR FFFF3333]%s[/COLOR]'%(sorttype),
            'path': plugin.url_for('dbmovie',tags=six.ensure_binary(tags2),sort='set',page='0',addtag='0',scorerange=scorerange,year_range=year_range)})
        plugin.set_content('movies')
        setthumbnail['set']=True
        return menus
    except Exception as e:
        xbmc.log(msg=format_exc(),level=xbmc.LOGERROR)
        plugin.notify(str(e))
        return
Exemplo n.º 28
0
def dbsubject(subject):
	menus=[]
	try:
		rsp = _http('https://api.douban.com/v2/movie/subject/'+subject+'?apikey=0b2bdeda43b5688921839c8ecb20399b',referer='https://www.douban.com/link2/')
		
		#plugin.notify('ok')
		rsp=rsp[rsp.index('{'):]
		#plugin.log.error(rsp)
		minfo = json.loads(rsp[rsp.index('{'):])
		
		year=minfo['year']
		
		comm.moviepoint['group']='db'
		comm.moviepoint['title']=minfo['title']
		comm.moviepoint['thumbnail']=minfo['images']['large'].decode('utf-8')
		
		#summary =''
		#for s,i in enumerate(re.findall(ur'([^\n]{1,28})', minfo['summary'])):
		#	summary=summary+i+'\r\n'
		
		
		#xbmc.log(plugin.url_for('dbsummary', summary=minfo['summary'].encode('utf-8')))
		menus.append({'label':'[COLOR FFFF2222]简介:[/COLOR]%s'%minfo['summary'].encode('utf-8'),
					'path':  plugin.url_for('dbsummary', summary=minfo['summary'].encode('utf-8')),
					'thumbnail':minfo['images']['large'].decode('utf-8')})
		clipandphotos['clips']=[]
		clipandphotos['photos']=[]
		if minfo.has_key('clips'):
			clipandphotos['clips'].extend(minfo['clips'])
		
		if minfo.has_key('bloopers'):
			clipandphotos['clips'].extend(minfo['bloopers'])
		
		if minfo.has_key('photos'):
			clipandphotos['photos'].extend(minfo['photos'])
		

		menus.append({'label':comm.colorize_label('预告片和图片',None,color='32FF94') ,
					'path':  plugin.url_for('dbtrailer'),
					'thumbnail':xbmc.translatePath( os.path.join( __cwd__, 'movies.png') ).decode('utf-8')})
		strlist=[]
		strlist.append(minfo['title'])
		strlist.append(minfo['title']+' '+year)
		if minfo.has_key('original_title'):
			#strlist.append(minfo['original_title'])
			strlist.append(minfo['original_title']+' '+year)
		if minfo.has_key('aka'):
			for aka in minfo['aka']:
				if aka.find('(')>=0 and  aka.find(')')>=0:
					aka=aka.replace(aka[ aka.find('('):aka.find(')')+1],'')
				#strlist.append(aka)
				strlist.append(aka+' '+year)
		#去重
		news_strlist = list(set(strlist))
		news_strlist.sort(key=strlist.index)
		
		for sstr in news_strlist:
			context_menu_items=[]
			context_menu_items.append(('搜索'+colorize_label(sstr.encode('UTF-8'), color='00FF00'), 
				'RunPlugin('+plugin.url_for('searchinit',stypes='pan,bt',sstr=sstr.encode('UTF-8'),modify='1',otherargs='{}')+')',))
			listitem=ListItem(label='BT:[COLOR FF00FFFF]%s[/COLOR]' % (sstr.encode('utf-8')),
				label2=None, icon=None, thumbnail=xbmc.translatePath( os.path.join( __cwd__, 'magnet.jpg') ).decode('utf-8'),
				path=plugin.url_for('btsearchInit', sstr=sstr.encode('utf-8'), modify='0',ext=comm.moviepoint))
			if len(context_menu_items)>0 and listitem!=None:
				listitem.add_context_menu_items(context_menu_items,False)
				menus.append(listitem)
			
		if minfo.has_key('casts'):
			for cast in minfo['casts']:
				thumb=xbmc.translatePath( os.path.join( __cwd__, 'guest.png') ).decode('utf-8')
				if cast['avatars']:
					if cast['avatars']['medium']:
						thumb=cast['avatars']['medium']
				castname=cast['name'].encode('utf-8')
				
				menus.append({'label': '演员:[COLOR FFFF66AA]%s[/COLOR]' % (castname),
						'path':  plugin.url_for('dbactor', sstr=castname, page=0),
						'context_menu':[('搜索'+colorize_label(castname.encode('UTF-8'), color='00FF00'), 
							'RunPlugin('+plugin.url_for('searchinit',stypes='pan,bt,db',sstr=castname.encode('UTF-8'),modify='1',otherargs='{}')+')',)],
						'thumbnail':thumb})
		if minfo.has_key('directors'):
			for director in minfo['directors']:
				thumb=xbmc.translatePath( os.path.join( __cwd__, 'guest.png') ).decode('utf-8')
				if director['avatars']:
					if director['avatars']['medium']:
						thumb=director['avatars']['medium']
				directorname=director['name'].encode('utf-8')
				menus.append({'label': '导演:[COLOR FFFFAA66]%s[/COLOR]' % (directorname),
						'path':  plugin.url_for('dbactor', sstr=directorname, page=0),
						'context_menu':[('搜索'+colorize_label(directorname.encode('UTF-8'), color='00FF00'), 
							'RunPlugin('+plugin.url_for('searchinit',stypes='pan,bt,db',sstr=directorname.encode('UTF-8'),modify='1',otherargs='{}')+')',)],
						'thumbnail':thumb})
		if minfo.has_key('year'):
			menus.append({'label': '年代:[COLOR FF00AAFF]%s[/COLOR]' % (minfo['year']),
					'path':  plugin.url_for('dbmovie',tags=minfo['year'],sort='U',page='0',addtag='0',scorerange='0',year_range='0')})
		if minfo.has_key('genres'):
			for genres in minfo['genres']:
				menus.append({'label': '类型:[COLOR FF00AAFF]%s[/COLOR]' % (str(genres)),
						'path':  plugin.url_for('dbmovie',tags=str(genres),sort='U',page='0',addtag='0',scorerange='0',year_range='0')})
		if minfo.has_key('countries'):
			for country in minfo['countries']:
				menus.append({'label': '国家:[COLOR FF00AAFF]%s[/COLOR]' % (str(country)),
						'path':  plugin.url_for('dbmovie',tags=str(country),sort='U',page='0',addtag='0',scorerange='0',year_range='0')})
		if minfo.has_key('tags'):
			for tag in minfo['tags']:
				menus.append({'label': '标签:[COLOR FF00AAFF]%s[/COLOR]' % (str(tag)),
						'path':  plugin.url_for('dbmovie',tags=str(tag),sort='U',page='0',addtag='0',scorerange='0',year_range='0')})
		'''
		rsp = _http('https://movie.douban.com/subject/'+subject+'/',referer='https://www.douban.com/link2/')
		for match in re.finditer('[\x22\x27]\x2Ftag\x2F(?P<tag>.*?)[\x22\x27]', rsp, re.DOTALL | re.IGNORECASE):
			menus.append({'label': '标签:[COLOR FF00AAFF]%s[/COLOR]' % (match.group('tag')),
					'path':  plugin.url_for('dbmovie',tags=match.group('tag'),sort='U',page='0',addtag='0',scorerange='0',year_range='0'),
					'thumbnail':thumb})
		'''
		return menus
	except Exception,e:
		plugin.log.error(str(e))
		return
Exemplo n.º 29
0
def dbsubject(subject):
    menus=[]
    try:
        rsp = _http('https://movie.douban.com/subject/'+subject+'/',referer='https://www.douban.com/link2/')

        #plugin.log.error(rsp)
        year=title=title2=thumb=summary=''
        
        m = re.search(r"title\x3E\s*(?P<title>.*?)\s*\x3C\x2Ftitle", rsp, re.DOTALL)
        if m:
            title = m.group("title")
            title=title[0:title.index('(')].strip()
            
        rtxt = r'dale_movie_subject_top_icon.*?itemreviewed\x22\x3E(?P<title>.*?)\x3C.*?\x22year\x22\x3E(?P<year>.*?)\x3C.*?mainpic.*?img\s+src\x3D\x22(?P<thumb>.*?)\x22'
        m = re.search(rtxt, rsp, re.DOTALL)
        
        if m:
            year=m.group('year').strip(')(')
            title2=html_parser.HTMLParser().unescape(m.group('title'))
            title2=title2.replace(title,'').strip()
            thumb=m.group('thumb')
            
        rtxt=r'summary.*?\x3E\s*(?P<summary>.*?)\s*\x3C'
        m = re.search(rtxt, rsp, re.DOTALL)
        if m:
            summary=m.group('summary')
        
        rtxt=r'div\s+id\x3D\x22info\x22\x3E\s+(?P<info>.*?)\s+\x3C\x2Fdiv'
        m = re.search(rtxt,rsp, re.DOTALL)
        genres=[]
        areas=[]
        names=[]
       
        if m:
            info=m.group('info')
            m = re.search(r'类型.*?(?P<strs>\x3Cspan.*?span\x3E\s*)\x3Cbr', info, re.DOTALL)
            if m:
                strs = m.group('strs')
                for m in re.finditer("\x3E(?P<gen>[^\x3E\x3C]+?)\x3C\x2Fspan", strs, re.DOTALL):
                    genres.append(m.group('gen'))
            m = re.search(r'制片国家.*?span\x3E\s*(?P<strs>.*?)\x3Cbr', info, re.DOTALL)
            if m:
                strs = m.group('strs')
                for area in strs.split('/'):
                    areas.append(area.strip())
            m = re.search(r'又名.*?span\x3E\s*(?P<strs>.*?)\x3Cbr', info, re.DOTALL)
            if m:
                strs = html_parser.HTMLParser().unescape(m.group('strs'))
                for othtitle in strs.split('/'):
                    names.append(othtitle.strip())
        celes=[]
                    
        rtxt=r"avatar[^\n]*?background\x2Dimage[^\n]*?url\x28(?P<img>[^\x2C\s]*?)\x29\x22\x3E.*?celebrity\x2F(?P<id>[0-9]+)\x2F.*?name\x22\x3E(?P<name>.*?)\x3C\x2Fa\x3E.*?title\x3D\x22(?P<role>.*?)\x22\x3E"
        for m in re.finditer(rtxt, rsp, re.DOTALL):
             celes.append({'id':m.group('id'),'name':m.group('name'),'img':m.group('img'),'role':m.group('role'),})
             
        tags=[]
        m = re.search("\x22tags-body\x22\x3E.*?\x3C\x2Fdiv\x3E", rsp, re.DOTALL)
        if m:
            tagsg = m.group()
            for m in re.finditer("\x2Ftag\x2F.*?\x3E(?P<tag>.*?)\x3C", tagsg, re.DOTALL):
                tags.append(m.group('tag'))
        
        comm.moviepoint['group']='db'
        comm.moviepoint['title']=title
        comm.moviepoint['thumbnail']=thumb

        menus.append({'label':'[COLOR FFFF2222]简介:[/COLOR]%s'%summary,
                    'path':  plugin.url_for('dbsummary', summary=six.ensure_binary(summary)),
                    'thumbnail':thumb})

        menus.append({'label':comm.colorize_label('预告片',None,color='32FF94') ,
                    'path':  plugin.url_for('dbclips', subject=subject),
                    'thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'movies.png') )})
        menus.append({'label':comm.colorize_label('剧照',None,color='32FF94') ,
                    'path':  plugin.url_for('dbphotos', subject=subject,pictype='S',page=0),
                    'thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'picture.png') )})
        strlist=[]
        strlist.append(title)
        strlist.append(title+' '+year)
        if title2!='':
            strlist.append(title2+' '+year)
        for aka in names:
            if aka.find('(')>=0 and  aka.find(')')>=0:
                aka=aka.replace(aka[ aka.find('('):aka.find(')')+1],'')
            strlist.append(aka+' '+year)
        #去重
        news_strlist = list(set(strlist))
        news_strlist.sort(key=strlist.index)
        
        for sstr in news_strlist:
            '''
            context_menu_items=[]
            context_menu_items.append(('搜索'+colorize_label(sstr, color='00FF00'), 
                'RunPlugin('+plugin.url_for('searchinit',stypes='pan,bt',sstr=six.ensure_binary(sstr),modify='1',otherargs='{}')+')',))
            listitem=ListItem(label='BT:[COLOR FF00FFFF]%s[/COLOR]' % (six.ensure_text(sstr)),
                label2=None, icon=None,
                thumbnail=xbmc.translatePath( os.path.join( IMAGES_PATH, 'magnet.png') ),
                path=plugin.url_for('btsearchInit', sstr=six.ensure_binary(sstr), modify='0',ext=comm.moviepoint))
            if len(context_menu_items)>0 and listitem!=None:
                listitem.add_context_menu_items(context_menu_items)
                menus.append(listitem)
            '''
            menus.append(ListItem(label='搜索:[COLOR FF00FFFF]%s[/COLOR]' % (six.ensure_text(sstr)),
                label2=None, icon=None,
                thumbnail=xbmc.translatePath( os.path.join( IMAGES_PATH, 'disksearch.png') ),
                path=plugin.url_for('searchinit',stypes='pan,bt',sstr=six.ensure_binary(sstr),modify='1',otherargs='{}')))

        
        for cast in celes:
            thumb=cast['img']
            cast['name']+' '+cast['role']
            
            menus.append({'label': '[COLOR FFFF66AA]%s[/COLOR]%s' % (cast['name'],cast['role']),
                    'path':  plugin.url_for('dbactor', sstr=six.ensure_binary(cast['id']),sort='time',page=0),
                    'context_menu':[('搜索'+colorize_label(cast['name'], color='00FF00'), 
                        'RunPlugin('+plugin.url_for('searchinit',stypes='pan,bt,db',sstr=six.ensure_binary(cast['name']),modify='1',otherargs='{}')+')',)],
                    'thumbnail':thumb})
        
        menus.append({'label': '年代:[COLOR FF00AAFF]%s[/COLOR]' % (year),'thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'tag.png') ),
                    'path':  plugin.url_for('dbmovie',tags=six.ensure_binary(year),sort='U',page='0',addtag='0',scorerange='0',year_range='0')})
        for genre in genres:
            menus.append({'label': '类型:[COLOR FF00AAFF]%s[/COLOR]' % (genre),'thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'tag.png') ),
                    'path':  plugin.url_for('dbmovie',tags=six.ensure_binary(genre),sort='U',page='0',addtag='0',scorerange='0',year_range='0')})
        for area in areas:
            menus.append({'label': '地区:[COLOR FF00AAFF]%s[/COLOR]' % (area),'thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'tag.png') ),
                    'path':  plugin.url_for('dbmovie',tags=six.ensure_binary(area),sort='U',page='0',addtag='0',scorerange='0',year_range='0')})
        for tag in tags:
            menus.append({'label': '标签:[COLOR FF00AAFF]%s[/COLOR]' % (tag),'thumbnail':xbmc.translatePath( os.path.join( IMAGES_PATH, 'tag.png') ),
                    'path':  plugin.url_for('dbmovie',tags=six.ensure_binary(tag),sort='U',page='0',addtag='0',scorerange='0',year_range='0')})
        '''
        rsp = _http('https://movie.douban.com/subject/'+subject+'/',referer='https://www.douban.com/link2/')
        for match in re.finditer('[\x22\x27]\x2Ftag\x2F(?P<tag>.*?)[\x22\x27]', rsp, re.DOTALL | re.IGNORECASE):
            menus.append({'label': '标签:[COLOR FF00AAFF]%s[/COLOR]' % (match.group('tag')),
                    'path':  plugin.url_for('dbmovie',tags=match.group('tag'),sort='U',page='0',addtag='0',scorerange='0',year_range='0'),
                    'thumbnail':thumb})
        '''
        return menus
    except Exception as e:
        xbmc.log(msg=format_exc(),level=xbmc.LOGERROR)
        plugin.log.error(str(e))
        return
Exemplo n.º 30
0
 def test_set_info(self):
     with patch.object(xbmcgui.ListItem, 'setInfo') as mock_setInfo:
         item = ListItem()
         item.set_info('video', {'title': '300'})
     mock_setInfo.assert_called_with('video', {'title': '300'})