From 3b92bdc08472632f49db8bebbaf5b3d4c71c171e Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Sun, 3 Jan 2016 00:47:01 -0800 Subject: [PATCH] feat: support screenshot in filemanager --- datastorage.lua | 4 ++-- frontend/apps/filemanager/filemanager.lua | 16 +++++++------- frontend/apps/reader/readerui.lua | 5 +++-- .../widget/screenshoter.lua} | 21 +++++++++---------- ...eenshot_spec.lua => screenshoter_spec.lua} | 0 5 files changed, 24 insertions(+), 22 deletions(-) rename frontend/{apps/reader/modules/readerscreenshot.lua => ui/widget/screenshoter.lua} (71%) rename spec/unit/{readerscreenshot_spec.lua => screenshoter_spec.lua} (100%) diff --git a/datastorage.lua b/datastorage.lua index 35cd1f239..22f468370 100644 --- a/datastorage.lua +++ b/datastorage.lua @@ -7,14 +7,14 @@ local DataStorage = {} function DataStorage:getDataDir() local data_dir if isAndroid then - data_dir = "/sdcard/koreader/" + data_dir = "/sdcard/koreader" elseif os.getenv("UBUNTU_APPLICATION_ISOLATION") then local app_id = os.getenv("APP_ID") local package_name = app_id:match("^(.-)_") -- confinded ubuntu app has write access to this dir data_dir = os.getenv("XDG_DATA_HOME") .. "/" .. package_name else - data_dir = "./" + data_dir = "." end if lfs.attributes(data_dir, "mode") ~= "directory" then lfs.mkdir(data_dir) diff --git a/frontend/apps/filemanager/filemanager.lua b/frontend/apps/filemanager/filemanager.lua index 295d8b817..422a150e1 100644 --- a/frontend/apps/filemanager/filemanager.lua +++ b/frontend/apps/filemanager/filemanager.lua @@ -3,22 +3,23 @@ local InputContainer = require("ui/widget/container/inputcontainer") local FrameContainer = require("ui/widget/container/framecontainer") local FileManagerMenu = require("apps/filemanager/filemanagermenu") local DocumentRegistry = require("document/documentregistry") -local TextWidget = require("ui/widget/textwidget") -local FileChooser = require("ui/widget/filechooser") -local VerticalSpan = require("ui/widget/verticalspan") local VerticalGroup = require("ui/widget/verticalgroup") +local Screenshoter = require("ui/widget/screenshoter") local ButtonDialog = require("ui/widget/buttondialog") +local VerticalSpan = require("ui/widget/verticalspan") +local FileChooser = require("ui/widget/filechooser") +local TextWidget = require("ui/widget/textwidget") +local Blitbuffer = require("ffi/blitbuffer") local lfs = require("libs/libkoreader-lfs") local UIManager = require("ui/uimanager") -local Font = require("ui/font") local Screen = require("device").screen local Geom = require("ui/geometry") -local Device = require("device") local Event = require("ui/event") +local Device = require("device") +local util = require("ffi/util") +local Font = require("ui/font") local DEBUG = require("dbg") local _ = require("gettext") -local util = require("ffi/util") -local Blitbuffer = require("ffi/blitbuffer") local FileManager = InputContainer:extend{ title = _("FileManager"), @@ -158,6 +159,7 @@ function FileManager:init() self.menu = FileManagerMenu:new{ ui = self } + table.insert(self, Screenshoter:new{ prefix = 'FileManager' }) table.insert(self, self.menu) table.insert(self, FileManagerHistory:new{ ui = self, diff --git a/frontend/apps/reader/readerui.lua b/frontend/apps/reader/readerui.lua index cc138b9f8..916ba0cdd 100644 --- a/frontend/apps/reader/readerui.lua +++ b/frontend/apps/reader/readerui.lua @@ -1,5 +1,6 @@ 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") local ConfirmBox = require("ui/widget/confirmbox") @@ -33,7 +34,6 @@ local ReaderKoptListener = require("apps/reader/modules/readerkoptlistener") local ReaderCoptListener = require("apps/reader/modules/readercoptlistener") local ReaderHinting = require("apps/reader/modules/readerhinting") local ReaderHighlight = require("apps/reader/modules/readerhighlight") -local ReaderScreenshot = require("apps/reader/modules/readerscreenshot") local ReaderFrontLight = require("apps/reader/modules/readerfrontlight") local ReaderDictionary = require("apps/reader/modules/readerdictionary") local ReaderWikipedia = require("apps/reader/modules/readerwikipedia") @@ -164,7 +164,8 @@ function ReaderUI:init() document = self.document, }) -- screenshot controller - self:registerModule("screenshot", ReaderScreenshot:new{ + self:registerModule("screenshot", Screenshoter:new{ + prefix = 'Reader', dialog = self.dialog, view = self.view, ui = self diff --git a/frontend/apps/reader/modules/readerscreenshot.lua b/frontend/ui/widget/screenshoter.lua similarity index 71% rename from frontend/apps/reader/modules/readerscreenshot.lua rename to frontend/ui/widget/screenshoter.lua index 0149c7c64..640ba57e1 100644 --- a/frontend/apps/reader/modules/readerscreenshot.lua +++ b/frontend/ui/widget/screenshoter.lua @@ -3,19 +3,18 @@ local InfoMessage = require("ui/widget/infomessage") local GestureRange = require("ui/gesturerange") local DataStorage = require("datastorage") local UIManager = require("ui/uimanager") -local Device = require("device") local Screen = require("device").screen -local DEBUG = require("dbg") local T = require("ffi/util").template local _ = require("gettext") -local screenshots_dir = DataStorage:getDataDir() .. "/screenshots/" -local ReaderScreenshot = InputContainer:new{ - datetime_name = screenshots_dir .. "Screenshot_%Y-%b-%d_%H%M%S.png", +local Screenshoter = InputContainer:new{ + prefix = 'Screenshot', } -function ReaderScreenshot:init() +function Screenshoter:init() + local screenshots_dir = DataStorage:getDataDir() .. "/screenshots/" + self.screenshot_fn_fmt = screenshots_dir .. self.prefix .. "_%Y-%b-%d_%H%M%S.png" local diagonal = math.sqrt( math.pow(Screen:getWidth(), 2) + math.pow(Screen:getHeight(), 2) @@ -38,8 +37,8 @@ function ReaderScreenshot:init() } end -function ReaderScreenshot:onScreenshot(filename) - local screenshot_name = filename or os.date(self.datetime_name) +function Screenshoter:onScreenshot(filename) + local screenshot_name = filename or os.date(self.screenshot_fn_fmt) UIManager:show(InfoMessage:new{ text = T( _("Saving screenshot to %1."), screenshot_name), timeout = 3, @@ -50,12 +49,12 @@ function ReaderScreenshot:onScreenshot(filename) return true end -function ReaderScreenshot:onTapDiagonal() +function Screenshoter:onTapDiagonal() return self:onScreenshot() end -function ReaderScreenshot:onSwipeDiagonal() +function Screenshoter:onSwipeDiagonal() return self:onScreenshot() end -return ReaderScreenshot +return Screenshoter diff --git a/spec/unit/readerscreenshot_spec.lua b/spec/unit/screenshoter_spec.lua similarity index 100% rename from spec/unit/readerscreenshot_spec.lua rename to spec/unit/screenshoter_spec.lua