chmod popup (#183)

* feat: chmod popup

* fix: windows shall not allows chmod on localhost
This commit is contained in:
Christian Visintin
2023-05-10 17:04:24 +02:00
committed by GitHub
parent b4fa50a666
commit 79dd9e2303
17 changed files with 502 additions and 7 deletions

View File

@@ -0,0 +1,101 @@
use remotefs::fs::UnixPex;
use super::{FileTransferActivity, LogLevel};
impl FileTransferActivity {
#[cfg(target_family = "unix")]
pub fn action_local_chmod(&mut self, mode: UnixPex) {
let files = self.get_local_selected_entries().get_files();
for file in files {
if let Err(err) = self.host.chmod(file.path(), mode) {
self.log_and_alert(
LogLevel::Error,
format!(
"could not change mode for {}: {}",
file.path().display(),
err
),
);
return;
}
self.log(
LogLevel::Info,
format!("changed mode to {:#o} for {}", u32::from(mode), file.name()),
);
}
}
pub fn action_remote_chmod(&mut self, mode: UnixPex) {
let files = self.get_remote_selected_entries().get_files();
for file in files {
let mut metadata = file.metadata.clone();
metadata.mode = Some(mode);
if let Err(err) = self.client.setstat(file.path(), metadata) {
self.log_and_alert(
LogLevel::Error,
format!(
"could not change mode for {}: {}",
file.path().display(),
err
),
);
return;
}
self.log(
LogLevel::Info,
format!("changed mode to {:#o} for {}", u32::from(mode), file.name()),
);
}
}
#[cfg(target_family = "unix")]
pub fn action_find_local_chmod(&mut self, mode: UnixPex) {
let files = self.get_found_selected_entries().get_files();
for file in files {
if let Err(err) = self.host.chmod(file.path(), mode) {
self.log_and_alert(
LogLevel::Error,
format!(
"could not change mode for {}: {}",
file.path().display(),
err
),
);
return;
}
self.log(
LogLevel::Info,
format!("changed mode to {:#o} for {}", u32::from(mode), file.name()),
);
}
}
pub fn action_find_remote_chmod(&mut self, mode: UnixPex) {
let files = self.get_found_selected_entries().get_files();
for file in files {
let mut metadata = file.metadata.clone();
metadata.mode = Some(mode);
if let Err(err) = self.client.setstat(file.path(), metadata) {
self.log_and_alert(
LogLevel::Error,
format!(
"could not change mode for {}: {}",
file.path().display(),
err
),
);
return;
}
self.log(
LogLevel::Info,
format!("changed mode to {:#o} for {}", u32::from(mode), file.name()),
);
}
}
}