diff --git a/main.lua b/main.lua index 0ff4e71..f021548 100644 --- a/main.lua +++ b/main.lua @@ -870,7 +870,10 @@ end function Bookhoard:syncToProgress(progress, percentage) logger.dbg("Bookhoard: sync to progress", progress, percentage) if self.ui.document.info.has_pages then - self.ui:handleEvent(Event:new("GotoPage", tonumber(progress))) + local page = tonumber(progress) + if page then + self.ui:handleEvent(Event:new("GotoPage", page)) + end elseif progress and progress:match("^/body/") then self.ui:handleEvent(Event:new("GotoXPointer", progress)) elseif percentage then @@ -1052,17 +1055,21 @@ function Bookhoard:_doGetProgress(interactive) local self_older = server_percentage > percentage - local nav_target = progress.koreader_xpointer or progress.epubcfi or progress.page - + local nav_target local sync_text - if not self.ui.document.info.has_pages then + if self.ui.document.info.has_pages then + -- Fixed-layout: the page index is the canonical locator. CFI/xpointer + -- are meaningless for image-based content, so use progress.page directly. + local total = progress.total_pages or self.ui.document:getPageCount() + local target_page = progress.page + or math.min(Math.round(server_percentage * total), total) + nav_target = progress.page + sync_text = T(_("Sync to page %1 of %2 from server?"), target_page, total) + else + nav_target = progress.koreader_xpointer or progress.epubcfi or progress.page local total = self.ui.document:getPageCount() local target_page = math.min(Math.round(server_percentage * total), total) sync_text = T(_("Sync to page %1 of %2 from server?"), target_page, total) - else - sync_text = T(_("Sync to page %1 of %2 from server?"), - Math.round(server_percentage * (progress.total_pages or 1)), - progress.total_pages or "?") end if self_older then