【问题标题】:Kodi addons : how to correctly set an URL using xbmcplugin.addDirectoryItems and xbmcgui.ListItem?Kodi 插件:如何使用 xbmcplugin.addDirectoryItems 和 xbmcgui.ListItem 正确设置 URL?
【发布时间】:2021-08-02 15:51:58
【问题描述】:

我正在尝试更新 Kodi 19(和 Python3)的插件。 但!地狱!他们的文档一团糟,当你在互联网上搜索时,很多代码已经过时了。 我无法理解如何正确使用 xbmcplugin.addDirectoryItems 创建包含项目的虚拟文件夹。

这是我的(简化的)代码:

这是我的 KODI 菜单功能

def menu_live():

  #this is were I get my datas (from internet)
  datas = api.get_live_videos()
  
  listing = datas_to_list(datas)

  sortable_by = (xbmcplugin.SORT_METHOD_DATE,
                 xbmcplugin.SORT_METHOD_DURATION)

  xbmcplugin.addDirectoryItems(common.plugin.handle, listing, len(listing))
  xbmcplugin.addSortMethod(common.plugin.handle, xbmcplugin.SORT_METHOD_LABEL)
  xbmcplugin.endOfDirectory(common.plugin.handle)

这会为虚拟文件夹构建一个项目列表

def datas_to_list(datas):
    list_items = []

    if datas and len(datas):
        for data in datas:
            li = data_to_listitem(data)
            url = li.getPath()
            list_items.append((url, li, True))

    return list_items

这将为我们的列表创建一个xbmcgui.ListItem

def data_to_listitem(data):

    #here I parse my data to build a xbmcgui.ListItem
    label = ...
    url = ...
    ...

    
    list_item = xbmcgui.ListItem(label)
    list_item.setPath(url)

    return list_item

我不太了解如何与媒体网址进行交互。 似乎可以在 xbmcgui.ListItem 中使用

list_item.setPath(url)

这对我来说似乎没问题(一个 url 设置为项目本身)

不过,好像还需要在将项目添加到列表时设置URL,

li = data_to_listitem(data)
list_items.append((url, li, True))

这看起来很奇怪,因为这意味着您必须知道构建项目的函数之外的 URL。 所以目前,我的解决方法是

li = data_to_listitem(data)
url = li.getPath() #I retrieve the URL defined in the above function
list_items.append((url, li, True))

该代码有效。但问题是:如果我可以使用setPath() 在 ListItem 上定义一个 URL,那么在将 ListItem 附加到我的列表 list_items.append((url, li, True)) 时为什么还要填写该 URL?

非常感谢!

【问题讨论】:

    标签: python-3.x add-on xbmc kodi


    【解决方案1】:

    我不确定您的问题是什么。但是视频/音频插件开发在这些指南中得到了详尽的解释:https://kodi.wiki/view/HOW-TO:Audio_addonhttps://kodi.wiki/view/Audio-video_add-on_tutorialhttps://kodi.wiki/view/HOW-TO:Video_addon。看看它们,尤其是视频附加指南(如 Roman 所指出的),并尝试适应您的情况。

    编辑

    但问题是:如果我可以使用 setPath() 在 ListItem 上定义一个 URL,那么为什么在附加 将 ListItem 添加到我的列表中?

    我远非专家,但根据我的理解和https://kodi.wiki/view/HOW-TO:Video_addon 教程的上下文,网址在

      list_items.append((url, li, is_folder))
    

    用于将您的插件路由到您的播放功能,以及将参数传递给它(例如视频 url 和可能需要播放的其他有用的东西)。也就是这里传递的列表项不需要设置路径。

      ListItem.setPath(video_url)
    

    另一方面,用于解析视频网址并在您选择项目后开始播放。

    【讨论】:

    • 对于视频插件这篇文章更好:kodi.wiki/view/HOW-TO:Video_addon
    • 是的,你是对的,我的意思是链接到那个。我什至不知道有一个音频视频教程。 :)
    猜你喜欢
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 2012-08-01
    相关资源
    最近更新 更多