mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
[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
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user