mirror of
https://github.com/koreader/koreader.git
synced 2025-12-18 12:02:09 +01:00
107 lines
5.2 KiB
Lua
107 lines
5.2 KiB
Lua
--[[
|
|
Centralizes migration concerns for LuaSettings & DocSettings
|
|
--]]
|
|
|
|
local DocSettings = require("docsettings")
|
|
local LuaSettings = require("luasettings")
|
|
local logger = require("logger")
|
|
|
|
local SettingsMigration = {}
|
|
|
|
-- Shockingly, handles settings migration
|
|
-- NOTE: supports LuaSettings & DocSettings objects as input, as both implement the same API
|
|
function SettingsMigration:migrateSettings(config)
|
|
-- Figure out what kind of object we were passed, to make the logging more precise
|
|
local cfg_mt_idx = getmetatable(config).__index
|
|
local cfg_class
|
|
if cfg_mt_idx == DocSettings then
|
|
cfg_class = "book"
|
|
elseif cfg_mt_idx == LuaSettings then
|
|
cfg_class = "global"
|
|
else
|
|
-- Input object isn't a supported *Settings class, warn & abort instead of going kablooey.
|
|
logger.warn("Passed an unsupported object class to SettingsMigration!")
|
|
return
|
|
end
|
|
|
|
-- Fine-grained CRe margins (https://github.com/koreader/koreader/pull/4945)
|
|
if config:has("copt_page_margins") then
|
|
local old_margins = config:readSetting("copt_page_margins")
|
|
logger.info("Migrating old", cfg_class, "CRe margin settings: L", old_margins[1], "T", old_margins[2], "R", old_margins[3], "B", old_margins[4])
|
|
-- Format was: {left, top, right, bottom}
|
|
config:saveSetting("copt_h_page_margins", {old_margins[1], old_margins[3]})
|
|
config:saveSetting("copt_t_page_margin", old_margins[2])
|
|
config:saveSetting("copt_b_page_margin", old_margins[4])
|
|
-- Wipe it
|
|
config:delSetting("copt_page_margins")
|
|
end
|
|
|
|
-- Space condensing to Word spacing (https://github.com/koreader/koreader/pull/5655)
|
|
-- From a single number (space condensing) to a table of 2 numbers ({space width scale, space condensing}).
|
|
-- Be conservative and don't change space width scale: use 100%
|
|
if config:hasNot("copt_word_spacing") and config:has("copt_space_condensing") then
|
|
local space_condensing = config:readSetting("copt_space_condensing")
|
|
logger.info("Migrating old", cfg_class, "CRe space condensing:", space_condensing)
|
|
config:saveSetting("copt_word_spacing", { 100, space_condensing })
|
|
end
|
|
|
|
if config:has("style_tweaks") then
|
|
local tweaks = config:readSetting("style_tweaks")
|
|
if tweaks then
|
|
-- try to preserve user intent when flattening the previous combination of
|
|
-- ["footnote-inpage_x", "footnote-inpage_x_smaller"] into ["footnote-inpage_x"]
|
|
--
|
|
-- | x_smaller |
|
|
-- | nil | true | false |
|
|
-- -----------+-------+-------+-------+
|
|
-- nil | nil | true | false |
|
|
-- x true | true | true | true |
|
|
-- false | false | true | false |
|
|
-- -----------+-----------------------+
|
|
--
|
|
-- If either tweak is true, enable the base tweak to keep that type of footnote.
|
|
-- (Preserving small vs normal size is handled below)
|
|
-- If one was false and the other nil or also false, we had a default
|
|
-- that was disabled for the current book and want to keep it false.
|
|
-- If both are nil they were both disabled (global settings) or both using their
|
|
-- respective default values (book settings) and we keep it as nil
|
|
|
|
if tweaks["footnote-inpage_epub"] or tweaks["footnote-inpage_epub_smaller"] then
|
|
tweaks["footnote-inpage_epub"] = true
|
|
elseif tweaks["footnote-inpage_epub"] == false or tweaks["footnote-inpage_epub_smaller"] == false then
|
|
tweaks["footnote-inpage_epub"] = false
|
|
end
|
|
if tweaks["footnote-inpage_wikipedia"] or tweaks["footnote-inpage_wikipedia_smaller"] then
|
|
tweaks["footnote-inpage_wikipedia"] = true
|
|
elseif tweaks["footnote-inpage_wikipedia"] == false or tweaks["footnote-inpage_wikipedia_smaller"] == false then
|
|
tweaks["footnote-inpage_wikipedia"] = false
|
|
end
|
|
if tweaks["footnote-inpage_classic_classnames"] or tweaks["footnote-inpage_classic_classnames_smaller"] then
|
|
tweaks["footnote-inpage_classic_classnames"] = true
|
|
elseif tweaks["footnote-inpage_classic_classnames"] == false or tweaks["footnote-inpage_classic_classnames_smaller"] == false then
|
|
tweaks["footnote-inpage_classic_classnames"] = false
|
|
end
|
|
|
|
local forced_size = false
|
|
for __, pct in ipairs( { 100, 90, 85, 80, 75, 70, 65 } ) do
|
|
if tweaks["inpage_footnote_font-size_" .. pct] then
|
|
forced_size = true
|
|
end
|
|
end
|
|
if not forced_size
|
|
and (tweaks["footnote-inpage_epub_smaller"]
|
|
or tweaks["footnote-inpage_wikipedia_smaller"]
|
|
or tweaks["footnote-inpage_classic_classnames_smaller"]
|
|
) then
|
|
tweaks["inpage_footnote_font-size_smaller"] = true
|
|
end
|
|
|
|
tweaks["footnote-inpage_epub_smaller"] = nil
|
|
tweaks["footnote-inpage_wikipedia_smaller"] = nil
|
|
tweaks["footnote-inpage_classic_classnames_smaller"] = nil
|
|
end
|
|
end
|
|
end
|
|
|
|
return SettingsMigration
|