From 98eb57e3f751b9987b8352ff68f4edf304f5211c Mon Sep 17 00:00:00 2001 From: John O'Keefe Date: Fri, 29 May 2026 22:51:50 -0400 Subject: [PATCH] Fix OPDS: add auth token to URL and hot-update in-memory servers - Append ?token= auth param to OPDS catalog URL - Replace any existing stale Bookhoard entry (with or without token) - Hot-update OPDS plugin's in-memory servers table so catalog appears immediately without restarting KOReader --- main.lua | 39 ++++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/main.lua b/main.lua index 7c8c158..7c27bef 100644 --- a/main.lua +++ b/main.lua @@ -578,28 +578,49 @@ function Bookhoard:startRegistrationPoll() end function Bookhoard:setupOPDS() - if not self.settings.server_url or not self.settings.device_id then + if not self.settings.server_url or not self.settings.device_id + or not self.settings.auth_token then return false end - local opds_url = self.settings.server_url + local opds_base_url = self.settings.server_url .. "/opds/devices/" .. self.settings.device_id .. "/catalog" + local opds_url = opds_base_url .. "?token=" .. self.settings.auth_token + local opds_settings_file = DataStorage:getSettingsDir() .. "/opds.lua" local opds_settings = LuaSettings:open(opds_settings_file) local servers = opds_settings:readSetting("servers", {}) - for _, server in ipairs(servers) do - if server.url == opds_url then - return true + local found = false + for i, server in ipairs(servers) do + if server.url and ( + server.url == opds_url + or server.url == opds_base_url + or server.url:startswith(opds_base_url .. "?") + ) then + servers[i] = { + title = "Bookhoard", + url = opds_url, + } + found = true + break end end - table.insert(servers, { - title = "Bookhoard", - url = opds_url, - }) + if not found then + table.insert(servers, { + title = "Bookhoard", + url = opds_url, + }) + end + opds_settings:saveSetting("servers", servers) opds_settings:flush() + + if self.ui.opds then + self.ui.opds.servers = servers + end + return true end