diff --git a/main.lua b/main.lua index a7839f5..ca277da 100644 --- a/main.lua +++ b/main.lua @@ -84,7 +84,28 @@ function Bookhoard:init() self:updateProgress(false, false) end - self.settings = G_reader_settings:readSetting(self.settings_key, self.default_settings) + -- readSetting returns the STORED table verbatim when one exists — it + -- does not merge defaults. A settings file saved by an older plugin + -- version lacks the annotation toggles entirely, so sync_bookmarks/ + -- highlights/notes read as nil, the "or" in _doUpdateProgress fell + -- through to the else branch, and every push carried EMPTY annotation + -- arrays while progress synced fine. Merge missing defaults (and + -- persist once so the file and the menu checkboxes self-heal). + self.settings = G_reader_settings:readSetting(self.settings_key, {}) + if type(self.settings) ~= "table" then + self.settings = {} + end + local settings_merged = false + for key, value in pairs(self.default_settings) do + if self.settings[key] == nil then + self.settings[key] = value + settings_merged = true + end + end + if settings_merged then + G_reader_settings:saveSetting(self.settings_key, self.settings) + logger.info("Bookhoard: merged new default settings (older settings file)") + end if self.settings.auto_sync and Device:hasSeamlessWifiToggle()