feat: 132 queuing transfers (#332)

the logic of selecting files has been extended!
From now on selecting file will put the files into a transfer queue, which is shown on the bottom panel.
When a file is selected the file is added to the queue with a destination path, which is the **current other explorer path at the moment of selection.
It is possible to navigate to the transfer queue by using `P` and pressing `ENTER` on a file will remove it from the transfer queue.Other commands will work as well on the transfer queue, like `COPY`, `MOVE`, `DELETE`, `RENAME`.

closes #132
This commit is contained in:
Christian Visintin
2025-03-23 14:36:13 +01:00
committed by GitHub
parent 368570592f
commit ec75ae1486
39 changed files with 955 additions and 330 deletions
+19 -4
View File
@@ -13,24 +13,32 @@ impl FileTransferActivity {
pub(crate) fn action_open_local(&mut self) {
let entries: Vec<File> = match self.get_local_selected_entries() {
SelectedFile::One(entry) => vec![entry],
SelectedFile::Many(entries) => entries,
SelectedFile::Many(entries) => entries.into_iter().map(|(f, _)| f).collect(),
SelectedFile::None => vec![],
};
entries
.iter()
.for_each(|x| self.action_open_local_file(x, None));
// clear selection
self.host_bridge_mut().clear_queue();
self.reload_host_bridge_filelist();
}
/// Open local file
pub(crate) fn action_open_remote(&mut self) {
let entries: Vec<File> = match self.get_remote_selected_entries() {
SelectedFile::One(entry) => vec![entry],
SelectedFile::Many(entries) => entries,
SelectedFile::Many(entries) => entries.into_iter().map(|(f, _)| f).collect(),
SelectedFile::None => vec![],
};
entries
.iter()
.for_each(|x| self.action_open_remote_file(x, None));
// clear selection
self.remote_mut().clear_queue();
self.reload_remote_filelist();
}
/// Perform open lopcal file
@@ -86,26 +94,33 @@ impl FileTransferActivity {
pub(crate) fn action_local_open_with(&mut self, with: &str) {
let entries: Vec<File> = match self.get_local_selected_entries() {
SelectedFile::One(entry) => vec![entry],
SelectedFile::Many(entries) => entries,
SelectedFile::Many(entries) => entries.into_iter().map(|(f, _)| f).collect(),
SelectedFile::None => vec![],
};
// Open all entries
entries
.iter()
.for_each(|x| self.action_open_local_file(x, Some(with)));
// clear selection
self.host_bridge_mut().clear_queue();
}
/// Open selected file with provided application
pub(crate) fn action_remote_open_with(&mut self, with: &str) {
let entries: Vec<File> = match self.get_remote_selected_entries() {
SelectedFile::One(entry) => vec![entry],
SelectedFile::Many(entries) => entries,
SelectedFile::Many(entries) => entries.into_iter().map(|(f, _)| f).collect(),
SelectedFile::None => vec![],
};
// Open all entries
entries
.iter()
.for_each(|x| self.action_open_remote_file(x, Some(with)));
// clear selection
self.remote_mut().clear_queue();
self.reload_remote_filelist();
}
fn open_bridged_file(&mut self, entry: &File, open_with: Option<&str>) {