Files
2026-09-25 15:29:54 +01:00

59 lines
2.9 KiB
Lua

local _ = require("gettext")
local WidgetContainer = require("ui/widget/container/widgetcontainer")
local UIManager = require("ui/uimanager")
local InfoMessage = require("ui/widget/infomessage")
local NetworkMgr = require("ui/network/manager")
local Settings = require("settings")
local Upload = require("upload")
local const = require("./const")
local kovi = WidgetContainer:extend({ name="kovi", is_doc_only=false })
function kovi:init() self.ui.menu:registerToMainMenu(self); self.settings=Settings:new() end
function kovi:showMessage(text) UIManager:show(InfoMessage:new({text=_(text),timeout=4})) end
function kovi:pair()
self.settings:showSetup(function(url,code)
NetworkMgr:runWhenOnline(function()
local ok,response=Upload.pair(url,code,self.settings)
if ok then self:showMessage("kovi paired successfully.") else self:showMessage("Pairing failed: "..tostring(response and response.error or "unknown error")) end
end)
end)
end
function kovi:sync(silent)
local url=self.settings:getServerURL(); local token=self.settings:getToken()
if url=="" or not token then if not silent then self:showMessage("Pair this reader with kovi first.") end; return end
NetworkMgr:runWhenOnline(function()
local ok,response=Upload.sync(url,token)
if not silent then
if ok then self:showMessage(response and response.message or "kovi sync complete.")
else self:showMessage("Sync failed: "..tostring(response and response.error or "server error")) end
end
end)
end
function kovi:testConnection()
local url=self.settings:getServerURL()
if url=="" then self:showMessage("Configure the kovi server URL first."); return end
NetworkMgr:runWhenOnline(function()
local ok,response=Upload.diagnose(url)
if ok then
self:showMessage("kovi connection OK"..(response and response.version and (" · v"..tostring(response.version)) or "."))
else
self:showMessage("Connection test failed: "..tostring(response and response.error or "unknown error"))
end
end)
end
function kovi:onSuspend() if self.settings:getSyncOnSuspend() then self:sync(true) end end
function kovi:onPowerOff() if self.settings:getSyncOnSuspend() then self:sync(true) end end
function kovi:addToMainMenu(menu_items)
menu_items.kovi={text=_("kovi"),sorting_hint="tools",sub_item_table={
{text=_("Sync now"),callback=function() self:sync(false) end,separator=true},
{text=_("Pair / change server"),callback=function() self:pair() end},
{text=_("Test server connection"),callback=function() self:testConnection() end},
{text=_("Sync on suspend"),checked_func=function() return self.settings:getSyncOnSuspend() end,callback=function() self.settings:toggleSyncOnSuspend() end},
{text=_("About kovi"),callback=function() self:showMessage("kovi secure sync plugin · v"..const.VERSION) end},
}}
end
return kovi