feat(koplugin): register sync actions in gesture manager closes #2224 (#2226)

This commit is contained in:
Huang Xin
2025-10-14 15:54:08 +08:00
committed by GitHub
parent 60ddb17547
commit e2291ed5b1
+54 -32
View File
@@ -1,5 +1,6 @@
local Device = require("device") local Device = require("device")
local Event = require("ui/event") local Event = require("ui/event")
local Dispatcher = require("dispatcher")
local InfoMessage = require("ui/widget/infomessage") local InfoMessage = require("ui/widget/infomessage")
local WidgetContainer = require("ui/widget/container/widgetcontainer") local WidgetContainer = require("ui/widget/container/widgetcontainer")
local MultiInputDialog = require("ui/widget/multiinputdialog") local MultiInputDialog = require("ui/widget/multiinputdialog")
@@ -40,35 +41,25 @@ function ReadestSync:init()
self.last_sync_timestamp = 0 self.last_sync_timestamp = 0
self.settings = G_reader_settings:readSetting("readest_sync", self.default_settings) self.settings = G_reader_settings:readSetting("readest_sync", self.default_settings)
self:onDispatcherRegisterActions()
self.ui.menu:registerToMainMenu(self) self.ui.menu:registerToMainMenu(self)
end end
function ReadestSync:onDispatcherRegisterActions() function ReadestSync:onDispatcherRegisterActions()
-- Dispatcher:registerAction("readest_sync_set_autosync",
{ category="string", event="ReadestSyncToggleAutoSync", title=_("Set auto progress sync"), reader=true,
args={true, false}, toggle={_("on"), _("off")},})
Dispatcher:registerAction("readest_sync_toggle_autosync", { category="none", event="ReadestSyncToggleAutoSync", title=_("Toggle auto readest sync"), reader=true,})
Dispatcher:registerAction("readest_sync_push_progress", { category="none", event="ReadestSyncPushProgress", title=_("Push readest progress from this device"), reader=true,})
Dispatcher:registerAction("readest_sync_pull_progress", { category="none", event="ReadestSyncPullProgress", title=_("Pull readest progress from other devices"), reader=true, separator=true,})
end end
function ReadestSync:needsLogin() function ReadestSync:onReaderReady()
return not self.settings.access_token or not self.settings.expires_at if self.settings.auto_sync and self.settings.access_token then
or self.settings.expires_at < os.time() + 60 UIManager:nextTick(function()
end self:pullBookConfig(false)
function ReadestSync:tryRefreshToken()
if self.settings.refresh_token and self.settings.expires_at
and self.settings.expires_at < os.time() - self.settings.expires_in / 2 then
local client = self:getSupabaseAuthClient()
client:refresh_token(self.settings.refresh_token, function(success, response)
if success then
self.settings.access_token = response.access_token
self.settings.refresh_token = response.refresh_token
self.settings.expires_at = response.expires_at
self.settings.expires_in = response.expires_in
G_reader_settings:saveSetting("readest_sync", self.settings)
else
logger.err("ReadestSync: Token refresh failed:", response or "Unknown error")
end
end) end)
end end
self:onDispatcherRegisterActions()
end end
function ReadestSync:addToMainMenu(menu_items) function ReadestSync:addToMainMenu(menu_items)
@@ -98,17 +89,14 @@ function ReadestSync:addToMainMenu(menu_items)
text = _("Auto sync book configs"), text = _("Auto sync book configs"),
checked_func = function() return self.settings.auto_sync end, checked_func = function() return self.settings.auto_sync end,
callback = function() callback = function()
self.settings.auto_sync = not self.settings.auto_sync self:onReadestSyncToggleAutoSync()
if self.settings.auto_sync then
self:pullBookConfig(false)
end
end, end,
separator = true, separator = true,
}, },
{ {
text = _("Push book config now"), text = _("Push book config now"),
enabled_func = function() enabled_func = function()
return self.settings.access_token ~= nil return self.settings.access_token ~= nil and self.ui.document ~= nil
end, end,
callback = function() callback = function()
self:pushBookConfig(true) self:pushBookConfig(true)
@@ -117,7 +105,7 @@ function ReadestSync:addToMainMenu(menu_items)
{ {
text = _("Pull book config now"), text = _("Pull book config now"),
enabled_func = function() enabled_func = function()
return self.settings.access_token ~= nil return self.settings.access_token ~= nil and self.ui.document ~= nil
end, end,
callback = function() callback = function()
self:pullBookConfig(true) self:pullBookConfig(true)
@@ -127,6 +115,29 @@ function ReadestSync:addToMainMenu(menu_items)
} }
end end
function ReadestSync:needsLogin()
return not self.settings.access_token or not self.settings.expires_at
or self.settings.expires_at < os.time() + 60
end
function ReadestSync:tryRefreshToken()
if self.settings.refresh_token and self.settings.expires_at
and self.settings.expires_at < os.time() - self.settings.expires_in / 2 then
local client = self:getSupabaseAuthClient()
client:refresh_token(self.settings.refresh_token, function(success, response)
if success then
self.settings.access_token = response.access_token
self.settings.refresh_token = response.refresh_token
self.settings.expires_at = response.expires_at
self.settings.expires_in = response.expires_in
G_reader_settings:saveSetting("readest_sync", self.settings)
else
logger.err("ReadestSync: Token refresh failed:", response or "Unknown error")
end
end)
end
end
function ReadestSync:getSupabaseAuthClient() function ReadestSync:getSupabaseAuthClient()
if not self.settings.supabase_url or not self.settings.supabase_anon_key then if not self.settings.supabase_url or not self.settings.supabase_anon_key then
return nil return nil
@@ -596,12 +607,23 @@ function ReadestSync:pullBookConfig(interactive)
) )
end end
function ReadestSync:onReaderReady() function ReadestSync:onReadestSyncToggleAutoSync(toggle)
if self.settings.auto_sync and self.settings.access_token then if toggle == self.settings.auto_sync then
UIManager:nextTick(function() return true
self:pullBookConfig(false)
end)
end end
self.settings.auto_sync = not self.settings.auto_sync
G_reader_settings:saveSetting("readest_sync", self.settings)
if self.settings.auto_sync and self.ui.document then
self:pullBookConfig(false)
end
end
function ReadestSync:onReadestSyncPushProgress()
self:pushBookConfig(true)
end
function ReadestSync:onReadestSyncPullProgress()
self:pullBookConfig(true)
end end
function ReadestSync:onCloseDocument() function ReadestSync:onCloseDocument()