Files
dotfiles/mpv/scripts/lastopen.lua
2025-06-14 20:26:14 +02:00

98 lines
2.4 KiB
Lua

local utils = require 'mp.utils'
local lastopenFileName = "lastopen.json"
local styleOn = mp.get_property("osd-ass-cc/0")
local styleOff = mp.get_property("osd-ass-cc/1")
-- Check if the operating system is Windows
function isWindows()
local windir = os.getenv("windir")
return (windir~=nil)
end
-- Get the filepath of a file from the mpv config folder
local function getFilepath(filename)
if isWindows() then
return os.getenv("APPDATA"):gsub("\\", "/") .. "/mpv/" .. filename
else
return os.getenv("HOME") .. "/.config/mpv/" .. filename
end
end
local options = {
path = getFilepath(lastopenFileName)
}
-- Save a table as a JSON file file
-- Returns true if successful
function saveTable(t, path)
local contents = utils.format_json(t)
local file = io.open(path .. ".tmp", "wb")
file:write(contents)
io.close(file)
os.remove(path)
os.rename(path .. ".tmp", path)
return true
end
function file_exists(path)
local file = io.open(path, "r") -- Try to open the file in read mode
if file then
file:close() -- Close the file if it was successfully opened
return true
else
return false
end
end
local function save_data()
local data = {
path = mp.get_property('path'),
time_pos = mp.get_property_number('time-pos')
}
saveTable(data, options.path)
end
function loadData(path)
local contents = ""
local myTable = {}
local file = io.open( path, "r" )
if file then
local contents = file:read( "*a" )
myTable = utils.parse_json(contents);
io.close(file)
return myTable
end
return nil
end
-- Parses a Windows path with backslashes to one with normal slashes
function parsePath(path)
if type(path) == "string" then path, _ = path:gsub("\\", "/") end
return path
end
local function load_data()
local data = loadData(getFilepath(lastopenFileName))
if data then
if data.path and file_exists(data.path) then
mp.commandv("loadfile", parsePath(data.path), "replace", -1)
local message = styleOn.."{\\b1}Last Open load:\n"..data.path.."{\\b0}"..styleOff
mp.osd_message(message)
elseif not file_exists(data.path) then
mp.osd_message('File not found: '..data.path)
else
mp.osd_message('Failed to parse lastopen.json')
end
else
mp.osd_message('No lastopen.json found')
end
end
mp.register_event('start-file', save_data)
mp.register_script_message("lastopen", load_data)