84 lines
2.0 KiB
Lua
84 lines
2.0 KiB
Lua
|
-- mpv_websocket
|
||
|
-- https://github.com/kuroahna/mpv_websocket
|
||
|
|
||
|
local utils = require("mp.utils")
|
||
|
|
||
|
local platform = mp.get_property_native("platform")
|
||
|
|
||
|
local config_file_path = mp.find_config_file("mpv.conf")
|
||
|
local config_folder_path, config_file = utils.split_path(config_file_path)
|
||
|
local mpv_websocket_path =
|
||
|
utils.join_path(config_folder_path, platform == "windows" and "mpv_websocket.exe" or "mpv_websocket")
|
||
|
local initialised_websocket
|
||
|
|
||
|
local _, err = utils.file_info(config_file_path)
|
||
|
if err then
|
||
|
error("failed to open mpv config file `" .. config_file_path .. "`")
|
||
|
end
|
||
|
|
||
|
local _, err = utils.file_info(mpv_websocket_path)
|
||
|
if err then
|
||
|
error("failed to open mpv_websocket")
|
||
|
end
|
||
|
|
||
|
local function find_mpv_socket(config_file_path)
|
||
|
local file = io.open(config_file_path, "r")
|
||
|
if file == nil then
|
||
|
error("failed to read mpv config file `" .. config_file_path .. "`")
|
||
|
end
|
||
|
|
||
|
local mpv_socket
|
||
|
for line in file:lines() do
|
||
|
mpv_socket = line:match("^input%-ipc%-server%s*=%s*(%g+)%s*")
|
||
|
if mpv_socket then
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
|
||
|
file:close()
|
||
|
|
||
|
if not mpv_socket then
|
||
|
error("input-ipc-server option does not exist in `" .. config_file_path .. "`")
|
||
|
end
|
||
|
|
||
|
return mpv_socket
|
||
|
end
|
||
|
|
||
|
local mpv_socket = find_mpv_socket(config_file_path)
|
||
|
if platform == "windows" then
|
||
|
mpv_socket = "\\\\.\\pipe" .. mpv_socket:gsub("/", "\\")
|
||
|
end
|
||
|
|
||
|
local function start_websocket()
|
||
|
initialised_websocket = mp.command_native_async({
|
||
|
name = "subprocess",
|
||
|
playback_only = false,
|
||
|
capture_stdout = true,
|
||
|
capture_stderr = true,
|
||
|
args = {
|
||
|
mpv_websocket_path,
|
||
|
"-m",
|
||
|
mpv_socket,
|
||
|
"-w",
|
||
|
"6677",
|
||
|
},
|
||
|
})
|
||
|
end
|
||
|
|
||
|
local function end_websocket()
|
||
|
mp.abort_async_command(initialised_websocket)
|
||
|
initialised_websocket = nil
|
||
|
end
|
||
|
|
||
|
local function toggle_websocket()
|
||
|
local paused = mp.get_property_bool("pause")
|
||
|
if initialised_websocket and paused then
|
||
|
end_websocket()
|
||
|
elseif not initialised_websocket and not paused then
|
||
|
start_websocket()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
mp.register_script_message("togglewebsocket", toggle_websocket)
|
||
|
start_websocket()
|