Files
koreader/frontend/configurable.lua
NiLuJe ce624be8b8 Cache: Fix a whole lot of things.
* Minor updates to the min & max cache sizes (16 & 64MB). Mostly to satisfy my power-of-two OCD.
  * Purge broken on-disk cache files
  * Optimize free RAM computations
  * Start dropping LRU items when running low on memory before pre-rendring (hinting) pages in non-reflowable documents.
  * Make serialize dump the most recently *displayed* page, as the actual MRU item is the most recently *hinted* page, not the current one.
  * Use more accurate item size estimations across the whole codebase.

TileCacheItem:

  * Drop lua-serialize in favor of Persist.

KoptInterface:

  * Drop lua-serialize in favor of Persist.
  * Make KOPTContext caching actually work by ensuring its hash is stable.
2021-05-05 20:37:33 +02:00

74 lines
2.0 KiB
Lua

local ffiUtil = require("ffi/util")
local Configurable = {}
function Configurable:new(o)
o = o or {}
setmetatable(o, self)
self.__index = self
return o
end
function Configurable:reset()
for key, value in pairs(self) do
local value_type = type(value)
if value_type == "number" or value_type == "string" then
self[key] = nil
end
end
end
function Configurable:hash(sep)
local hash = ""
for key, value in ffiUtil.orderedPairs(self) do
local value_type = type(value)
if value_type == "number" or value_type == "string" then
hash = hash..sep..value
end
end
return hash
end
function Configurable:loadDefaults(config_options)
-- reset configurable before loading new options
self:reset()
local prefix = config_options.prefix.."_"
for i=1, #config_options do
local options = config_options[i].options
for j=1,#options do
local key = options[j].name
local settings_key = prefix..key
local default = G_reader_settings:readSetting(settings_key)
self[key] = default or options[j].default_value
if not self[key] then
self[key] = options[j].default_arg
end
end
end
end
function Configurable:loadSettings(settings, prefix)
for key, value in pairs(self) do
local value_type = type(value)
if value_type == "number" or value_type == "string"
or value_type == "table" then
local saved_value = settings:readSetting(prefix..key)
if saved_value ~= nil then
self[key] = saved_value
end
end
end
end
function Configurable:saveSettings(settings, prefix)
for key, value in pairs(self) do
local value_type = type(value)
if value_type == "number" or value_type == "string"
or value_type == "table" then
settings:saveSetting(prefix..key, value)
end
end
end
return Configurable