diff --git a/frontend/apps/reader/modules/readerkoptlistener.lua b/frontend/apps/reader/modules/readerkoptlistener.lua index a9ba7cf68..c59719bea 100644 --- a/frontend/apps/reader/modules/readerkoptlistener.lua +++ b/frontend/apps/reader/modules/readerkoptlistener.lua @@ -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") diff --git a/frontend/apps/reader/modules/readerzooming.lua b/frontend/apps/reader/modules/readerzooming.lua index 0959f8d25..527c0c92e 100644 --- a/frontend/apps/reader/modules/readerzooming.lua +++ b/frontend/apps/reader/modules/readerzooming.lua @@ -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 diff --git a/frontend/ui/data/onetime_migration.lua b/frontend/ui/data/onetime_migration.lua index 05885410b..77217619c 100644 --- a/frontend/ui/data/onetime_migration.lua +++ b/frontend/ui/data/onetime_migration.lua @@ -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)