Mpv/autoloadtxt.lua
From Gentoo Wiki
< Mpv
Jump to:navigation
Jump to:search
-- Copied from https://gist.github.com/wiiaboo/a8f355905aaa2da5f11f5202d9a0d099
-- See https://github.com/mpv-player/mpv/issues/4144 for more info.
-- autoloadtxt.lua
-- autoload .txt subtitles respecting --sub-auto setting
-- hacked from autoload.lua
local msg = require 'mp.msg'
local options = require 'mp.options'
local utils = require 'mp.utils'
o = { disabled = false }
options.read_options(o)
function split_ext(path)
return string.match(path, "^(.+)%.([^%.]+)$")
end
table.filter = function(t, iter)
for i = #t, 1, -1 do
if not iter(t[i]) then
table.remove(t, i)
end
end
end
function find_and_add_entries()
local path = mp.get_property("path", "")
local dir, filename = utils.split_path(path)
local name, ext = string.match(filename, "(.+)%.([^%.]+)$")
local fuzz = mp.get_property("sub-auto", "no")
if o.disabled or #dir == 0 or fuzz == "no" then
return
end
local files = utils.readdir(dir, "files")
if not files then
return
end
local logdir, logfile = utils.split_path(mp.get_property("log-file", ""))
table.filter(files, function (v, k)
local sname, sext = split_ext(v:lower())
local name = name:lower()
if fuzz=="all" and logfile and
logdir:lower()==dir:lower() and
logfile:lower()==v then
return false
end
return (sext:lower() == "txt") and
(
(fuzz=="exact" and sname==name) or
(fuzz=="fuzzy" and sname:find(name)==1) or
fuzz=="all"
)
end)
table.sort(files, function (a, b)
local len = string.len(a) - string.len(b)
if len ~= 0 then -- case for ordering filename ending with such as X.Y.Z
local _, ext = split_ext(a)
local ext = string.len(ext) + 1
return string.sub(a, 1, -ext) < string.sub(b, 1, -ext)
end
return string.lower(a) < string.lower(b)
end)
msg.verbose("candidates:", utils.to_string(files))
if dir == "." then
dir = ""
end
for i = 1,#files do
local subpath = files[i]
local subname = split_ext(subpath)
if subname:lower() == name:lower() then
mp.commandv('sub-add', utils.join_path(dir,subpath), 'select')
elseif fuzz == "all" or
(fuzz == "fuzzy" and subname:lower():find(name:lower()) == 1) then
mp.commandv('sub-add', utils.join_path(dir,subpath), 'auto')
end
end
end
mp.register_event("start-file", find_and_add_entries)