jjlj
This commit is contained in:
121
LUA/main.lua
Normal file
121
LUA/main.lua
Normal file
@@ -0,0 +1,121 @@
|
||||
local mp = require 'mp'
|
||||
local utils = require 'mp.utils'
|
||||
local msg = require 'mp.msg'
|
||||
|
||||
local M = {}
|
||||
|
||||
-- Configuration
|
||||
local opts = {
|
||||
python_path = "python",
|
||||
cli_path = nil -- Will be auto-detected if nil
|
||||
}
|
||||
|
||||
-- Detect CLI path
|
||||
local script_dir = mp.get_script_directory()
|
||||
if not opts.cli_path then
|
||||
-- Assuming the structure is repo/LUA/script.lua and repo/CLI.py
|
||||
-- We need to go up one level
|
||||
local parent_dir = script_dir:match("(.*)[/\\]")
|
||||
if parent_dir then
|
||||
opts.cli_path = parent_dir .. "/CLI.py"
|
||||
else
|
||||
opts.cli_path = "CLI.py" -- Fallback
|
||||
end
|
||||
end
|
||||
|
||||
-- Helper to run pipeline
|
||||
function M.run_pipeline(pipeline_cmd, seeds)
|
||||
local args = {opts.python_path, opts.cli_path, "pipeline", pipeline_cmd}
|
||||
|
||||
if seeds then
|
||||
local seeds_json = utils.format_json(seeds)
|
||||
table.insert(args, "--seeds")
|
||||
table.insert(args, seeds_json)
|
||||
end
|
||||
|
||||
msg.info("Running pipeline: " .. pipeline_cmd)
|
||||
local res = utils.subprocess({
|
||||
args = args,
|
||||
cancellable = false,
|
||||
})
|
||||
|
||||
if res.status ~= 0 then
|
||||
msg.error("Pipeline error: " .. (res.stderr or "unknown"))
|
||||
mp.osd_message("Error: " .. (res.stderr or "unknown"), 5)
|
||||
return nil
|
||||
end
|
||||
|
||||
return res.stdout
|
||||
end
|
||||
|
||||
-- Helper to run pipeline and parse JSON output
|
||||
function M.run_pipeline_json(pipeline_cmd, seeds)
|
||||
-- Append | output-json if not present
|
||||
if not pipeline_cmd:match("output%-json$") then
|
||||
pipeline_cmd = pipeline_cmd .. " | output-json"
|
||||
end
|
||||
|
||||
local output = M.run_pipeline(pipeline_cmd, seeds)
|
||||
if output then
|
||||
local ok, data = pcall(utils.parse_json, output)
|
||||
if ok then
|
||||
return data
|
||||
else
|
||||
msg.error("Failed to parse JSON: " .. output)
|
||||
return nil
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
-- Command: Get info for current file
|
||||
function M.get_file_info()
|
||||
local path = mp.get_property("path")
|
||||
if not path then return end
|
||||
|
||||
-- We can pass the path as a seed item
|
||||
local seed = {{path = path}}
|
||||
|
||||
-- Run pipeline: get-metadata
|
||||
local data = M.run_pipeline_json("get-metadata", seed)
|
||||
|
||||
if data then
|
||||
-- Display metadata
|
||||
msg.info("Metadata: " .. utils.format_json(data))
|
||||
mp.osd_message("Metadata loaded (check console)", 3)
|
||||
end
|
||||
end
|
||||
|
||||
-- Command: Delete current file
|
||||
function M.delete_current_file()
|
||||
local path = mp.get_property("path")
|
||||
if not path then return end
|
||||
|
||||
local seed = {{path = path}}
|
||||
|
||||
M.run_pipeline("delete-file", seed)
|
||||
mp.osd_message("File deleted", 3)
|
||||
mp.command("playlist-next")
|
||||
end
|
||||
|
||||
-- Menu integration with UOSC
|
||||
function M.show_menu()
|
||||
local menu_data = {
|
||||
title = "Medios Macina",
|
||||
items = {
|
||||
{ title = "Get Metadata", value = "script-binding medios-info", hint = "Ctrl+i" },
|
||||
{ title = "Delete File", value = "script-binding medios-delete", hint = "Ctrl+Del" },
|
||||
}
|
||||
}
|
||||
|
||||
local json = utils.format_json(menu_data)
|
||||
mp.commandv('script-message-to', 'uosc', 'open-menu', json)
|
||||
end
|
||||
|
||||
-- Keybindings
|
||||
mp.add_key_binding("m", "medios-menu", M.show_menu)
|
||||
mp.add_key_binding("mbtn_right", "medios-menu-right-click", M.show_menu)
|
||||
mp.add_key_binding("ctrl+i", "medios-info", M.get_file_info)
|
||||
mp.add_key_binding("ctrl+del", "medios-delete", M.delete_current_file)
|
||||
|
||||
return M
|
||||
Reference in New Issue
Block a user