blob: 2b15c89e356a1019e45ad0186f2328b90fbe4908 (
plain)
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
local gdebug = require "gears.debug"
local qfs = require "quarrel.fs"
local qjson = require "quarrel.json"
awesome.register_xproperty("is_restart", "boolean")
---@alias QPersistentValue string|number|table|nil|boolean
---@class QuarrelPersistent
local qpersistent = {}
---@type table<string, QPersistentValue>
local inner = {}
--- Store a key-value pair in a persistent store
---@param key string
---@param value QPersistentValue
function qpersistent.store(key, value)
inner[key] = value
end
--- Get a key-value pair in a persistent store
---@param key string
---@return QPersistentValue
function qpersistent.get(key)
return inner[key]
end
--- Check if there was a restart
---@return boolean
function qpersistent.is_restart()
return awesome.get_xproperty "is_restart" ~= nil
end
do
local ok, content = pcall(qfs.read, "/tmp/qpersistent-store")
if not ok and not qpersistent.is_restart() then
gdebug.print_error "failed to read persistent store"
inner = {}
else
inner = qjson.decode(content)
end
end
awesome.connect_signal("exit", function(restart)
if not restart then
return
end -- we probably errored
local ok = pcall(qfs.write, qjson.encode(inner), "/tmp/qpersistent-store")
if not ok then
gdebug.print_error "failed to open persistent store"
return
end
if not qpersistent.is_restart() then
awesome.set_xproperty("is_restart", true)
end
end)
return qpersistent
|