From 89bdcc50f319473bd32a58014086e212a14799e9 Mon Sep 17 00:00:00 2001 From: John O'Keefe Date: Fri, 29 May 2026 22:42:26 -0400 Subject: [PATCH] Auto-add OPDS catalog to KOReader after device registration Writes directly to KOReader's opds.lua settings so the user doesn't have to type the long URL. Also updates the manual menu item to auto-configure instead of showing the URL. --- main.lua | 43 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/main.lua b/main.lua index ad66764..7c8c158 100644 --- a/main.lua +++ b/main.lua @@ -1,8 +1,10 @@ local ConfirmBox = require("ui/widget/confirmbox") +local DataStorage = require("datastorage") local Device = require("device") local Event = require("ui/event") local InfoMessage = require("ui/widget/infomessage") local InputDialog = require("ui/widget/inputdialog") +local LuaSettings = require("luasettings") local Math = require("optmath") local NetworkMgr = require("ui/network/manager") local SpinWidget = require("ui/widget/spinwidget") @@ -429,19 +431,19 @@ function Bookhoard:buildMainMenu() table.insert(items, { text = _("Setup OPDS catalog"), keep_menu_open = true, + enabled_func = function() return self:isConfigured() end, callback = function() - if not self.settings.server_url or not self.settings.device_id then + if self:setupOPDS() then + UIManager:show(InfoMessage:new{ + text = _("Bookhoard OPDS catalog added! Find it in Home → OPDS Catalog."), + timeout = 3, + }) + else UIManager:show(InfoMessage:new{ text = _("Please configure and register your device first."), timeout = 3, }) - return end - local opds_url = self.settings.server_url - .. "/opds/devices/" .. self.settings.device_id .. "/catalog" - UIManager:show(InfoMessage:new{ - text = T(_("Add this URL as an OPDS catalog in KOReader:\n\n%1\n\nGo to Home → + → OPDS Catalog to add it."), opds_url), - }) end, }) @@ -552,6 +554,7 @@ function Bookhoard:startRegistrationPoll() self.settings.sync_endpoints = result.sync_endpoints G_reader_settings:saveSetting(self.settings_key, self.settings) self:registerEvents() + self:setupOPDS() if self.waiting_dialog then UIManager:close(self.waiting_dialog) self.waiting_dialog = nil @@ -574,6 +577,32 @@ function Bookhoard:startRegistrationPoll() UIManager:scheduleIn(3, poll) end +function Bookhoard:setupOPDS() + if not self.settings.server_url or not self.settings.device_id then + return false + end + + local opds_url = self.settings.server_url + .. "/opds/devices/" .. self.settings.device_id .. "/catalog" + 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 + end + end + + table.insert(servers, { + title = "Bookhoard", + url = opds_url, + }) + opds_settings:saveSetting("servers", servers) + opds_settings:flush() + return true +end + function Bookhoard:getLastPercent() if self.ui.document.info.has_pages then return Math.roundPercent(self.ui.paging:getLastPercent())