Skip to content

Commit 6cfa92f

Browse files
authored
feat: SFTP virtual filesystem provider (#3172)
1 parent 7deeaa4 commit 6cfa92f

File tree

49 files changed

+982
-645
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+982
-645
lines changed

Cargo.lock

Lines changed: 39 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

yazi-actor/src/cmp/trigger.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ impl Actor for Trigger {
4747

4848
while let Ok(Some(ent)) = dir.next_entry().await {
4949
if let Ok(ft) = ent.file_type().await {
50-
cache.push(CmpItem { name: ent.file_name(), is_dir: ft.is_dir() });
50+
cache.push(CmpItem { name: ent.name().into_owned(), is_dir: ft.is_dir() });
5151
}
5252
}
5353

yazi-actor/src/mgr/bulk_rename.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use scopeguard::defer;
77
use tokio::io::AsyncWriteExt;
88
use yazi_config::{YAZI, opener::OpenerRule};
99
use yazi_dds::Pubsub;
10-
use yazi_fs::{File, FilesOp, max_common_root, maybe_exists, path::skip_url, provider::{self, local::{Gate, Local}}};
10+
use yazi_fs::{File, FilesOp, max_common_root, maybe_exists, path::skip_url, provider::{self, FileBuilder, Provider, local::{Gate, Local}}};
1111
use yazi_macro::{err, succ};
1212
use yazi_parser::VoidOpt;
1313
use yazi_proxy::{AppProxy, HIDER, TasksProxy};

yazi-adapter/src/image.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use anyhow::Result;
44
use image::{DynamicImage, ExtendedColorType, ImageDecoder, ImageEncoder, ImageError, ImageReader, ImageResult, Limits, codecs::{jpeg::JpegEncoder, png::PngEncoder}, imageops::FilterType, metadata::Orientation};
55
use ratatui::layout::Rect;
66
use yazi_config::YAZI;
7-
use yazi_fs::provider::local::Local;
7+
use yazi_fs::provider::{Provider, local::Local};
88

99
use crate::Dimension;
1010

yazi-binding/src/cha.rs

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,11 @@ impl Cha {
3737
len: t.raw_get("len").unwrap_or_default(),
3838
atime: parse_time(t.raw_get("atime").ok())?,
3939
btime: parse_time(t.raw_get("btime").ok())?,
40-
#[cfg(unix)]
4140
ctime: parse_time(t.raw_get("ctime").ok())?,
4241
mtime: parse_time(t.raw_get("mtime").ok())?,
43-
#[cfg(unix)]
4442
dev: t.raw_get("dev").unwrap_or_default(),
45-
#[cfg(unix)]
4643
uid: t.raw_get("uid").unwrap_or_default(),
47-
#[cfg(unix)]
4844
gid: t.raw_get("gid").unwrap_or_default(),
49-
#[cfg(unix)]
5045
nlink: t.raw_get("nlink").unwrap_or_default(),
5146
})
5247
.into_lua(lua)
@@ -70,29 +65,23 @@ impl UserData for Cha {
7065
fields.add_field_method_get("is_exec", |_, me| Ok(me.is_exec()));
7166
fields.add_field_method_get("is_sticky", |_, me| Ok(me.is_sticky()));
7267

73-
#[cfg(unix)]
74-
{
75-
use std::ops::Not;
76-
fields.add_field_method_get("dev", |_, me| Ok(me.is_dummy().not().then_some(me.dev)));
77-
fields.add_field_method_get("uid", |_, me| Ok(me.is_dummy().not().then_some(me.uid)));
78-
fields.add_field_method_get("gid", |_, me| Ok(me.is_dummy().not().then_some(me.gid)));
79-
fields.add_field_method_get("nlink", |_, me| Ok(me.is_dummy().not().then_some(me.nlink)));
80-
}
81-
8268
fields.add_field_method_get("len", |_, me| Ok(me.len));
8369
fields.add_field_method_get("atime", |_, me| {
8470
Ok(me.atime.and_then(|t| t.duration_since(UNIX_EPOCH).map(|d| d.as_secs_f64()).ok()))
8571
});
8672
fields.add_field_method_get("btime", |_, me| {
8773
Ok(me.btime.and_then(|t| t.duration_since(UNIX_EPOCH).map(|d| d.as_secs_f64()).ok()))
8874
});
89-
#[cfg(unix)]
9075
fields.add_field_method_get("ctime", |_, me| {
9176
Ok(me.ctime.and_then(|t| t.duration_since(UNIX_EPOCH).map(|d| d.as_secs_f64()).ok()))
9277
});
9378
fields.add_field_method_get("mtime", |_, me| {
9479
Ok(me.mtime.and_then(|t| t.duration_since(UNIX_EPOCH).map(|d| d.as_secs_f64()).ok()))
9580
});
81+
fields.add_field_method_get("dev", |_, me| Ok(me.dev));
82+
fields.add_field_method_get("uid", |_, me| Ok(me.uid));
83+
fields.add_field_method_get("gid", |_, me| Ok(me.gid));
84+
fields.add_field_method_get("nlink", |_, me| Ok(me.nlink));
9685
}
9786

9887
fn add_methods<M: UserDataMethods<Self>>(methods: &mut M) {

yazi-cli/src/package/delete.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use anyhow::{Context, Result};
2-
use yazi_fs::{ok_or_not_found, provider::local::Local, remove_dir_clean};
2+
use yazi_fs::{ok_or_not_found, provider::{DirReader, FileHolder, Provider, local::Local}, remove_dir_clean};
33
use yazi_macro::outln;
44

55
use super::Dependency;
@@ -25,7 +25,7 @@ impl Dependency {
2525
let assets = self.target().join("assets");
2626
match Local::read_dir(&assets).await {
2727
Ok(mut it) => {
28-
while let Some(entry) = it.next_entry().await? {
28+
while let Some(entry) = it.next().await? {
2929
remove_sealed(&entry.path())
3030
.await
3131
.with_context(|| format!("failed to remove `{}`", entry.path().display()))?;

yazi-cli/src/package/dependency.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::{io::BufWriter, path::{Path, PathBuf}, str::FromStr};
33
use anyhow::{Result, bail};
44
use serde::{Deserialize, Deserializer, Serialize, Serializer};
55
use twox_hash::XxHash3_128;
6-
use yazi_fs::{Xdg, provider::local::Local};
6+
use yazi_fs::{Xdg, provider::{DirReader, FileHolder, Provider, local::Local}};
77
use yazi_shared::BytesExt;
88

99
#[derive(Clone, Default)]
@@ -65,8 +65,8 @@ impl Dependency {
6565
let mut it = Local::read_dir(dir).await?;
6666
let mut files: Vec<String> =
6767
["LICENSE", "README.md", "main.lua"].into_iter().map(Into::into).collect();
68-
while let Some(entry) = it.next_entry().await? {
69-
if let Ok(name) = entry.file_name().into_string()
68+
while let Some(entry) = it.next().await? {
69+
if let Ok(name) = entry.name().into_owned().into_string()
7070
&& let Some(stripped) = name.strip_suffix(".lua")
7171
&& stripped != "main"
7272
&& stripped.as_bytes().kebab_cased()

yazi-cli/src/package/deploy.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::path::{Path, PathBuf};
22

33
use anyhow::{Context, Result};
4-
use yazi_fs::{provider::local::Local, remove_dir_clean};
4+
use yazi_fs::{provider::{DirReader, FileHolder, Provider, local::Local}, remove_dir_clean};
55
use yazi_macro::outln;
66

77
use super::Dependency;
@@ -43,8 +43,8 @@ impl Dependency {
4343
match Local::read_dir(&from).await {
4444
Ok(mut it) => {
4545
Local::create_dir_all(&to).await?;
46-
while let Some(entry) = it.next_entry().await? {
47-
let (src, dist) = (entry.path(), to.join(entry.file_name()));
46+
while let Some(entry) = it.next().await? {
47+
let (src, dist) = (entry.path(), to.join(entry.name()));
4848
copy_and_seal(&src, &dist).await.with_context(|| {
4949
format!("failed to copy `{}` to `{}`", src.display(), dist.display())
5050
})?;

yazi-cli/src/package/hash.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use anyhow::{Context, Result, bail};
22
use twox_hash::XxHash3_128;
3-
use yazi_fs::{ok_or_not_found, provider::local::Local};
3+
use yazi_fs::{ok_or_not_found, provider::{DirReader, FileHolder, Provider, local::Local}};
44

55
use super::Dependency;
66

@@ -20,8 +20,8 @@ impl Dependency {
2020
let mut assets = vec![];
2121
match Local::read_dir(dir.join("assets")).await {
2222
Ok(mut it) => {
23-
while let Some(entry) = it.next_entry().await? {
24-
let Ok(name) = entry.file_name().into_string() else {
23+
while let Some(entry) = it.next().await? {
24+
let Ok(name) = entry.name().into_owned().into_string() else {
2525
bail!("asset path is not valid UTF-8: {}", entry.path().display());
2626
};
2727
assets.push((name, Local::read(entry.path()).await?));

yazi-cli/src/package/package.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::{path::PathBuf, str::FromStr};
22

33
use anyhow::{Context, Result, bail};
44
use serde::{Deserialize, Deserializer, Serialize, Serializer};
5-
use yazi_fs::{Xdg, provider::local::Local};
5+
use yazi_fs::{Xdg, provider::{Provider, local::Local}};
66
use yazi_macro::outln;
77

88
use super::Dependency;

0 commit comments

Comments
 (0)