Как я могу добавить локальный файл в аддон Kodi?

Как я могу добавить локальный файл в аддон Kodi? В следующем примере интернет-файл (url='http://...') работает. А вот локальный файл (url='file://...') - нет.

import xbmc
import xbmcgui
import xbmcplugin
import xbmcaddon
import xbmcvfs
import sys
addon_handle = int(sys.argv[1])
xbmcplugin.setContent(addon_handle, 'songs')

#this works
xbmcplugin.addDirectoryItem(handle=addon_handle, url='http://www.noiseaddicts.com/samples_1w72b820/2537.mp3', listitem=xbmcgui.ListItem('internet_file'))

#this do not work
xbmcplugin.addDirectoryItem(handle=addon_handle, url='file://media/usb0/music/bn/local_file.mp3', listitem=xbmcgui.ListItem('local_file'))

xbmcplugin.endOfDirectory(addon_handle)

person wolfrevo    schedule 26.09.2016    source источник


Ответы (2)


Это должен быть абсолютный путь в вашей файловой системе без префиксов, например '/foo/bar/spam.mp4' (*nix) или 'c:\\foo\\bar\\spam.mp4' (Win). Я думаю, сетевые файловые системы тоже будут работать, и для них нужны префиксы типа smb:// или nfs://`, но не для локальных файлов.

person Roman Miroshnychenko    schedule 29.09.2016
comment
ваш ответ правильный. поэтому проголосовал. Тем не менее, это не решит проблему в аддоне, который должен работать в разных файловых системах (linux, win и т.д.). - person wolfrevo; 30.09.2016
comment
Ваш комментарий не имеет смысла. Путь к локальному файлу всегда будет в файловой системе, в которой находится этот файл. Вам нужно каким-то образом получить этот путь, например, просканировав какую-нибудь директорию с os.listdir(). Жестко закодированный путь не будет работать везде, потому что это просто невозможно. Как вы можете гарантировать, что файл находится в одном и том же месте на каждой машине, на которой будет запускаться ваш аддон? Это не говоря уже о том, что совместимости с разными файловыми системами в вашем изначальном вопросе не было. - person Roman Miroshnychenko; 01.10.2016
comment
Для моих целей это имеет смысл, потому что я хочу, чтобы аддон работал в разных файловых системах. И, к счастью, разработчики Kodi решили эту проблему, внедрив протокол special://, который делает возможным то, что кажется невозможным. Смотрите мой ответ. ИМХО совместимость с разными файловыми системами неявно требуется аддоном. Извините, если я явно не выразился. Во всяком случае: спасибо за ваш ценный ответ и ваши усилия. - person wolfrevo; 02.10.2016

После некоторого поиска я нашел протокол Kodi special://: http://kodi.wiki/view/Special_protocol, который Цитирую здесь:

«Специальный протокол» — это решение Kodi для каталогов, зависящих от платформы. Обычным именам каталогов назначается специальный путь: // [имя], который передается внутри Kodi, а затем преобразуется в путь, специфичный для платформы, до того, как операционная система увидит его. Это помогает сохранить большую часть неразберихи с платформой централизованно в коде.

Используя протокол special://, следующий код сделает это:

xbmcplugin.addDirectoryItem(handle=addon_handle, 
                            url='special://home/bn/local_file.mp3',
                            listitem=xbmcgui.ListItem('local_file'))
person wolfrevo    schedule 02.10.2016