mirror of
https://github.com/koreader/koreader
synced 2024-11-16 06:12:56 +00:00
160 lines
5.5 KiB
Lua
160 lines
5.5 KiB
Lua
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:extend{
|
|
name = "movetoarchive",
|
|
}
|
|
|
|
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 folder"),
|
|
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()
|
|
|
|
local Event = require("ui/event")
|
|
UIManager:broadcastEvent(Event:new("SetupShowReader"))
|
|
|
|
self.ui:onClose()
|
|
if is_move_process then
|
|
FileManager:moveFile(document_full_path, self.archive_dir_path)
|
|
else
|
|
FileManager:copyFileFromTo(document_full_path, self.archive_dir_path)
|
|
end
|
|
local dest_file = string.format("%s%s", self.archive_dir_path, filename)
|
|
DocSettings:updateLocation(document_full_path, dest_file, not is_move_process)
|
|
ReadHistory:updateItemByPath(document_full_path, dest_file) -- (will update "lastfile" if needed)
|
|
ReadCollection:updateItemByPath(document_full_path, dest_file)
|
|
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
|