feat: add CHANGELOG.md (#3285)

This commit is contained in:
三咲雅 misaki masa 2025-10-27 17:06:53 +08:00 committed by sxyazi
parent c11ed02760
commit ff5f656a31
No known key found for this signature in database
17 changed files with 1622 additions and 65 deletions

View file

@ -56,7 +56,7 @@ jobs:
run: ./scripts/build.sh ${{ matrix.target }}
- name: Upload artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: ${{ matrix.target }}
path: |
@ -102,7 +102,7 @@ jobs:
Compress-Archive -Path ${env:TARGET_NAME} -DestinationPath "${env:TARGET_NAME}.zip"
- name: Upload artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: ${{ matrix.target }}
path: yazi-${{ matrix.target }}.zip
@ -130,7 +130,7 @@ jobs:
run: ./scripts/build.sh ${{ matrix.target }}
- name: Upload artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: ${{ matrix.target }}
path: |
@ -164,7 +164,7 @@ jobs:
run: mv yazi_*.snap yazi-${{ matrix.arch }}.snap
- name: Upload artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: snap-${{ matrix.arch }}
path: yazi-${{ matrix.arch }}.snap
@ -173,7 +173,7 @@ jobs:
runs-on: ubuntu-latest
needs: [build-snap]
steps:
- uses: actions/download-artifact@v5
- uses: actions/download-artifact@v6
with:
pattern: snap-*
merge-multiple: true
@ -202,7 +202,7 @@ jobs:
runs-on: ubuntu-latest
needs: [build-unix, build-windows, build-musl, build-snap]
steps:
- uses: actions/download-artifact@v5
- uses: actions/download-artifact@v6
with:
merge-multiple: true
@ -231,7 +231,7 @@ jobs:
- uses: actions/checkout@v5
- uses: actions/download-artifact@v5
- uses: actions/download-artifact@v6
with:
merge-multiple: true

View file

@ -8,7 +8,7 @@ jobs:
winget:
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v5
- uses: actions/download-artifact@v6
with:
merge-multiple: true

1532
CHANGELOG.md Normal file

File diff suppressed because it is too large Load diff

77
Cargo.lock generated
View file

@ -91,7 +91,7 @@ version = "7.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67555e1f1ece39d737e28c8a017721287753af3f93225e4a445b29ccb0f5912c"
dependencies = [
"nom",
"nom 7.1.3",
"ratatui",
"simdutf8",
"smallvec",
@ -221,14 +221,14 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
[[package]]
name = "av1-grain"
version = "0.2.4"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4f3efb2ca85bc610acfa917b5aaa36f3fcbebed5b3182d7f877b02531c4b80c8"
checksum = "8cfddb07216410377231960af4fcab838eaa12e013417781b78bd95ee22077f8"
dependencies = [
"anyhow",
"arrayvec",
"log",
"nom",
"nom 8.0.0",
"num-rational",
"v_frame",
]
@ -383,9 +383,9 @@ dependencies = [
[[package]]
name = "bstr"
version = "1.12.0"
version = "1.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4"
checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab"
dependencies = [
"memchr",
"serde",
@ -459,9 +459,9 @@ dependencies = [
[[package]]
name = "cc"
version = "1.2.41"
version = "1.2.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7"
checksum = "739eb0f94557554b3ca9a86d2d37bebd49c5e6d0c1d2bda35ba5bdac830befc2"
dependencies = [
"find-msvc-tools",
"jobserver",
@ -930,9 +930,9 @@ dependencies = [
[[package]]
name = "deranged"
version = "0.5.4"
version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071"
checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587"
dependencies = [
"powerfmt",
]
@ -1024,9 +1024,9 @@ dependencies = [
[[package]]
name = "document-features"
version = "0.2.11"
version = "0.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d"
checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61"
dependencies = [
"litrs",
]
@ -1260,9 +1260,9 @@ checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127"
[[package]]
name = "flate2"
version = "1.1.4"
version = "1.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9"
checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb"
dependencies = [
"crc32fast",
"miniz_oxide",
@ -1454,9 +1454,9 @@ checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7"
[[package]]
name = "globset"
version = "0.4.17"
version = "0.4.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eab69130804d941f8075cfd713bf8848a2c3b3f201a9457a11e6f87e1ab62305"
checksum = "52dfc19153a48bde0cbd630453615c8151bce3a5adfac7a0aebfbf0a1e1f57e3"
dependencies = [
"aho-corasick",
"bstr",
@ -1591,11 +1591,11 @@ dependencies = [
[[package]]
name = "home"
version = "0.5.11"
version = "0.5.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf"
checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d"
dependencies = [
"windows-sys 0.59.0",
"windows-sys 0.61.2",
]
[[package]]
@ -1962,9 +1962,9 @@ checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
[[package]]
name = "litrs"
version = "0.4.2"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed"
checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092"
[[package]]
name = "lock_api"
@ -2084,14 +2084,14 @@ dependencies = [
[[package]]
name = "mio"
version = "1.0.4"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c"
checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873"
dependencies = [
"libc",
"log",
"wasi",
"windows-sys 0.59.0",
"windows-sys 0.61.2",
]
[[package]]
@ -2145,9 +2145,9 @@ dependencies = [
[[package]]
name = "moxcms"
version = "0.7.7"
version = "0.7.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c588e11a3082784af229e23e8e4ecf5bcc6fbe4f69101e0421ce8d79da7f0b40"
checksum = "692af879e4d9383c0fd9dec15524af6b6977c8bf1c6b278a4526d5341347c574"
dependencies = [
"num-traits",
"pxfm",
@ -2181,6 +2181,15 @@ dependencies = [
"minimal-lexical",
]
[[package]]
name = "nom"
version = "8.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405"
dependencies = [
"memchr",
]
[[package]]
name = "noop_proc_macro"
version = "0.3.0"
@ -2751,9 +2760,9 @@ dependencies = [
[[package]]
name = "proc-macro2"
version = "1.0.101"
version = "1.0.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de"
checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
dependencies = [
"unicode-ident",
]
@ -3416,9 +3425,9 @@ dependencies = [
[[package]]
name = "signal-hook-mio"
version = "0.2.4"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd"
checksum = "b75a19a7a740b25bc7944bdee6172368f988763b744e3d4dfe753f6b4ece40cc"
dependencies = [
"libc",
"mio",
@ -3586,9 +3595,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
[[package]]
name = "syn"
version = "2.0.107"
version = "2.0.108"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b"
checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917"
dependencies = [
"proc-macro2",
"quote",
@ -3942,9 +3951,9 @@ dependencies = [
[[package]]
name = "trash"
version = "5.2.3"
version = "5.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "65a334451012017a39758aa85a30827c13ac684245bf6b08249483c063f64ff3"
checksum = "a9b93a14fcf658568eb11b3ac4cb406822e916e2c55cdebc421beeb0bd7c94d8"
dependencies = [
"chrono",
"libc",

View file

@ -30,7 +30,7 @@ crossterm = { version = "0.29.0", features = [ "event-stream" ] }
dirs = "6.0.0"
foldhash = "0.2.0"
futures = "0.3.31"
globset = "0.4.17"
globset = "0.4.18"
hashbrown = { version = "0.16.0", features = [ "serde" ] }
indexmap = { version = "2.12.0", features = [ "serde" ] }
libc = "0.2.177"

View file

@ -5,7 +5,8 @@ use yazi_core::tab::Folder;
use yazi_fs::{CWD, Files, FilesOp, cha::Cha};
use yazi_macro::{act, succ};
use yazi_parser::VoidOpt;
use yazi_shared::{data::Data, url::UrlBuf};
use yazi_proxy::MgrProxy;
use yazi_shared::{data::Data, scheme::SchemeLike, url::UrlBuf};
use yazi_term::tty::TTY;
use yazi_vfs::{VfsFiles, VfsFilesOp};
@ -19,7 +20,7 @@ impl Actor for Refresh {
const NAME: &str = "refresh";
fn act(cx: &mut Ctx, _: Self::Options) -> Result<Data> {
if let (_, Some(s)) = (CWD.set(cx.cwd()), YAZI.mgr.title()) {
if let (_, Some(s)) = (CWD.set(cx.cwd(), Self::cwd_changed), YAZI.mgr.title()) {
execute!(TTY.writer(), SetTitle(s)).ok();
}
@ -39,8 +40,14 @@ impl Actor for Refresh {
}
impl Refresh {
fn cwd_changed() {
if CWD.load().scheme.is_virtual() {
MgrProxy::watch();
}
}
// TODO: performance improvement
pub fn trigger_dirs(folders: &[&Folder]) {
fn trigger_dirs(folders: &[&Folder]) {
async fn go(cwd: UrlBuf, cha: Cha) {
let Some(cha) = Files::assert_stale(&cwd, cha).await else { return };

View file

@ -13,5 +13,5 @@ proc-macro = true
[dependencies]
# External dependencies
syn = { version = "2.0.107", features = [ "full" ] }
syn = { version = "2.0.108", features = [ "full" ] }
quote = "1.0.41"

View file

@ -99,8 +99,8 @@ perm_exec = { fg = "cyan" }
# Progress
progress_label = { bold = true }
progress_normal = { fg = "blue", bg = "black" }
progress_error = { fg = "blue", bg = "red" }
progress_normal = { fg = "green", bg = "black" }
progress_error = { fg = "yellow", bg = "red" }
# : }}}

View file

@ -99,8 +99,8 @@ perm_exec = { fg = "cyan" }
# Progress
progress_label = { bold = true }
progress_normal = { fg = "blue", bg = "black" }
progress_error = { fg = "blue", bg = "red" }
progress_normal = { fg = "green", bg = "gray" }
progress_error = { fg = "yellow", bg = "red" }
# : }}}

View file

@ -41,4 +41,4 @@ core-foundation-sys = { workspace = true }
objc = { workspace = true }
[target.'cfg(not(target_os = "android"))'.dependencies]
trash = "5.2.3"
trash = "5.2.5"

View file

@ -33,7 +33,7 @@ impl Cwd {
url.cache().unwrap_or_else(|| url.loc.to_path())
}
pub fn set(&self, url: &UrlBuf) -> bool {
pub fn set(&self, url: &UrlBuf, callback: fn()) -> bool {
if !url.is_absolute() {
return false;
} else if self.0.load().as_ref() == url {
@ -41,7 +41,7 @@ impl Cwd {
}
self.0.store(Arc::new(url.clone()));
Self::sync_cwd();
Self::sync_cwd(callback);
true
}
@ -88,7 +88,7 @@ impl Cwd {
cache.into()
}
fn sync_cwd() {
fn sync_cwd(callback: fn()) {
static SYNCING: AtomicBool = AtomicBool::new(false);
if SYNCING.swap(true, Ordering::Relaxed) {
return;
@ -98,7 +98,7 @@ impl Cwd {
let cwd = CWD.load();
let path = Self::ensure(cwd.as_url());
_ = set_current_dir(&path);
set_current_dir(&path).ok();
let cur = current_dir().unwrap_or_default();
unsafe { std::env::set_var("PWD", path.as_ref()) }
@ -110,6 +110,8 @@ impl Cwd {
set_current_dir(&path).ok();
unsafe { std::env::set_var("PWD", path.as_ref()) }
}
callback();
});
}
}

View file

@ -26,10 +26,7 @@ impl FsHash128 for Cha {
fn hash_u128(&self) -> u128 {
let mut h = Twox128::default();
self.kind.bits().hash(&mut h);
self.mode.bits().hash(&mut h);
self.len.hash(&mut h);
self.btime_dur().ok().map(|d| d.as_nanos()).hash(&mut h);
self.mtime_dur().ok().map(|d| d.as_nanos()).hash(&mut h);

View file

@ -29,9 +29,9 @@ function Progress:redraw()
local gauge = ui.Gauge():area(self._area)
if summary.failed == 0 then
gauge = gauge:gauge_style(th.status.progress_normal)
gauge:gauge_style(th.status.progress_normal)
else
gauge = gauge:gauge_style(th.status.progress_error)
gauge:gauge_style(th.status.progress_error)
end
local label, percent = "", summary.percent

View file

@ -50,6 +50,10 @@ impl MgrProxy {
));
}
pub fn watch() {
emit!(Call(relay!(mgr:watch)));
}
pub fn update_peeked(opt: UpdatePeekedOpt) {
emit!(Call(relay!(mgr:update_peeked).with_any("opt", opt)));
}

View file

@ -4,7 +4,7 @@ use anyhow::{Context, Result, anyhow};
use tokio::{io::{self, ErrorKind::{AlreadyExists, NotFound}}, sync::mpsc};
use tracing::warn;
use yazi_config::YAZI;
use yazi_fs::{Cwd, FsHash128, FsUrl, cha::Cha, ok_or_not_found, path::{path_relative_to, skip_url}, provider::{DirReader, FileHolder, Provider, local::Local}};
use yazi_fs::{Cwd, FsHash128, FsUrl, cha::Cha, ok_or_not_found, path::{path_relative_to, skip_url}, provider::{Attrs, DirReader, FileHolder, Provider, local::Local}};
use yazi_macro::ok_or_not_found;
use yazi_shared::{scheme::SchemeLike, timestamp_us, url::{AsUrl, UrlBuf, UrlCow, UrlLike}};
use yazi_vfs::{VfsCha, copy_with_progress, maybe_exists, provider::{self, DirEntry}, unique_name};
@ -353,6 +353,7 @@ impl File {
while let Some(res) = it.recv().await {
match res {
Ok(0) => {
Local.remove_dir_all(&cache).await.ok();
provider::rename(cache_tmp, cache).await.context("Cannot persist downloaded file")?;
let lock = task.url.cache_lock().context("Cannot determine cache lock")?;
@ -454,7 +455,12 @@ impl File {
}
let tmp = Self::tmp(&task.url).await.context("Cannot determine temporary upload path")?;
let mut it = copy_with_progress(&task.cache, &tmp, task.cha);
let mut it = copy_with_progress(&task.cache, &tmp, Attrs {
mode: Some(task.cha.mode),
atime: None,
btime: None,
mtime: None,
});
while let Some(res) = it.recv().await {
match res {

View file

@ -50,7 +50,7 @@ impl Reporter {
fn report_remote<'a>(&self, url: UrlCow<'a>) {
let Some(parent) = url.parent() else { return };
if !WATCHED.read().contains(&url) {
if !WATCHED.read().contains(parent) {
return;
}

View file

@ -5,7 +5,7 @@ use percent_encoding::percent_decode_str;
use yazi_fs::{Xdg, path::PercentEncoding};
use yazi_shared::{scheme::SchemeRef, url::{AsUrl, UrlBuf, UrlLike}};
#[derive(Default)]
#[derive(Debug, Default)]
pub struct Watched(HashSet<UrlBuf>);
impl Watched {