mirror of
https://github.com/veeso/termscp.git
synced 2025-12-07 09:36:00 -08:00
chmod popup (#183)
* feat: chmod popup * fix: windows shall not allows chmod on localhost
This commit is contained in:
committed by
GitHub
parent
b4fa50a666
commit
79dd9e2303
101
src/ui/activities/filetransfer/actions/chmod.rs
Normal file
101
src/ui/activities/filetransfer/actions/chmod.rs
Normal 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()),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user