mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
..
This commit is contained in:
parent
7a23f2a4c1
commit
37a78ed7ad
5 changed files with 46 additions and 28 deletions
|
|
@ -66,18 +66,10 @@ impl UserData for Cha {
|
||||||
fields.add_field_method_get("is_sticky", |_, me| Ok(me.is_sticky()));
|
fields.add_field_method_get("is_sticky", |_, me| Ok(me.is_sticky()));
|
||||||
|
|
||||||
fields.add_field_method_get("len", |_, me| Ok(me.len));
|
fields.add_field_method_get("len", |_, me| Ok(me.len));
|
||||||
fields.add_field_method_get("atime", |_, me| {
|
fields.add_field_method_get("atime", |_, me| Ok(me.atime_dur().ok().map(|d| d.as_secs_f64())));
|
||||||
Ok(me.atime.and_then(|t| t.duration_since(UNIX_EPOCH).map(|d| d.as_secs_f64()).ok()))
|
fields.add_field_method_get("btime", |_, me| Ok(me.btime_dur().ok().map(|d| d.as_secs_f64())));
|
||||||
});
|
fields.add_field_method_get("ctime", |_, me| Ok(me.ctime_dur().ok().map(|d| d.as_secs_f64())));
|
||||||
fields.add_field_method_get("btime", |_, me| {
|
fields.add_field_method_get("mtime", |_, me| Ok(me.mtime_dur().ok().map(|d| d.as_secs_f64())));
|
||||||
Ok(me.btime.and_then(|t| t.duration_since(UNIX_EPOCH).map(|d| d.as_secs_f64()).ok()))
|
|
||||||
});
|
|
||||||
fields.add_field_method_get("ctime", |_, me| {
|
|
||||||
Ok(me.ctime.and_then(|t| t.duration_since(UNIX_EPOCH).map(|d| d.as_secs_f64()).ok()))
|
|
||||||
});
|
|
||||||
fields.add_field_method_get("mtime", |_, me| {
|
|
||||||
Ok(me.mtime.and_then(|t| t.duration_since(UNIX_EPOCH).map(|d| d.as_secs_f64()).ok()))
|
|
||||||
});
|
|
||||||
fields.add_field_method_get("dev", |_, me| Ok(me.dev));
|
fields.add_field_method_get("dev", |_, me| Ok(me.dev));
|
||||||
fields.add_field_method_get("uid", |_, me| Ok(me.uid));
|
fields.add_field_method_get("uid", |_, me| Ok(me.uid));
|
||||||
fields.add_field_method_get("gid", |_, me| Ok(me.gid));
|
fields.add_field_method_get("gid", |_, me| Ok(me.gid));
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ pub async fn copy_and_seal(from: &Path, to: &Path) -> io::Result<()> {
|
||||||
pub async fn remove_sealed(p: &Path) -> io::Result<()> {
|
pub async fn remove_sealed(p: &Path) -> io::Result<()> {
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
{
|
{
|
||||||
let mut perm = Local::metadata(p).await?.permissions();
|
let mut perm = tokio::fs::metadata(p).await?.permissions();
|
||||||
perm.set_readonly(false);
|
perm.set_readonly(false);
|
||||||
tokio::fs::set_permissions(p, perm).await?;
|
tokio::fs::set_permissions(p, perm).await?;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -104,8 +104,7 @@ impl State {
|
||||||
|
|
||||||
async fn skip(&self) -> Result<bool> {
|
async fn skip(&self) -> Result<bool> {
|
||||||
let cha = Local::symlink_metadata(BOOT.state_dir.join(".dds")).await?;
|
let cha = Local::symlink_metadata(BOOT.state_dir.join(".dds")).await?;
|
||||||
let modified =
|
let modified = cha.mtime_dur()?.as_micros();
|
||||||
cha.mtime.ok_or_else(|| anyhow!("invalid mtime"))?.duration_since(UNIX_EPOCH)?.as_micros();
|
|
||||||
Ok(modified >= self.last.load(Ordering::Relaxed) as u128)
|
Ok(modified >= self.last.load(Ordering::Relaxed) as u128)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
use std::{ffi::OsStr, fs::{FileType, Metadata}, ops::Deref, time::SystemTime};
|
use std::{ffi::OsStr, fs::{FileType, Metadata}, ops::Deref, time::{Duration, SystemTime, UNIX_EPOCH}};
|
||||||
|
|
||||||
|
use anyhow::bail;
|
||||||
use yazi_macro::{unix_either, win_either};
|
use yazi_macro::{unix_either, win_either};
|
||||||
use yazi_shared::url::Url;
|
use yazi_shared::url::Url;
|
||||||
|
|
||||||
|
|
@ -62,16 +63,16 @@ impl Cha {
|
||||||
U: Into<Url<'a>>,
|
U: Into<Url<'a>>,
|
||||||
{
|
{
|
||||||
let url: Url = url.into();
|
let url: Url = url.into();
|
||||||
let mut attached = cha.kind & (ChaKind::HIDDEN | ChaKind::SYSTEM | ChaKind::LINK);
|
let mut retain = cha.kind & (ChaKind::HIDDEN | ChaKind::SYSTEM | ChaKind::LINK);
|
||||||
|
|
||||||
if cha.is_link() {
|
if cha.is_link() {
|
||||||
cha = provider::metadata(url).await.unwrap_or(cha);
|
cha = provider::metadata(url).await.unwrap_or(cha);
|
||||||
}
|
}
|
||||||
if cha.is_link() {
|
if cha.is_link() {
|
||||||
attached |= ChaKind::ORPHAN;
|
retain |= ChaKind::ORPHAN;
|
||||||
}
|
}
|
||||||
|
|
||||||
cha.attach(attached)
|
cha.attach(retain)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn from_dummy<'a, U>(_url: U, ft: Option<FileType>) -> Self
|
pub fn from_dummy<'a, U>(_url: U, ft: Option<FileType>) -> Self
|
||||||
|
|
@ -95,7 +96,7 @@ impl Cha {
|
||||||
|
|
||||||
fn from_bare(m: &Metadata) -> Self {
|
fn from_bare(m: &Metadata) -> Self {
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
use std::{os::unix::fs::MetadataExt, time::{Duration, UNIX_EPOCH}};
|
use std::os::unix::fs::MetadataExt;
|
||||||
|
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
let mode = {
|
let mode = {
|
||||||
|
|
@ -165,4 +166,36 @@ impl Cha {
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub const fn is_dummy(&self) -> bool { self.kind.contains(ChaKind::DUMMY) }
|
pub const fn is_dummy(&self) -> bool { self.kind.contains(ChaKind::DUMMY) }
|
||||||
|
|
||||||
|
pub fn atime_dur(&self) -> anyhow::Result<Duration> {
|
||||||
|
if let Some(atime) = self.atime {
|
||||||
|
Ok(atime.duration_since(UNIX_EPOCH)?)
|
||||||
|
} else {
|
||||||
|
bail!("atime not supported on this platform");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn mtime_dur(&self) -> anyhow::Result<Duration> {
|
||||||
|
if let Some(mtime) = self.mtime {
|
||||||
|
Ok(mtime.duration_since(UNIX_EPOCH)?)
|
||||||
|
} else {
|
||||||
|
bail!("mtime not supported on this platform");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn btime_dur(&self) -> anyhow::Result<Duration> {
|
||||||
|
if let Some(btime) = self.btime {
|
||||||
|
Ok(btime.duration_since(UNIX_EPOCH)?)
|
||||||
|
} else {
|
||||||
|
bail!("btime not supported on this platform");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn ctime_dur(&self) -> anyhow::Result<Duration> {
|
||||||
|
if let Some(ctime) = self.ctime {
|
||||||
|
Ok(ctime.duration_since(UNIX_EPOCH)?)
|
||||||
|
} else {
|
||||||
|
bail!("ctime not supported on this platform");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,14 +36,8 @@ impl Provider for Sftp {
|
||||||
uid: Some(cha.uid),
|
uid: Some(cha.uid),
|
||||||
gid: Some(cha.gid),
|
gid: Some(cha.gid),
|
||||||
perm: Some(cha.mode.bits() as _),
|
perm: Some(cha.mode.bits() as _),
|
||||||
atime: cha
|
atime: cha.atime_dur().ok().map(|d| d.as_secs() as u32),
|
||||||
.atime
|
mtime: cha.mtime_dur().ok().map(|d| d.as_secs() as u32),
|
||||||
.and_then(|t| t.duration_since(UNIX_EPOCH).ok())
|
|
||||||
.map(|d| d.as_secs() as u32),
|
|
||||||
mtime: cha
|
|
||||||
.mtime
|
|
||||||
.and_then(|t| t.duration_since(UNIX_EPOCH).ok())
|
|
||||||
.map(|d| d.as_secs() as u32),
|
|
||||||
extended: Default::default(),
|
extended: Default::default(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue