diff --git a/frontend/apps/reader/modules/readerbookmark.lua b/frontend/apps/reader/modules/readerbookmark.lua index 0cff08c4b..e44c33b8b 100644 --- a/frontend/apps/reader/modules/readerbookmark.lua +++ b/frontend/apps/reader/modules/readerbookmark.lua @@ -71,19 +71,31 @@ end function ReaderBookmark:isBookmarkInPageOrder(a, b) if self.ui.document.info.has_pages then + if a.page == b.page then -- have bookmarks before highlights + return a.highlighted + end return a.page > b.page else - return self.ui.document:getPageFromXPointer(a.page) > - self.ui.document:getPageFromXPointer(b.page) + local a_page = self.ui.document:getPageFromXPointer(a.page) + local b_page = self.ui.document:getPageFromXPointer(b.page) + if a_page == b_page then -- have bookmarks before highlights + return a.highlighted + end + return a_page > b_page end end function ReaderBookmark:isBookmarkInReversePageOrder(a, b) + -- The way this is used (by getNextBookmarkedPage(), iterating bookmarks + -- in reverse order), we want to skip highlights, but also the current + -- page: so we do not do any "a.page == b.page" check (not even with + -- a reverse logic than the one from above function). if self.ui.document.info.has_pages then return a.page < b.page else - return self.ui.document:getPageFromXPointer(a.page) < - self.ui.document:getPageFromXPointer(b.page) + local a_page = self.ui.document:getPageFromXPointer(a.page) + local b_page = self.ui.document:getPageFromXPointer(b.page) + return a_page < b_page end end @@ -329,12 +341,8 @@ function ReaderBookmark:getDogearBookmarkIndex(pn_or_xp) while _start <= _end do _middle = math.floor((_start + _end)/2) local v = self.bookmarks[_middle] - if self:isBookmarkMatch(v, pn_or_xp) then - if v.highlighted then - return - else - return _middle - end + if not v.highlighted and self:isBookmarkMatch(v, pn_or_xp) then + return _middle elseif self:isBookmarkInPageOrder({page = pn_or_xp}, v) then _end = _middle - 1 else