Add move to archive plugin (#6101)

reviewable/pr6113/r1
mwoz123 4 years ago committed by GitHub
parent be72203b83
commit ce3bf473da
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1044,14 +1044,24 @@ function FileManager:showFiles(path, focused_file)
self.instance = file_manager
end
--[[
A shortcut to execute mv command (self.mv_bin) with from and to as parameters.
Returns a boolean value to indicate the result of mv command.
--]]
--- A shortcut to execute mv.
-- @treturn boolean result of mv command
function FileManager:moveFile(from, to)
return BaseUtil.execute(self.mv_bin, from, to) == 0
end
--- A shortcut to execute cp.
-- @treturn boolean result of cp command
function FileManager:copyFileFromTo(from, to)
return BaseUtil.execute(self.cp_bin, from, to) == 0
end
--- A shortcut to execute cp recursively.
-- @treturn boolean result of cp command
function FileManager:copyRecursive(from, to)
return BaseUtil.execute(self.cp_bin, "-r", from, to ) == 0
end
function FileManager:onHome()
return self:goHome()
end

@ -91,6 +91,7 @@ local order = {
"calibre_wireless_connection",
"evernote",
"statistics",
"move_to_archive",
"cloud_storage",
"read_timer",
"wallabag",

@ -116,6 +116,7 @@ local order = {
"evernote",
"statistics",
"progress_sync",
"move_to_archive",
"wallabag",
"zsync",
"news_downloader",

@ -0,0 +1,6 @@
local _ = require("gettext")
return {
name = "move_to_archive",
fullname = _("Move to archive"),
description = _([[Moves/copies current book to archive folder]]),
}

@ -0,0 +1,161 @@
local ConfirmBox = require("ui/widget/confirmbox")
local DataStorage = require("datastorage")
local DocSettings = require("docsettings")
local ReadCollection = require("readcollection")
local ReadHistory = require("readhistory")
local ReaderUI = require("apps/reader/readerui")
local FileManager = require("apps/filemanager/filemanager")
local InfoMessage = require("ui/widget/infomessage")
local LuaSettings = require("frontend/luasettings")
local UIManager = require("ui/uimanager")
local WidgetContainer = require("ui/widget/container/widgetcontainer")
local util = require("frontend/util")
local BaseUtil = require("ffi/util")
local _ = require("gettext")
local MoveToArchive = WidgetContainer:new{
name = "move2archive",
}
function MoveToArchive:init()
self.ui.menu:registerToMainMenu(self)
self.settings = LuaSettings:open(("%s/%s"):format(DataStorage:getSettingsDir(), "move_to_archive_settings.lua"))
self.archive_dir_path = self.settings:readSetting("archive_dir")
self.last_copied_from_dir = self.settings:readSetting("last_copied_from_dir")
end
function MoveToArchive:addToMainMenu(menu_items)
menu_items.move_to_archive = {
text = _("Move to archive"),
sub_item_table = {
{
text = _("Move current book to archive"),
callback = function() self:moveToArchive() end,
enabled_func = function()
return self:isActionEnabled()
end,
},
{
text = _("Copy current book to archive"),
callback = function() self:copyToArchive() end,
enabled_func = function()
return self:isActionEnabled()
end,
},
{
text = _("Go to archive folder"),
callback = function()
if not self.archive_dir_path then
self:showNoArchiveConfirmBox()
return
end
self:openFileBrowser(self.archive_dir_path)
end,
},
{
text = _("Go to last copied/moved from folder"),
callback = function()
if not self.last_copied_from_dir then
UIManager:show(InfoMessage:new{
text = _("No previous folder found.")
})
return
end
self:openFileBrowser(self.last_copied_from_dir)
end,
},
{
text = _("Set archive directory"),
keep_menu_open = true,
callback = function()
self:setArchiveDirectory()
end,
}
},
}
end
function MoveToArchive:moveToArchive()
local move_done_text = _("Book moved.\nDo you want to open it from the archive folder?")
self:commonProcess(true, move_done_text)
end
function MoveToArchive:copyToArchive()
local copy_done_text = _("Book copied.\nDo you want to open it from the archive folder?")
self:commonProcess(false, copy_done_text)
end
function MoveToArchive:commonProcess(is_move_process, moved_done_text)
if not self.archive_dir_path then
self:showNoArchiveConfirmBox()
return
end
local document_full_path = self.ui.document.file
local filename
self.last_copied_from_dir, filename = util.splitFilePathName(document_full_path)
self.settings:saveSetting("last_copied_from_dir", self.last_copied_from_dir)
self.settings:flush()
self.ui:onClose()
if is_move_process then
FileManager:moveFile(document_full_path, self.archive_dir_path)
FileManager:moveFile(DocSettings:getSidecarDir(document_full_path), self.archive_dir_path)
else
FileManager:copyFileFromTo(document_full_path, self.archive_dir_path)
FileManager:copyRecursive(DocSettings:getSidecarDir(document_full_path), self.archive_dir_path)
end
local dest_file = string.format("%s%s", self.archive_dir_path, filename)
ReadHistory:updateItemByPath(document_full_path, dest_file)
ReadCollection:updateItemByPath(document_full_path, dest_file)
-- Update last open file.
if G_reader_settings:readSetting("lastfile") == document_full_path then
G_reader_settings:saveSetting("lastfile", dest_file)
end
UIManager:show(ConfirmBox:new{
text = moved_done_text,
ok_callback = function ()
ReaderUI:showReader(dest_file)
end,
cancel_callback = function ()
self:openFileBrowser(self.last_copied_from_dir)
end,
})
end
function MoveToArchive:setArchiveDirectory()
require("ui/downloadmgr"):new{
onConfirm = function(path)
self.archive_dir_path = ("%s/"):format(path)
self.settings:saveSetting("archive_dir", self.archive_dir_path)
self.settings:flush()
end,
}:chooseDir()
end
function MoveToArchive:showNoArchiveConfirmBox()
UIManager:show(ConfirmBox:new{
text = _("No archive directory.\nDo you want to set it now?"),
ok_text = _("Set archive folder"),
ok_callback = function()
self:setArchiveDirectory()
end,
})
end
function MoveToArchive:isActionEnabled()
return self.ui.document ~= nil and ((BaseUtil.dirname(self.ui.document.file) .. "/") ~= self.archive_dir_path )
end
function MoveToArchive:openFileBrowser(path)
if self.ui.document then
self.ui:onClose()
end
if FileManager.instance then
FileManager.instance:reinit(path)
else
FileManager:showFiles(path)
end
end
return MoveToArchive
Loading…
Cancel
Save