obs-replay-folders/OBSReplayFolders.lua
2023-08-03 19:52:07 -05:00

71 lines
1.8 KiB
Lua

obs = obslua
function script_description()
return [[Saves replays to sub-folders using the Game Capture executable name.
Author: redraskal]]
end
function script_load()
obs.obs_frontend_add_event_callback(obs_frontend_callback)
folder = get_running_game_title()
end
function obs_frontend_callback(event)
if event == obs.OBS_FRONTEND_EVENT_REPLAY_BUFFER_STARTED then
folder = get_running_game_title()
end
if event == obs.OBS_FRONTEND_EVENT_REPLAY_BUFFER_SAVED then
local path = get_replay_buffer_output()
if path ~= nil and folder ~= nil then
print("Moving " .. path .. " to " .. folder)
move(path, folder)
end
end
end
function get_replay_buffer_output()
local replay_buffer = obs.obs_frontend_get_replay_buffer_output()
local cd = obs.calldata_create()
local ph = obs.obs_output_get_proc_handler(replay_buffer)
obs.proc_handler_call(ph, "get_last_replay", cd)
local path = obs.calldata_string(cd, "path")
obs.calldata_destroy(cd)
obs.obs_output_release(replay_buffer)
return path
end
function get_running_game_title()
local handle = assert(io.popen("detect_game"))
local result = handle:read("*all")
handle:close()
local len = #result
if len == 0 then
return nil
end
local title = ""
local i = 1
local max = len - 4
while i <= max do
local char = result:sub(i, i)
if char == "\\" then
title = ""
else
title = title .. char
end
i = i + 1
end
print("Current running game: " .. title)
return title
end
function move(path, folder)
local sep = string.match(path, "^.*()/")
local root = string.sub(path, 1, sep) .. folder
local file_name = string.sub(path, sep, string.len(path))
local adjusted_path = root .. file_name
if obs.os_file_exists(root) == false then
obs.os_mkdir(root)
end
obs.os_rename(path, adjusted_path)
end