[plugin] Gestures, Hotkeys: attempt to work around corrupted gestures file (#13054)

See #13009 for details.

LuaSettings attempts to read a backup if the main doesn't work. If that doesn't work it returns an empty `data` table. But gestures expects there to be defaults inside.
This commit is contained in:
Frans de Jonge
2025-01-13 08:31:06 +01:00
committed by GitHub
parent ea23f0c9aa
commit 6792bb0a06
2 changed files with 12 additions and 8 deletions

View File

@@ -16,7 +16,6 @@ local Screen = require("device").screen
local SpinWidget = require("ui/widget/spinwidget")
local UIManager = require("ui/uimanager")
local WidgetContainer = require("ui/widget/container/widgetcontainer")
local lfs = require("libs/libkoreader-lfs")
local logger = require("logger")
local util = require("util")
local T = FFIUtil.template
@@ -140,9 +139,6 @@ end
function Gestures:init()
local defaults_path = FFIUtil.joinPath(self.path, "defaults.lua")
if not lfs.attributes(gestures_path, "mode") then
FFIUtil.copyFile(defaults_path, gestures_path)
end
self.ignore_hold_corners = G_reader_settings:isTrue("ignore_hold_corners")
self.multiswipes_enabled = G_reader_settings:isTrue("multiswipes_enabled")
self.is_docless = self.ui == nil or self.ui.document == nil
@@ -150,6 +146,12 @@ function Gestures:init()
self.defaults = LuaSettings:open(defaults_path).data[self.ges_mode]
if not self.settings_data then
self.settings_data = LuaSettings:open(gestures_path)
if not next(self.settings_data.data) then
logger.warn("No gestures file or invalid gestures file found, copying defaults")
self.settings_data:purge()
FFIUtil.copyFile(defaults_path, gestures_path)
self.settings_data = LuaSettings:open(gestures_path)
end
end
self.gestures = self.settings_data.data[self.ges_mode]
self.custom_multiswipes = self.settings_data.data["custom_multiswipes"]

View File

@@ -5,7 +5,6 @@ local FFIUtil = require("ffi/util")
local InputContainer = require("ui/widget/container/inputcontainer")
local LuaSettings = require("luasettings")
local UIManager = require("ui/uimanager")
local lfs = require("libs/libkoreader-lfs")
local logger = require("logger")
local util = require("util")
local T = FFIUtil.template
@@ -99,14 +98,17 @@ end
function HotKeys:init()
local defaults_path = FFIUtil.joinPath(self.path, "defaults.lua")
if not lfs.attributes(hotkeys_path, "mode") then
FFIUtil.copyFile(defaults_path, hotkeys_path)
end
self.is_docless = self.ui == nil or self.ui.document == nil
self.hotkey_mode = self.is_docless and "hotkeys_fm" or "hotkeys_reader"
self.defaults = LuaSettings:open(defaults_path).data[self.hotkey_mode]
if not self.settings_data then
self.settings_data = LuaSettings:open(hotkeys_path)
if not next(self.settings_data.data) then
logger.warn("No hotkeys file or invalid hotkeys file found, copying defaults")
self.settings_data:purge()
FFIUtil.copyFile(defaults_path, hotkeys_path)
self.settings_data = LuaSettings:open(hotkeys_path)
end
end
self.hotkeys = self.settings_data.data[self.hotkey_mode]
self.type_to_search = self.settings_data.data["type_to_search"] or false