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