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.
reviewable/pr6216/r1
poire-z 4 years ago committed by GitHub
parent 03140f505c
commit fc6c786f84
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -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
-- 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
self.mode_index = self.settings.order
self.mode_nb = #self.mode_index
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

Loading…
Cancel
Save