init
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
-- chapterskip.lua
|
||||
--
|
||||
-- Ain't Nobody Got Time for That
|
||||
--
|
||||
-- This script skips chapters based on their title.
|
||||
|
||||
local categories = {
|
||||
prologue = "^[Pp]rologue/^[Ii]ntro",
|
||||
opening = "^OP/ OP$/^[Oo]pening/[Oo]pening$",
|
||||
ending = "^ED/ ED$/^[Ee]nding/[Ee]nding$",
|
||||
credits = "^[Cc]redits/[Cc]redits$",
|
||||
preview = "[Pp]review$"
|
||||
}
|
||||
|
||||
local options = {
|
||||
enabled = false,
|
||||
skip_once = true,
|
||||
categories = "",
|
||||
skip = ""
|
||||
}
|
||||
|
||||
mp.options = require "mp.options"
|
||||
|
||||
function matches(i, title)
|
||||
for category in string.gmatch(options.skip, " *([^;]*[^; ]) *") do
|
||||
if categories[category:lower()] then
|
||||
if string.find(category:lower(), "^idx%-") == nil then
|
||||
if title then
|
||||
for pattern in string.gmatch(categories[category:lower()], "([^/]+)") do
|
||||
if string.match(title, pattern) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
for pattern in string.gmatch(categories[category:lower()], "([^/]+)") do
|
||||
if tonumber(pattern) == i then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local skipped = {}
|
||||
local parsed = {}
|
||||
|
||||
local function toggle_chapterskip()
|
||||
options.enabled = not options.enabled
|
||||
end
|
||||
|
||||
function chapterskip(_, current)
|
||||
mp.options.read_options(options, "chapterskip")
|
||||
if not options.enabled then return end
|
||||
for category in string.gmatch(options.categories, "([^;]+)") do
|
||||
name, patterns = string.match(category, " *([^+>]*[^+> ]) *[+>](.*)")
|
||||
if name then
|
||||
categories[name:lower()] = patterns
|
||||
elseif not parsed[category] then
|
||||
mp.msg.warn("Improper category definition: " .. category)
|
||||
end
|
||||
parsed[category] = true
|
||||
end
|
||||
local chapters = mp.get_property_native("chapter-list")
|
||||
local skip = false
|
||||
for i, chapter in ipairs(chapters) do
|
||||
if (not options.skip_once or not skipped[i]) and matches(i, chapter.title) then
|
||||
if i == current + 1 or skip == i - 1 then
|
||||
if skip then
|
||||
skipped[skip] = true
|
||||
end
|
||||
skip = i
|
||||
end
|
||||
elseif skip then
|
||||
mp.set_property("time-pos", chapter.time)
|
||||
skipped[skip] = true
|
||||
return
|
||||
end
|
||||
end
|
||||
if skip then
|
||||
if mp.get_property_native("playlist-count") == mp.get_property_native("playlist-pos-1") then
|
||||
return mp.set_property("time-pos", mp.get_property_native("duration"))
|
||||
end
|
||||
mp.commandv("playlist-next")
|
||||
end
|
||||
end
|
||||
|
||||
mp.observe_property("chapter", "number", chapterskip)
|
||||
mp.register_event("file-loaded", function() skipped = {} end)
|
||||
mp.register_script_message("chapter-skip", toggle_chapterskip)
|
||||
Reference in New Issue
Block a user