55 lines
1.5 KiB
Lua
55 lines
1.5 KiB
Lua
--[[
|
|
An addon for mpv-file-browser which adds support for m3u playlists
|
|
|
|
If the first entry of a playlist isn't working it is because some playlists are created with random invisible unicode in the first line
|
|
Vim makes it easy to detect these
|
|
|
|
This addon requires that my API mpv-read-file be available in ~~/script-modules/
|
|
https://github.com/CogentRedTester/mpv-read-file
|
|
]]--
|
|
|
|
local rf = require "read-file"
|
|
|
|
local m3u = {
|
|
priority = 100,
|
|
api_version = "1.0.0",
|
|
name = "m3u"
|
|
}
|
|
|
|
local full_paths = {}
|
|
|
|
function m3u:setup()
|
|
self.register_parseable_extension("m3u")
|
|
self.register_parseable_extension("m3u8")
|
|
end
|
|
|
|
function m3u:can_parse(directory)
|
|
return directory:find("m3u8?/?$")
|
|
end
|
|
|
|
function m3u:parse(directory)
|
|
directory = directory:gsub("/$", "")
|
|
local list = {}
|
|
|
|
local path = full_paths[ directory ] or directory
|
|
local playlist = rf.get_file_handler( path )
|
|
|
|
--if we can't read the path then stop here
|
|
if not playlist then return {}, {sorted = true, filtered = true, empty_text = "Could not read filepath"} end
|
|
|
|
local parent = self.fix_path(path:match("^(.+/[^/]+)/"), true)
|
|
|
|
local lines = playlist:read("*a")
|
|
|
|
for item in lines:gmatch("[^%c]+") do
|
|
item = self.fix_path(item)
|
|
local fullpath = self.join_path(parent, item)
|
|
|
|
local name = ( self.get_protocol(item) and item or fullpath:match("([^/]+)/?$") )
|
|
table.insert(list, {name = name, path = fullpath, type = "file"})
|
|
end
|
|
return list, {filtered = true, sorted = true}
|
|
end
|
|
|
|
return m3u
|