mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
Some checks are pending
Cachix / Publish Flake (push) Waiting to run
Check / clippy (push) Waiting to run
Check / rustfmt (push) Waiting to run
Check / stylua (push) Waiting to run
Draft / build-unix (gcc-aarch64-linux-gnu, ubuntu-latest, aarch64-unknown-linux-gnu) (push) Waiting to run
Draft / build-unix (gcc-i686-linux-gnu, ubuntu-latest, i686-unknown-linux-gnu) (push) Waiting to run
Draft / build-unix (gcc-riscv64-linux-gnu, ubuntu-latest, riscv64gc-unknown-linux-gnu) (push) Waiting to run
Draft / build-unix (gcc-sparc64-linux-gnu, ubuntu-latest, sparc64-unknown-linux-gnu) (push) Waiting to run
Draft / build-unix (macos-latest, aarch64-apple-darwin) (push) Waiting to run
Draft / build-unix (macos-latest, x86_64-apple-darwin) (push) Waiting to run
Draft / build-unix (ubuntu-latest, x86_64-unknown-linux-gnu) (push) Waiting to run
Draft / build-windows (windows-latest, aarch64-pc-windows-msvc) (push) Waiting to run
Draft / build-windows (windows-latest, x86_64-pc-windows-msvc) (push) Waiting to run
Draft / build-musl (aarch64-unknown-linux-musl) (push) Waiting to run
Draft / build-musl (x86_64-unknown-linux-musl) (push) Waiting to run
Draft / build-snap (amd64, ubuntu-latest) (push) Waiting to run
Draft / build-snap (arm64, ubuntu-24.04-arm) (push) Waiting to run
Draft / snap (push) Blocked by required conditions
Draft / draft (push) Blocked by required conditions
Draft / nightly (push) Blocked by required conditions
Test / test (macos-latest) (push) Waiting to run
Test / test (ubuntu-latest) (push) Waiting to run
Test / test (windows-latest) (push) Waiting to run
36 lines
964 B
Rust
36 lines
964 B
Rust
use crate::cha::{Cha, ChaKind, ChaMode};
|
|
|
|
pub(super) trait TrashCha: Sized {
|
|
fn from_mold(is_dir: bool) -> Self;
|
|
|
|
#[cfg(all(unix, not(target_os = "android"), not(target_os = "ios")))]
|
|
fn from_trash(
|
|
path: &std::path::Path,
|
|
name: &std::ffi::OsStr,
|
|
follow: bool,
|
|
) -> std::io::Result<Self>;
|
|
}
|
|
|
|
impl TrashCha for Cha {
|
|
fn from_mold(is_dir: bool) -> Self {
|
|
let mut cha = Self::default();
|
|
cha.kind.remove(ChaKind::DUMMY);
|
|
cha.mode = if is_dir { ChaMode::T_DIR | ChaMode::U_EXEC } else { ChaMode::T_FILE };
|
|
cha.mode |= ChaMode::U_READ | ChaMode::U_WRITE;
|
|
cha
|
|
}
|
|
|
|
#[cfg(all(unix, not(target_os = "android"), not(target_os = "ios")))]
|
|
fn from_trash(
|
|
path: &std::path::Path,
|
|
name: &std::ffi::OsStr,
|
|
follow: bool,
|
|
) -> std::io::Result<Self> {
|
|
let cha = Cha::new(name, std::fs::symlink_metadata(path)?);
|
|
Ok(if cha.is_link() && follow {
|
|
cha.follow(std::fs::metadata(path).ok().map(|meta| Cha::new(name, meta)))
|
|
} else {
|
|
cha
|
|
})
|
|
}
|
|
}
|