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
This commit is contained in:
2026-05-29 22:51:50 -04:00
parent 89bdcc50f3
commit 98eb57e3f7
+30 -9
View File
@@ -578,28 +578,49 @@ function Bookhoard:startRegistrationPoll()
end end
function Bookhoard:setupOPDS() 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 return false
end end
local opds_url = self.settings.server_url local opds_base_url = self.settings.server_url
.. "/opds/devices/" .. self.settings.device_id .. "/catalog" .. "/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_file = DataStorage:getSettingsDir() .. "/opds.lua"
local opds_settings = LuaSettings:open(opds_settings_file) local opds_settings = LuaSettings:open(opds_settings_file)
local servers = opds_settings:readSetting("servers", {}) local servers = opds_settings:readSetting("servers", {})
for _, server in ipairs(servers) do local found = false
if server.url == opds_url then for i, server in ipairs(servers) do
return true 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
end end
table.insert(servers, { if not found then
title = "Bookhoard", table.insert(servers, {
url = opds_url, title = "Bookhoard",
}) url = opds_url,
})
end
opds_settings:saveSetting("servers", servers) opds_settings:saveSetting("servers", servers)
opds_settings:flush() opds_settings:flush()
if self.ui.opds then
self.ui.opds.servers = servers
end
return true return true
end end