summaryrefslogtreecommitdiffstats
path: root/.config/mpv/scripts/autosave.lua
blob: 60609b2efc03e0b24659fbebdc31c847395d5d25 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
-- autosave.lua
-- based on https://gist.github.com/Hakkin/5489e511bd6c8068a0fc09304c9c5a82
--
-- Periodically saves "watch later" data during playback, rather than only saving on quit.
-- This lets you easily recover your position in the case of an ungraceful shutdown of mpv (crash, power failure, etc.).
--
-- You can configure the save period by creating a "lua-settings" directory inside your mpv configuration directory.
-- Inside the "lua-settings" directory, create a file named "autosave.conf".
-- The save period can be set like so:
--
-- save_period=60
--
-- This will set the save period to once every 60 seconds of playback, time while paused is not counted towards the save period timer.
-- The default save period is 30 seconds.
local options = require 'mp.options'

local o = {
	save_period = 30
}

options.read_options(o)

local mp = require 'mp'

local function save()
	if mp.get_property_bool("resume-playback") then
		-- ugly hack to avoid the "Saving state." spam
		local savelog = mp.get_property("msg-level")
		mp.set_property("msg-level", "cplayer=warn")
		mp.command("write-watch-later-config")
		mp.set_property("msg-level", savelog)
	end
end

local save_period_timer = mp.add_periodic_timer(o.save_period, save)

local function pause(name, paused)
	if paused then
		save_period_timer:stop()
	else
		save_period_timer:resume()
	end
end

mp.observe_property("pause", "bool", pause)