mirror of https://github.com/koreader/koreader
Add move to archive plugin (#6101)
parent
be72203b83
commit
ce3bf473da
@ -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…
Reference in New Issue