From 28524a58478b0a68bf123708f461f6efe6bd1163 Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Sat, 17 Jun 2017 05:44:29 +0200 Subject: [PATCH] ReaderUI: return to filemanager instead of quitting if no document (#2956) This affects #2335, at least for documents covered by `validDjvuFile()` (see https://github.com/koreader/koreader/blob/76cef07c079e979de6aac6b540c9cc2b672b6f57/frontend/document/djvudocument.lua#L15-L23). However, that's only with regard to `touch invalid.djvu` and should not affect whatever happened in the OP. --- frontend/apps/reader/modules/readermenu.lua | 14 +-- frontend/apps/reader/readerui.lua | 101 ++++++++++++-------- 2 files changed, 60 insertions(+), 55 deletions(-) diff --git a/frontend/apps/reader/modules/readermenu.lua b/frontend/apps/reader/modules/readermenu.lua index e9d3e75be..86633925e 100644 --- a/frontend/apps/reader/modules/readermenu.lua +++ b/frontend/apps/reader/modules/readermenu.lua @@ -3,7 +3,6 @@ local Device = require("device") local Event = require("ui/event") local InputContainer = require("ui/widget/container/inputcontainer") local Screensaver = require("ui/screensaver") -local QuickStart = require("ui/quickstart") local UIManager = require("ui/uimanager") local logger = require("logger") local dbg = require("dbg") @@ -43,18 +42,7 @@ function ReaderMenu:init() callback = function() self:onTapCloseMenu() self.ui:onClose() - local lastdir - local last_file = G_reader_settings:readSetting("lastfile") - -- ignore quickstart guide as last_file so we can go back to home dir - if last_file and last_file ~= QuickStart.quickstart_filename then - lastdir = last_file:match("(.*)/") - end - local FileManager = require("apps/filemanager/filemanager") - if FileManager.instance then - FileManager.instance:reinit(lastdir) - else - FileManager:showFiles(lastdir) - end + self.ui:showFileManager() end, }, main = { diff --git a/frontend/apps/reader/readerui.lua b/frontend/apps/reader/readerui.lua index 5c8916dfd..9eb5b532d 100644 --- a/frontend/apps/reader/readerui.lua +++ b/frontend/apps/reader/readerui.lua @@ -1,55 +1,54 @@ -local InputContainer = require("ui/widget/container/inputcontainer") -local DocumentRegistry = require("document/documentregistry") -local Screenshoter = require("ui/widget/screenshoter") -local InfoMessage = require("ui/widget/infomessage") -local InputDialog = require("ui/widget/inputdialog") +--[[ +ReaderUI is an abstraction for a reader interface. + +It works using data gathered from a document interface. +]]-- + +local Cache = require("cache") local ConfirmBox = require("ui/widget/confirmbox") -local lfs = require("libs/libkoreader-lfs") -local DocSettings = require("docsettings") -local UIManager = require("ui/uimanager") -local Geom = require("ui/geometry") local Device = require("device") -local Screen = require("device").screen +local DocSettings = require("docsettings") +local DocumentRegistry = require("document/documentregistry") local Event = require("ui/event") -local Cache = require("cache") -local logger = require("logger") -local T = require("ffi/util").template -local _ = require("gettext") - -local ReaderView = require("apps/reader/modules/readerview") -local ReaderZooming = require("apps/reader/modules/readerzooming") -local ReaderPanning = require("apps/reader/modules/readerpanning") -local ReaderRotation = require("apps/reader/modules/readerrotation") -local ReaderPaging = require("apps/reader/modules/readerpaging") -local ReaderRolling = require("apps/reader/modules/readerrolling") -local ReaderToc = require("apps/reader/modules/readertoc") +local FileManagerHistory = require("apps/filemanager/filemanagerhistory") +local Geom = require("ui/geometry") +local InfoMessage = require("ui/widget/infomessage") +local InputContainer = require("ui/widget/container/inputcontainer") +local InputDialog = require("ui/widget/inputdialog") +local PluginLoader = require("pluginloader") +local ReaderActivityIndicator = require("apps/reader/modules/readeractivityindicator") local ReaderBookmark = require("apps/reader/modules/readerbookmark") -local ReaderFont = require("apps/reader/modules/readerfont") -local ReaderTypeset = require("apps/reader/modules/readertypeset") -local ReaderMenu = require("apps/reader/modules/readermenu") -local ReaderGoto = require("apps/reader/modules/readergoto") local ReaderConfig = require("apps/reader/modules/readerconfig") -local ReaderCropping = require("apps/reader/modules/readercropping") -local ReaderKoptListener = require("apps/reader/modules/readerkoptlistener") local ReaderCoptListener = require("apps/reader/modules/readercoptlistener") +local ReaderCropping = require("apps/reader/modules/readercropping") +local ReaderDictionary = require("apps/reader/modules/readerdictionary") +local ReaderFont = require("apps/reader/modules/readerfont") +local ReaderFrontLight = require("apps/reader/modules/readerfrontlight") +local ReaderGoto = require("apps/reader/modules/readergoto") local ReaderHinting = require("apps/reader/modules/readerhinting") local ReaderHighlight = require("apps/reader/modules/readerhighlight") -local ReaderFrontLight = require("apps/reader/modules/readerfrontlight") -local ReaderDictionary = require("apps/reader/modules/readerdictionary") -local ReaderWikipedia = require("apps/reader/modules/readerwikipedia") local ReaderHyphenation = require("apps/reader/modules/readerhyphenation") -local ReaderActivityIndicator = require("apps/reader/modules/readeractivityindicator") -local FileManagerHistory = require("apps/filemanager/filemanagerhistory") -local ReaderSearch = require("apps/reader/modules/readersearch") +local ReaderKoptListener = require("apps/reader/modules/readerkoptlistener") local ReaderLink = require("apps/reader/modules/readerlink") +local ReaderMenu = require("apps/reader/modules/readermenu") +local ReaderPanning = require("apps/reader/modules/readerpanning") +local ReaderRotation = require("apps/reader/modules/readerrotation") +local ReaderPaging = require("apps/reader/modules/readerpaging") +local ReaderRolling = require("apps/reader/modules/readerrolling") +local ReaderSearch = require("apps/reader/modules/readersearch") local ReaderStatus = require("apps/reader/modules/readerstatus") -local PluginLoader = require("pluginloader") - ---[[ -This is an abstraction for a reader interface - -it works using data gathered from a document interface -]]-- +local ReaderToc = require("apps/reader/modules/readertoc") +local ReaderTypeset = require("apps/reader/modules/readertypeset") +local ReaderView = require("apps/reader/modules/readerview") +local ReaderWikipedia = require("apps/reader/modules/readerwikipedia") +local ReaderZooming = require("apps/reader/modules/readerzooming") +local Screenshoter = require("ui/widget/screenshoter") +local UIManager = require("ui/uimanager") +local lfs = require("libs/libkoreader-lfs") +local logger = require("logger") +local _ = require("gettext") +local Screen = require("device").screen +local T = require("ffi/util").template local ReaderUI = InputContainer:new{ name = "ReaderUI", @@ -354,6 +353,22 @@ function ReaderUI:init() self.postReaderCallback = nil end +function ReaderUI:showFileManager() + local FileManager = require("apps/filemanager/filemanager") + local QuickStart = require("ui/quickstart") + local lastdir + local last_file = G_reader_settings:readSetting("lastfile") + -- ignore quickstart guide as last_file so we can go back to home dir + if last_file and last_file ~= QuickStart.quickstart_filename then + lastdir = last_file:match("(.*)/") + end + if FileManager.instance then + FileManager.instance:reinit(lastdir) + else + FileManager:showFiles(lastdir) + end +end + function ReaderUI:showReader(file) logger.dbg("show reader ui") require("readhistory"):addItem(file) @@ -393,8 +408,9 @@ function ReaderUI:doShowReader(file) local document = DocumentRegistry:openDocument(file) if not document then UIManager:show(InfoMessage:new{ - text = _("No reader engine for this file.") + text = _("No reader engine for this file or invalid file.") }) + self:showFileManager() return end if document.is_locked then @@ -404,6 +420,7 @@ function ReaderUI:doShowReader(file) if coroutine.running() then local unlock_success = coroutine.yield() if not unlock_success then + self:showFileManager() return end end