rice/mpv/scripts/discord.lua
2022-02-13 14:34:37 -08:00

107 lines
2.7 KiB
Lua

msg = require("mp.msg")
opts = require("mp.options")
utils = require("mp.utils")
options = {
key = "D",
active = true,
client_id = "737663962677510245",
binary_path = "",
socket_path = "/tmp/mpvsocket",
use_static_socket_path = true,
autohide_threshold = 0
}
opts.read_options(options, "discord")
if options.binary_path == "" then
msg.fatal("Missing binary path in config file.")
os.exit(1)
end
function file_exists(path) -- fix(#23): use this instead of utils.file_info
local f = io.open(path, "r")
if f ~= nil then io.close(f) return true else return false end
end
if not file_exists(options.binary_path) then
msg.fatal("The specified binary path does not exist.")
os.exit(1)
end
version = "1.6.0"
msg.info(("mpv-discord v%s by tnychn"):format(version))
socket_path = options.socket_path
if not options.use_static_socket_path then
pid = utils.getpid()
filename = ("mpv-discord-%s"):format(pid)
if socket_path == "" then
socket_path = "/tmp/" -- default
end
socket_path = utils.join_path(socket_path, filename)
elseif socket_path == "" then
msg.fatal("Missing socket path in config file.")
os.exit(1)
end
msg.info(("(mpv-ipc): %s"):format(socket_path))
mp.set_property("input-ipc-server", socket_path)
cmd = nil
function start()
if cmd == nil then
cmd = mp.command_native_async({
name = "subprocess",
playback_only = false,
args = {
options.binary_path,
socket_path,
options.client_id
}
}, function() end)
msg.info("launched subprocess")
mp.osd_message("Discord Rich Presence: Started")
end
end
function stop()
mp.abort_async_command(cmd)
cmd = nil
msg.info("aborted subprocess")
mp.osd_message("Discord Rich Presence: Stopped")
end
if options.active then
mp.register_event("file-loaded", start)
end
mp.add_key_binding(options.key, "toggle-discord", function()
if cmd ~= nil then stop()
else start() end
end)
mp.register_event("shutdown", function()
if cmd ~= nil then stop() end
if not options.use_static_socket_path then
os.remove(socket_path)
end
end)
if options.autohide_threshold > 0 then
local timer = nil
local t = options.autohide_threshold
mp.observe_property("pause", "bool", function(_, value)
if value == true then
timer = mp.add_timeout(t, function()
if cmd ~= nil then stop() end
end)
else
if timer ~= nil then
timer:kill()
timer = nil
end
if options.active and cmd == nil then start() end
end
end)
end