mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
Footer: fix items possibly missing (#6212)
Iterating a k/v table as an array would have us stopped on the first disabled MODE (frontlight, battery... on some devices). Rework that initial setup, and make it correctly handle added or removed MODEs when using the ordered items saved in the user settings.
This commit is contained in:
@@ -326,10 +326,7 @@ function ReaderFooter:init()
|
||||
text_font_bold = false,
|
||||
}
|
||||
|
||||
local mode_tbl = {}
|
||||
local mode_name
|
||||
self.mode_nb = 0
|
||||
self.mode_index = {}
|
||||
-- Remove items not supported by the current device
|
||||
if not Device:isAndroid() then
|
||||
MODE.wifi_status = nil
|
||||
end
|
||||
@@ -339,23 +336,43 @@ function ReaderFooter:init()
|
||||
if Device:isDesktop() then
|
||||
MODE.battery = nil
|
||||
end
|
||||
for k, v in pairs(MODE) do
|
||||
mode_tbl[v] = k
|
||||
end
|
||||
for i = 0, #mode_tbl do
|
||||
mode_name = mode_tbl[i]
|
||||
if mode_name then
|
||||
self.mode_index[self.mode_nb] = mode_name
|
||||
self.mode_nb = self.mode_nb + 1
|
||||
end
|
||||
end
|
||||
|
||||
-- self.mode_index will be an array of MODE names, with an additional element
|
||||
-- with key 0 for "off", which feels a bit strange but seems to work...
|
||||
-- (The same is true for self.settings.order which is saved in settings.)
|
||||
self.mode_index = {}
|
||||
self.mode_nb = 0
|
||||
|
||||
local handled_modes = {}
|
||||
if self.settings.order then
|
||||
while #self.settings.order < #self.mode_index do
|
||||
self.settings.order[#self.settings.order + 1] = self.mode_index[#self.settings.order + 1]
|
||||
-- Start filling self.mode_index from what's been ordered by the user and saved
|
||||
for i=0, #self.settings.order do
|
||||
local name = self.settings.order[i]
|
||||
-- (if name has been removed from our supported MODEs: ignore it)
|
||||
if MODE[name] then -- this mode still exists
|
||||
self.mode_index[self.mode_nb] = name
|
||||
self.mode_nb = self.mode_nb + 1
|
||||
handled_modes[name] = true
|
||||
end
|
||||
end
|
||||
self.mode_index = self.settings.order
|
||||
self.mode_nb = #self.mode_index
|
||||
-- go on completing it with remaining new modes in MODE
|
||||
end
|
||||
-- If no previous self.settings.order, fill mode_index with what's in MODE
|
||||
-- in the original indices order
|
||||
local orig_indexes = {}
|
||||
local orig_indexes_to_name = {}
|
||||
for name, orig_index in pairs(MODE) do
|
||||
if not handled_modes[name] then
|
||||
table.insert(orig_indexes, orig_index)
|
||||
orig_indexes_to_name[orig_index] = name
|
||||
end
|
||||
end
|
||||
table.sort(orig_indexes)
|
||||
for i = 1, #orig_indexes do
|
||||
self.mode_index[self.mode_nb] = orig_indexes_to_name[orig_indexes[i]]
|
||||
self.mode_nb = self.mode_nb + 1
|
||||
end
|
||||
-- require("logger").dbg(self.mode_nb, self.mode_index)
|
||||
|
||||
-- default margin (like self.horizontal_margin)
|
||||
if not self.settings.progress_margin_width then
|
||||
|
||||
Reference in New Issue
Block a user