mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
Clarify our OOP semantics across the codebase (#9586)
Basically: * Use `extend` for class definitions * Use `new` for object instantiations That includes some minor code cleanups along the way: * Updated `Widget`'s docs to make the semantics clearer. * Removed `should_restrict_JIT` (it's been dead code since https://github.com/koreader/android-luajit-launcher/pull/283) * Minor refactoring of LuaSettings/LuaData/LuaDefaults/DocSettings to behave (mostly, they are instantiated via `open` instead of `new`) like everything else and handle inheritance properly (i.e., DocSettings is now a proper LuaSettings subclass). * Default to `WidgetContainer` instead of `InputContainer` for stuff that doesn't actually setup key/gesture events. * Ditto for explicit `*Listener` only classes, make sure they're based on `EventListener` instead of something uselessly fancier. * Unless absolutely necessary, do not store references in class objects, ever; only values. Instead, always store references in instances, to avoid both sneaky inheritance issues, and sneaky GC pinning of stale references. * ReaderUI: Fix one such issue with its `active_widgets` array, with critical implications, as it essentially pinned *all* of ReaderUI's modules, including their reference to the `Document` instance (i.e., that was a big-ass leak). * Terminal: Make sure the shell is killed on plugin teardown. * InputText: Fix Home/End/Del physical keys to behave sensibly. * InputContainer/WidgetContainer: If necessary, compute self.dimen at paintTo time (previously, only InputContainers did, which might have had something to do with random widgets unconcerned about input using it as a baseclass instead of WidgetContainer...). * OverlapGroup: Compute self.dimen at *init* time, because for some reason it needs to do that, but do it directly in OverlapGroup instead of going through a weird WidgetContainer method that it was the sole user of. * ReaderCropping: Under no circumstances should a Document instance member (here, self.bbox) risk being `nil`ed! * Kobo: Minor code cleanups.
This commit is contained in:
@@ -3,31 +3,29 @@ Handles append-mostly data such as KOReader's bookmarks and dictionary search hi
|
||||
]]
|
||||
|
||||
local LuaSettings = require("luasettings")
|
||||
local dbg = require("dbg")
|
||||
local dump = require("dump")
|
||||
local lfs = require("libs/libkoreader-lfs")
|
||||
local logger = require("logger")
|
||||
local util = require("util")
|
||||
|
||||
local LuaData = LuaSettings:new{
|
||||
local LuaData = LuaSettings:extend{
|
||||
name = "",
|
||||
max_backups = 9,
|
||||
}
|
||||
|
||||
--- Creates a new LuaData instance.
|
||||
function LuaData:open(file_path, o) -- luacheck: ignore 312
|
||||
if o and type(o) ~= "table" then
|
||||
if dbg.is_on then
|
||||
error("LuaData: got "..type(o)..", table expected")
|
||||
else
|
||||
o = {}
|
||||
end
|
||||
function LuaData:open(file_path, name)
|
||||
-- Backwards compat, just in case...
|
||||
if type(name) == "table" then
|
||||
name = name.name
|
||||
end
|
||||
-- always initiate a new instance
|
||||
-- careful, `o` is already a table so we use parentheses
|
||||
self = LuaData:new(o)
|
||||
|
||||
local new = {file=file_path, data={}}
|
||||
-- NOTE: Beware, our new instance is new, but self is still LuaData!
|
||||
local new = LuaData:extend{
|
||||
name = name,
|
||||
file = file_path,
|
||||
data = {},
|
||||
}
|
||||
|
||||
-- Some magic to allow for self-describing function names:
|
||||
-- We'll use data_env both as the environment when loading the data, *and* its metatable,
|
||||
@@ -40,7 +38,7 @@ function LuaData:open(file_path, o) -- luacheck: ignore 312
|
||||
local data_env = {}
|
||||
data_env.__index = data_env
|
||||
setmetatable(data_env, data_env)
|
||||
data_env[self.name.."Entry"] = function(table)
|
||||
data_env[new.name.."Entry"] = function(table)
|
||||
if table.index then
|
||||
-- We've got a deleted setting, overwrite with nil and be done with it.
|
||||
if not table.data then
|
||||
@@ -81,7 +79,7 @@ function LuaData:open(file_path, o) -- luacheck: ignore 312
|
||||
end
|
||||
end
|
||||
if not ok then
|
||||
for i=1, self.max_backups, 1 do
|
||||
for i=1, new.max_backups, 1 do
|
||||
local backup_file = new.file..".old."..i
|
||||
if lfs.attributes(backup_file, "mode") == "file" then
|
||||
ok, err = loadfile(backup_file, "t", data_env)
|
||||
@@ -97,7 +95,7 @@ function LuaData:open(file_path, o) -- luacheck: ignore 312
|
||||
end
|
||||
end
|
||||
|
||||
return setmetatable(new, {__index = self})
|
||||
return new
|
||||
end
|
||||
|
||||
--- Saves a setting.
|
||||
|
||||
Reference in New Issue
Block a user