forked from Ajatt-Tools/anki.koplugin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
configwrapper.lua
55 lines (48 loc) · 1.91 KB
/
configwrapper.lua
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
local LuaSettings = require("luasettings")
local DataStorage = require("datastorage")
local user_conf = require("config")
local ConfigOpt = {}
local settings = LuaSettings:open(DataStorage:getSettingsDir() .. "/ankiconnect.lua")
function ConfigOpt:get_value()
return settings:readSetting(self.id) or self.value or self.default
end
-- this is never used on ConfigOpt directly, only on MenuConfigOpt (see menubuilder)
function ConfigOpt:update_value(new)
return settings:saveSetting(self.id, new)
end
function ConfigOpt:new(opts)
local new = {
id = opts.id,
value = user_conf[opts.id],
is_required = opts.required or false,
default = opts.default
}
return setmetatable(new, { __index = function(t, key) return rawget(t, key) or rawget(self, key) end })
end
local Config = {
ConfigOpt:new{ id = 'url', required = true },
ConfigOpt:new{ id = 'deckName', required = true },
ConfigOpt:new{ id = 'modelName', required = true },
ConfigOpt:new{ id = 'word_field', required = true },
ConfigOpt:new{ id = 'def_field', required = true },
ConfigOpt:new{ id = 'dupe_scope', default = 'deck' },
ConfigOpt:new{ id = 'allow_dupes', default = false },
ConfigOpt:new{ id = 'custom_tags', default = {} },
ConfigOpt:new{ id = 'enabled_extensions', default = {} },
ConfigOpt:new{ id = 'context_field' },
ConfigOpt:new{ id = 'meta_field' },
ConfigOpt:new{ id = 'audio_field' },
ConfigOpt:new{ id = 'image_field' },
}
local missing = {}
for _,opt in ipairs(Config) do
Config[opt.id] = opt
if opt.is_required and opt:get_value() == nil then
table.insert(missing, opt.id)
end
end
assert(#missing == 0, ("ANKI.KOPLUGIN: The following required configuration options are missing: %s"):format(table.concat(missing, ", ")))
function Config:save()
settings:close()
end
return Config