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())