[fix] ReaderZooming: Deal with some more zoom_mode shenanigans (#7780)

Migrate *global* zoom_mode settings to genus/type, too.

Nothing can actually set this as a global anymore, but we still honored
it nonetheless.

Fix #7778
reviewable/pr7795/r1
NiLuJe 3 years ago committed by GitHub
parent 8d37d49d70
commit 0b58abada5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -17,11 +17,10 @@ end
function ReaderKoptListener:onReadSettings(config)
-- normal zoom mode is zoom mode used in non-reflow mode.
local normal_zoom_mode = config:readSetting("normal_zoom_mode")
or G_reader_settings:readSetting("zoom_mode")
or "page"
or ReaderZooming:combo_to_mode(G_reader_settings:readSetting("kopt_zoom_mode_genus"), G_reader_settings:readSetting("kopt_zoom_mode_type"))
normal_zoom_mode = util.arrayContains(ReaderZooming.available_zoom_modes, normal_zoom_mode)
and normal_zoom_mode
or "page"
or ReaderZooming.DEFAULT_ZOOM_MODE
self.normal_zoom_mode = normal_zoom_mode
self:setZoomMode(normal_zoom_mode)
self.document.configurable.contrast = config:readSetting("kopt_contrast")

@ -1,4 +1,3 @@
local ConfirmBox = require("ui/widget/confirmbox")
local Device = require("device")
local DocCache = require("document/doccache")
local Event = require("ui/event")
@ -28,18 +27,30 @@ local ReaderZooming = InputContainer:new{
"rows",
"manual",
},
zoom_mode_genus_map = {
zoom_genus_to_mode = {
[4] = "page",
[3] = "content",
[2] = "columns",
[1] = "rows",
[0] = "manual",
},
zoom_mode_type_map = {
zoom_mode_to_genus = {
page = 4,
content = 3,
columns = 2,
rows = 1,
manual = 0,
},
zoom_type_to_mode = {
[2] = "",
[1] = "width",
[0] = "height",
},
zoom_mode_to_type = {
[""] = 2,
width = 1,
height = 0,
},
-- default to nil so we can trigger ZoomModeUpdate events on start up
zoom_mode = nil,
DEFAULT_ZOOM_MODE = "pagewidth",
@ -119,26 +130,13 @@ function ReaderZooming:init()
},
}
end
-- Build the reverse zoom_mode -> genus/type mappings
self.zoom_mode_to_genus = {}
for k, v in pairs(self.zoom_mode_genus_map) do
self.zoom_mode_to_genus[v] = k
end
self.zoom_mode_to_type = {}
for k, v in pairs(self.zoom_mode_type_map) do
self.zoom_mode_to_type[v] = k
end
end
-- Update the genus/type Configurables given a specific zoom_mode...
function ReaderZooming:_updateConfigurable(zoom_mode)
-- We may need to poke at the Configurable directly, because ReaderConfig is instantiated before us,
-- so simply updating the DocSetting doesn't cut it...
-- Technically ought to be conditional,
-- because this is an optional engine feature (only if self.document.info.configurable is true).
-- But the rest of the code (as well as most other modules) assumes this is supported on all paged engines (it is).
local configurable = self.document.configurable
-- Conversions between genus/type combos and zoom_mode...
function ReaderZooming:mode_to_combo(zoom_mode)
if not zoom_mode then
zoom_mode = self.DEFAULT_ZOOM_MODE
end
-- Quick'n dirty zoom_mode to genus/type conversion...
local zgenus, ztype = zoom_mode:match("^(page)(%l*)$")
@ -154,6 +152,43 @@ function ReaderZooming:_updateConfigurable(zoom_mode)
local zoom_mode_genus = self.zoom_mode_to_genus[zgenus]
local zoom_mode_type = self.zoom_mode_to_type[ztype]
return zoom_mode_genus, zoom_mode_type
end
function ReaderZooming:combo_to_mode(zoom_mode_genus, zoom_mode_type)
local default_genus, default_type = self:mode_to_combo(self.DEFAULT_ZOOM_MODE)
if not zoom_mode_genus then
zoom_mode_genus = default_genus
end
if not zoom_mode_type then
zoom_mode_type = default_type
end
local zoom_genus = self.zoom_genus_to_mode[zoom_mode_genus]
local zoom_type = self.zoom_type_to_mode[zoom_mode_type]
local zoom_mode
if zoom_genus == "page" or zoom_genus == "content" then
zoom_mode = zoom_genus .. zoom_type
else
zoom_mode = zoom_genus
end
return zoom_mode
end
-- Update the genus/type Configurables given a specific zoom_mode...
function ReaderZooming:_updateConfigurable(zoom_mode)
-- We may need to poke at the Configurable directly, because ReaderConfig is instantiated before us,
-- so simply updating the DocSetting doesn't cut it...
-- Technically ought to be conditional,
-- because this is an optional engine feature (only if self.document.info.configurable is true).
-- But the rest of the code (as well as most other modules) assumes this is supported on all paged engines (it is).
local configurable = self.document.configurable
local zoom_mode_genus, zoom_mode_type = self:mode_to_combo(zoom_mode)
-- Configurable keys aren't prefixed, unlike the actual settings...
configurable.zoom_mode_genus = zoom_mode_genus
configurable.zoom_mode_type = zoom_mode_type
@ -164,7 +199,6 @@ end
function ReaderZooming:onReadSettings(config)
-- If we have a composite zoom_mode stored, use that
local zoom_mode = config:readSetting("zoom_mode")
or G_reader_settings:readSetting("zoom_mode")
if zoom_mode then
-- Validate it first
zoom_mode = util.arrayContains(self.available_zoom_modes, zoom_mode)
@ -182,12 +216,7 @@ function ReaderZooming:onReadSettings(config)
local zoom_mode_type = config:readSetting("kopt_zoom_mode_type")
or G_reader_settings:readSetting("kopt_zoom_mode_type")
if zoom_mode_genus or zoom_mode_type then
-- Handle defaults
zoom_mode_genus = zoom_mode_genus or 4 -- "page"
zoom_mode_type = zoom_mode_type or 1 -- "width"
zoom_mode_genus = self.zoom_mode_genus_map[zoom_mode_genus]
zoom_mode_type = self.zoom_mode_type_map[zoom_mode_type]
zoom_mode = zoom_mode_genus .. zoom_mode_type
zoom_mode = self:combo_to_mode(zoom_mode_genus, zoom_mode_type)
end
-- Validate it
@ -306,8 +335,8 @@ function ReaderZooming:onDefineZoom(btn, when_applied_callback)
})[config.zoom_direction]
local zoom_range_number = config.zoom_range_number
local zoom_factor = config.zoom_factor
local zoom_mode_genus = self.zoom_mode_genus_map[config.zoom_mode_genus]
local zoom_mode_type = self.zoom_mode_type_map[config.zoom_mode_type]
local zoom_mode_genus = self.zoom_genus_to_mode[config.zoom_mode_genus]
local zoom_mode_type = self.zoom_type_to_mode[config.zoom_mode_type]
settings.zoom_overlap_h = config.zoom_overlap_h
settings.zoom_overlap_v = config.zoom_overlap_v
if btn == "set_zoom_overlap_h" then
@ -320,7 +349,7 @@ function ReaderZooming:onDefineZoom(btn, when_applied_callback)
local zoom_mode
if zoom_mode_genus == "page" or zoom_mode_genus == "content" then
zoom_mode = zoom_mode_genus..zoom_mode_type
zoom_mode = zoom_mode_genus .. zoom_mode_type
else
zoom_mode = zoom_mode_genus
self.ui:handleEvent(Event:new("SetScrollMode", false))
@ -685,17 +714,4 @@ function ReaderZooming:onBBoxUpdate()
self:onDefineZoom()
end
function ReaderZooming:makeDefault(zoom_mode, touchmenu_instance)
UIManager:show(ConfirmBox:new{
text = T(
_("Set default zoom mode to %1?"),
zoom_mode
),
ok_callback = function()
G_reader_settings:saveSetting("zoom_mode", zoom_mode)
if touchmenu_instance then touchmenu_instance:updateItems() end
end,
})
end
return ReaderZooming

@ -7,7 +7,7 @@ local lfs = require("libs/libkoreader-lfs")
local logger = require("logger")
-- Date at which the last migration snippet was added
local CURRENT_MIGRATION_DATE = 20210521
local CURRENT_MIGRATION_DATE = 20210531
-- Retrieve the date of the previous migration, if any
local last_migration_date = G_reader_settings:readSetting("last_migration_date", 0)
@ -247,5 +247,20 @@ if last_migration_date < 20210521 then
end
end
-- 20210531, ReaderZooming, deprecate zoom_mode in global settings, https://github.com/koreader/koreader/pull/7780
if last_migration_date < 20210531 then
logger.info("Performing one-time migration for 20210531")
if G_reader_settings:has("zoom_mode") then
local ReaderZooming = require("apps/reader/modules/readerzooming")
-- NOTE: For simplicity's sake, this will overwrite potentially existing genus/type globals,
-- as they were ignored in this specific case anyway...
local zoom_mode_genus, zoom_mode_type = ReaderZooming:mode_to_combo(G_reader_settings:readSetting("zoom_mode"))
G_reader_settings:saveSetting("kopt_zoom_mode_genus", zoom_mode_genus)
G_reader_settings:saveSetting("kopt_zoom_mode_type", zoom_mode_type)
G_reader_settings:delSetting("zoom_mode")
end
end
-- We're done, store the current migration date
G_reader_settings:saveSetting("last_migration_date", CURRENT_MIGRATION_DATE)

Loading…
Cancel
Save