diff --git a/frontend/apps/reader/modules/readergoto.lua b/frontend/apps/reader/modules/readergoto.lua index 83b47dab8..36ef3d720 100644 --- a/frontend/apps/reader/modules/readergoto.lua +++ b/frontend/apps/reader/modules/readergoto.lua @@ -181,4 +181,28 @@ function ReaderGoto:onGoToEnd() return true end +function ReaderGoto:onGoToRandomPage() + local page_count = self.document:getPageCount() + if page_count == 1 then return true end + local current_page = self.ui:getCurrentPage() + if self.pages_pool == nil then + self.pages_pool = {} + end + if #self.pages_pool == 0 or (#self.pages_pool == 1 and self.pages_pool[1] == current_page) then + for i = 1, page_count do + self.pages_pool[i] = i + end + end + while true do + local random_page_idx = math.random(1, #self.pages_pool) + local random_page = self.pages_pool[random_page_idx] + if random_page ~= current_page then + table.remove(self.pages_pool, random_page_idx) + self.ui.link:addCurrentLocationToStack() + self.ui:handleEvent(Event:new("GotoPage", random_page)) + return true + end + end +end + return ReaderGoto diff --git a/frontend/dispatcher.lua b/frontend/dispatcher.lua index 2b2cc1780..3afb94687 100644 --- a/frontend/dispatcher.lua +++ b/frontend/dispatcher.lua @@ -140,6 +140,7 @@ local settingsList = { next_chapter = {category="none", event="GotoNextChapter", title=_("Next chapter"), reader=true}, first_page = {category="none", event="GoToBeginning", title=_("First page"), reader=true}, last_page = {category="none", event="GoToEnd", title=_("Last page"), reader=true}, + random_page = {category="none", event="GoToRandomPage", title=_("Random page"), reader=true}, page_jmp = {category="absolutenumber", event="GotoViewRel", min=-100, max=100, title=_("Turn pages"), reader=true}, go_to = {category="none", event="ShowGotoDialog", title=_("Go to page"), filemanager=true, reader=true}, skim = {category="none", event="ShowSkimtoDialog", title=_("Skim document"), reader=true}, @@ -359,6 +360,7 @@ local dispatcher_menu_order = { "next_chapter", "first_page", "last_page", + "random_page", "page_jmp", "go_to", "skim",