Use koreader_xpointer for GotoXPointer, fallback to percentage

This commit is contained in:
2026-06-01 20:08:44 -04:00
parent 86b83ff0bc
commit dc68e620af
+10 -5
View File
@@ -792,8 +792,11 @@ function Bookhoard:syncToProgress(progress, percentage)
logger.dbg("Bookhoard: sync to progress", progress, percentage) logger.dbg("Bookhoard: sync to progress", progress, percentage)
if self.ui.document.info.has_pages then if self.ui.document.info.has_pages then
self.ui:handleEvent(Event:new("GotoPage", tonumber(progress))) self.ui:handleEvent(Event:new("GotoPage", tonumber(progress)))
else elseif progress and progress:match("^/body/") then
self.ui:handleEvent(Event:new("GotoXPointer", progress)) self.ui:handleEvent(Event:new("GotoXPointer", progress))
elseif percentage then
self.ui.document:gotoPercent(percentage * 100)
self.ui:handleEvent(Event:new("UpdatePos"))
end end
end end
@@ -960,29 +963,31 @@ function Bookhoard:_doGetProgress(interactive)
local self_older = server_percentage > percentage local self_older = server_percentage > percentage
local nav_target = progress.koreader_xpointer or progress.epubcfi or progress.page
if self_older then if self_older then
if self.settings.sync_forward == SYNC_STRATEGY.SILENT then if self.settings.sync_forward == SYNC_STRATEGY.SILENT then
self:syncToProgress(progress.epubcfi or progress.page, server_percentage) self:syncToProgress(nav_target, server_percentage)
self:_showSyncedMessage() self:_showSyncedMessage()
elseif self.settings.sync_forward == SYNC_STRATEGY.PROMPT then elseif self.settings.sync_forward == SYNC_STRATEGY.PROMPT then
UIManager:show(ConfirmBox:new{ UIManager:show(ConfirmBox:new{
text = T(_("Sync to newer location %1%% from server?"), text = T(_("Sync to newer location %1%% from server?"),
Math.round(server_percentage * 100)), Math.round(server_percentage * 100)),
ok_callback = function() ok_callback = function()
self:syncToProgress(progress.epubcfi or progress.page, server_percentage) self:syncToProgress(nav_target, server_percentage)
end, end,
}) })
end end
else else
if self.settings.sync_backward == SYNC_STRATEGY.SILENT then if self.settings.sync_backward == SYNC_STRATEGY.SILENT then
self:syncToProgress(progress.epubcfi or progress.page, server_percentage) self:syncToProgress(nav_target, server_percentage)
self:_showSyncedMessage() self:_showSyncedMessage()
elseif self.settings.sync_backward == SYNC_STRATEGY.PROMPT then elseif self.settings.sync_backward == SYNC_STRATEGY.PROMPT then
UIManager:show(ConfirmBox:new{ UIManager:show(ConfirmBox:new{
text = T(_("Sync to previous location %1%% from server?"), text = T(_("Sync to previous location %1%% from server?"),
Math.round(server_percentage * 100)), Math.round(server_percentage * 100)),
ok_callback = function() ok_callback = function()
self:syncToProgress(progress.epubcfi or progress.page, server_percentage) self:syncToProgress(nav_target, server_percentage)
end, end,
}) })
end end