mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
Selected files: more actions (#13510)
This commit is contained in:
@@ -196,14 +196,6 @@ function FileManager:setupLayout()
|
||||
|
||||
local buttons = {
|
||||
{
|
||||
{
|
||||
text = C_("File", "Copy"),
|
||||
enabled = is_not_parent_folder,
|
||||
callback = function()
|
||||
UIManager:close(self.file_dialog)
|
||||
file_manager:copyFile(file)
|
||||
end,
|
||||
},
|
||||
{
|
||||
text = C_("File", "Paste"),
|
||||
enabled = file_manager.clipboard and true or false,
|
||||
@@ -224,16 +216,16 @@ function FileManager:setupLayout()
|
||||
end
|
||||
end,
|
||||
},
|
||||
},
|
||||
{
|
||||
{
|
||||
text = _("Cut"),
|
||||
text = _("Rename"),
|
||||
enabled = is_not_parent_folder,
|
||||
callback = function()
|
||||
UIManager:close(self.file_dialog)
|
||||
file_manager:cutFile(file)
|
||||
file_manager:showRenameFileDialog(file, is_file)
|
||||
end,
|
||||
},
|
||||
},
|
||||
{
|
||||
{
|
||||
text = _("Delete"),
|
||||
enabled = is_not_parent_folder,
|
||||
@@ -243,13 +235,21 @@ function FileManager:setupLayout()
|
||||
end,
|
||||
},
|
||||
{
|
||||
text = _("Rename"),
|
||||
text = _("Cut"),
|
||||
enabled = is_not_parent_folder,
|
||||
callback = function()
|
||||
UIManager:close(self.file_dialog)
|
||||
file_manager:showRenameFileDialog(file, is_file)
|
||||
file_manager:cutFile(file)
|
||||
end,
|
||||
}
|
||||
},
|
||||
{
|
||||
text = C_("File", "Copy"),
|
||||
enabled = is_not_parent_folder,
|
||||
callback = function()
|
||||
UIManager:close(self.file_dialog)
|
||||
file_manager:copyFile(file)
|
||||
end,
|
||||
},
|
||||
},
|
||||
{}, -- separator
|
||||
}
|
||||
@@ -525,12 +525,13 @@ function FileManager:tapPlus()
|
||||
local function close_dialog_callback()
|
||||
UIManager:close(plus_dialog)
|
||||
end
|
||||
local function refresh_titlebar_callback()
|
||||
self:updateTitleBarPath()
|
||||
end
|
||||
|
||||
local title, buttons
|
||||
if self.selected_files then
|
||||
local function close_dialog_toggle_select_mode_callback()
|
||||
UIManager:close(plus_dialog)
|
||||
self:onToggleSelectMode(true)
|
||||
end
|
||||
local function toggle_select_mode_callback()
|
||||
self:onToggleSelectMode(true)
|
||||
end
|
||||
@@ -540,55 +541,6 @@ function FileManager:tapPlus()
|
||||
or _("No files selected")
|
||||
buttons = {
|
||||
{
|
||||
self.collections:genAddToCollectionButton(self.selected_files, close_dialog_callback, toggle_select_mode_callback),
|
||||
},
|
||||
{
|
||||
{
|
||||
text = _("Show selected files list"),
|
||||
enabled = actions_enabled,
|
||||
callback = function()
|
||||
UIManager:close(plus_dialog)
|
||||
self:showSelectedFilesList()
|
||||
end,
|
||||
},
|
||||
{
|
||||
text = _("Copy"),
|
||||
enabled = actions_enabled,
|
||||
callback = function()
|
||||
self.cutfile = false
|
||||
self:showCopyMoveSelectedFilesDialog(close_dialog_callback)
|
||||
end,
|
||||
},
|
||||
},
|
||||
{
|
||||
{
|
||||
text = _("Select all files in folder"),
|
||||
callback = function()
|
||||
UIManager:close(plus_dialog)
|
||||
self.file_chooser:selectAllFilesInFolder(true)
|
||||
end,
|
||||
},
|
||||
{
|
||||
text = _("Move"),
|
||||
enabled = actions_enabled,
|
||||
callback = function()
|
||||
self.cutfile = true
|
||||
self:showCopyMoveSelectedFilesDialog(close_dialog_callback)
|
||||
end,
|
||||
},
|
||||
},
|
||||
{
|
||||
{
|
||||
text = _("Deselect all"),
|
||||
enabled = actions_enabled,
|
||||
callback = function()
|
||||
UIManager:close(plus_dialog)
|
||||
for file in pairs (self.selected_files) do
|
||||
self.selected_files[file] = nil
|
||||
end
|
||||
self.file_chooser:selectAllFilesInFolder(false) -- undim
|
||||
end,
|
||||
},
|
||||
{
|
||||
text = _("Delete"),
|
||||
enabled = actions_enabled,
|
||||
@@ -603,6 +555,62 @@ function FileManager:tapPlus()
|
||||
})
|
||||
end,
|
||||
},
|
||||
{
|
||||
text = _("Move"),
|
||||
enabled = actions_enabled,
|
||||
callback = function()
|
||||
self.cutfile = true
|
||||
self:showCopyMoveSelectedFilesDialog(close_dialog_callback)
|
||||
end,
|
||||
},
|
||||
{
|
||||
text = _("Copy"),
|
||||
enabled = actions_enabled,
|
||||
callback = function()
|
||||
self.cutfile = false
|
||||
self:showCopyMoveSelectedFilesDialog(close_dialog_callback)
|
||||
end,
|
||||
},
|
||||
},
|
||||
{}, -- separator
|
||||
filemanagerutil.genMultipleStatusButtonsRow(self.selected_files,
|
||||
close_dialog_toggle_select_mode_callback, not actions_enabled),
|
||||
{}, -- separator
|
||||
{
|
||||
filemanagerutil.genMultipleResetSettingsButton(self.selected_files,
|
||||
close_dialog_toggle_select_mode_callback, not actions_enabled),
|
||||
self.collections:genAddToCollectionButton(self.selected_files,
|
||||
close_dialog_callback, toggle_select_mode_callback, not actions_enabled),
|
||||
},
|
||||
{
|
||||
{
|
||||
text = _("Export highlights"),
|
||||
enabled = (actions_enabled and self.exporter) and true or false,
|
||||
callback = function()
|
||||
self.exporter:exportFilesNotes(self.selected_files)
|
||||
end,
|
||||
},
|
||||
},
|
||||
{}, -- separator
|
||||
{
|
||||
{
|
||||
text = _("Deselect all"),
|
||||
enabled = actions_enabled,
|
||||
callback = function()
|
||||
UIManager:close(plus_dialog)
|
||||
for file in pairs (self.selected_files) do
|
||||
self.selected_files[file] = nil
|
||||
end
|
||||
self.file_chooser:selectAllFilesInFolder(false) -- undim
|
||||
end,
|
||||
},
|
||||
{
|
||||
text = _("Select all files in folder"),
|
||||
callback = function()
|
||||
UIManager:close(plus_dialog)
|
||||
self.file_chooser:selectAllFilesInFolder(true)
|
||||
end,
|
||||
},
|
||||
},
|
||||
{
|
||||
{
|
||||
@@ -613,10 +621,11 @@ function FileManager:tapPlus()
|
||||
end,
|
||||
},
|
||||
{
|
||||
text = _("Export highlights"),
|
||||
enabled = (actions_enabled and self.exporter) and true or false,
|
||||
text = _("Show selected files list"),
|
||||
enabled = actions_enabled,
|
||||
callback = function()
|
||||
self.exporter:exportFilesNotes(self.selected_files)
|
||||
UIManager:close(plus_dialog)
|
||||
self:showSelectedFilesList()
|
||||
end,
|
||||
},
|
||||
},
|
||||
@@ -632,7 +641,17 @@ function FileManager:tapPlus()
|
||||
self.folder_shortcuts:genShowFolderShortcutsButton(close_dialog_callback),
|
||||
},
|
||||
}
|
||||
else
|
||||
|
||||
local refresh_button = self.coverbrowser
|
||||
and self.coverbrowser:genMultipleRefreshBookInfoButton(close_dialog_toggle_select_mode_callback, not actions_enabled)
|
||||
if refresh_button ~= nil then
|
||||
table.insert(buttons, 7, refresh_button) -- before 'select mode' buttons
|
||||
end
|
||||
|
||||
else -- no selected files
|
||||
local function refresh_titlebar_callback()
|
||||
self:updateTitleBarPath()
|
||||
end
|
||||
title = BD.dirpath(filemanagerutil.abbreviate(self.file_chooser.path))
|
||||
buttons = {
|
||||
{
|
||||
|
||||
@@ -4,6 +4,8 @@ This module contains miscellaneous helper functions for FileManager
|
||||
|
||||
local BD = require("ui/bidi")
|
||||
local BookList = require("ui/widget/booklist")
|
||||
local CheckButton = require("ui/widget/checkbutton")
|
||||
local ConfirmBox = require("ui/widget/confirmbox")
|
||||
local Device = require("device")
|
||||
local DocSettings = require("docsettings")
|
||||
local Event = require("ui/event")
|
||||
@@ -139,6 +141,36 @@ function filemanagerutil.genStatusButtonsRow(doc_settings_or_file, caller_callba
|
||||
}
|
||||
end
|
||||
|
||||
function filemanagerutil.genMultipleStatusButtonsRow(files, caller_callback, button_disabled)
|
||||
local function genStatusButton(to_status)
|
||||
return {
|
||||
text = BookList.getBookStatusString(to_status, false, true),
|
||||
enabled = not button_disabled,
|
||||
callback = function()
|
||||
UIManager:show(ConfirmBox:new{
|
||||
text = _("Set selected documents status?"),
|
||||
ok_text = _("Set"),
|
||||
ok_callback = function()
|
||||
for file in pairs(files) do
|
||||
local doc_settings = BookList.getDocSettings(file)
|
||||
local summary = doc_settings:readSetting("summary") or {}
|
||||
summary.status = to_status
|
||||
filemanagerutil.saveSummary(doc_settings, summary)
|
||||
BookList.setBookInfoCacheProperty(file, "status", to_status)
|
||||
end
|
||||
caller_callback()
|
||||
end,
|
||||
})
|
||||
end,
|
||||
}
|
||||
end
|
||||
return {
|
||||
genStatusButton("reading"),
|
||||
genStatusButton("abandoned"),
|
||||
genStatusButton("complete"),
|
||||
}
|
||||
end
|
||||
|
||||
-- Generate "Reset" file dialog button
|
||||
function filemanagerutil.genResetSettingsButton(doc_settings_or_file, caller_callback, button_disabled)
|
||||
local doc_settings, file, has_sidecar_file
|
||||
@@ -158,8 +190,6 @@ function filemanagerutil.genResetSettingsButton(doc_settings_or_file, caller_cal
|
||||
text = _("Reset"),
|
||||
enabled = not button_disabled and (has_sidecar_file or has_custom_metadata_file or has_custom_cover_file),
|
||||
callback = function()
|
||||
local CheckButton = require("ui/widget/checkbutton")
|
||||
local ConfirmBox = require("ui/widget/confirmbox")
|
||||
local check_button_settings, check_button_cover, check_button_metadata
|
||||
local confirmbox = ConfirmBox:new{
|
||||
text = T(_("Reset this document?") .. "\n\n%1\n\n" ..
|
||||
@@ -209,6 +239,31 @@ function filemanagerutil.genResetSettingsButton(doc_settings_or_file, caller_cal
|
||||
}
|
||||
end
|
||||
|
||||
function filemanagerutil.genMultipleResetSettingsButton(files, caller_callback, button_disabled)
|
||||
return {
|
||||
text = _("Reset"),
|
||||
enabled = not button_disabled,
|
||||
callback = function()
|
||||
UIManager:show(ConfirmBox:new{
|
||||
text = _("Reset selected documents?") .. "\n" ..
|
||||
_("Information will be permanently lost."),
|
||||
ok_text = _("Reset"),
|
||||
ok_callback = function()
|
||||
for file in pairs(files) do
|
||||
if BookList.hasBookBeenOpened(file) then
|
||||
DocSettings:open(file):purge()
|
||||
UIManager:broadcastEvent(Event:new("InvalidateMetadataCache", file))
|
||||
BookList.setBookInfoCacheProperty(file, "been_opened", false)
|
||||
require("readhistory"):fileSettingsPurged(file)
|
||||
end
|
||||
end
|
||||
caller_callback()
|
||||
end,
|
||||
})
|
||||
end,
|
||||
}
|
||||
end
|
||||
|
||||
function filemanagerutil.genShowFolderButton(file, caller_callback, button_disabled)
|
||||
return {
|
||||
text = _("Show folder"),
|
||||
|
||||
@@ -96,8 +96,8 @@ function CoverBrowser:init()
|
||||
end
|
||||
|
||||
self:setupFileManagerDisplayMode(BookInfoManager:getSetting("filemanager_display_mode"))
|
||||
CoverBrowser.setupWidgetDisplayMode("history")
|
||||
CoverBrowser.setupWidgetDisplayMode("collections")
|
||||
CoverBrowser.setupWidgetDisplayMode("history", true)
|
||||
CoverBrowser.setupWidgetDisplayMode("collections", true)
|
||||
series_mode = BookInfoManager:getSetting("series_mode")
|
||||
init_done = true
|
||||
BookInfoManager:closeDbConnection() -- will be re-opened if needed
|
||||
@@ -518,6 +518,22 @@ function CoverBrowser:genExtractBookInfoButton(close_dialog_callback) -- for Fil
|
||||
}
|
||||
end
|
||||
|
||||
function CoverBrowser:genMultipleRefreshBookInfoButton(close_dialog_toggle_select_mode_callback, button_disabled)
|
||||
return curr_display_modes["filemanager"] and {
|
||||
{
|
||||
text = _("Refresh cached book information"),
|
||||
enabled = not button_disabled,
|
||||
callback = function()
|
||||
for file in pairs(self.ui.selected_files) do
|
||||
BookInfoManager:deleteBookInfo(file)
|
||||
self.ui.file_chooser.resetBookInfoCache(file)
|
||||
end
|
||||
close_dialog_toggle_select_mode_callback()
|
||||
end,
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
function CoverBrowser.initGrid(menu, display_mode)
|
||||
if menu == nil then return end
|
||||
if menu.nb_cols_portrait == nil then
|
||||
@@ -679,7 +695,9 @@ function CoverBrowser:setupFileManagerDisplayMode(display_mode)
|
||||
end
|
||||
|
||||
function CoverBrowser.setupWidgetDisplayMode(widget_id, display_mode)
|
||||
display_mode = display_mode or BookInfoManager:getSetting(display_mode_db_names[widget_id])
|
||||
if display_mode == true then -- init
|
||||
display_mode = BookInfoManager:getSetting(display_mode_db_names[widget_id])
|
||||
end
|
||||
if not DISPLAY_MODES[display_mode] then
|
||||
display_mode = nil -- unknown mode, fallback to classic
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user