diff --git a/CHANGELOG.md b/CHANGELOG.md
index 29cedef..1c5659a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,11 @@
Todas las versiones notables de NextSync se documentan aquí. El formato sigue [Keep a Changelog](https://keepachangelog.com/es/1.1.0/) y el versionado es **+0.0.2 por release, reiniciado en 0.1.4** (decisión del usuario, 22-Ago-2026; sustituye al +0.02 anterior).
+## [0.2.20] - 2026-09-08
+
+### Mejorado
+- **El resumen de un borrado masivo ahora muestra una vista previa de los archivos sueltos**: cuando la revisión se agrupa por carpeta (más de 50 archivos), los archivos que estaban en el nivel raíz ya no se reducen a un simple contador. Ahora se agrupan en una fila expandible "En el nivel raíz · N archivos" con una vista previa de los primeros 15 y un "y M más…", para que veas qué se va a borrar sin tener que recorrer una lista de cientos de filas.
+
## [0.2.18] - 2026-09-08
### Añadido
diff --git a/Cargo.lock b/Cargo.lock
index 3ef9461..d9ba8f9 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1283,7 +1283,7 @@ dependencies = [
[[package]]
name = "nextsync"
-version = "0.2.18"
+version = "0.2.20"
dependencies = [
"async-channel",
"data-encoding",
diff --git a/Cargo.toml b/Cargo.toml
index 16944c2..2066df2 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "nextsync"
-version = "0.2.18"
+version = "0.2.20"
edition = "2021"
rust-version = "1.83"
license = "GPL-3.0-or-later"
diff --git a/PKGBUILD b/PKGBUILD
index a1aa77e..e2ef713 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,6 +1,6 @@
# Maintainer: gnacho
pkgname=nextsync
-pkgver=0.2.18
+pkgver=0.2.20
pkgrel=1
pkgdesc='Nextcloud desktop synchronization client for GNOME (Rust rewrite)'
arch=('x86_64' 'aarch64')
diff --git a/README.es.md b/README.es.md
index 2e568b7..9a5eadf 100644
--- a/README.es.md
+++ b/README.es.md
@@ -17,7 +17,7 @@
-
+
@@ -84,7 +84,7 @@ Ambos motores se esconden detrás del mismo trait pequeño, así que un proveedo
Descarga el `.pkg.tar.zst` de la [última release](https://github.com/gnacho/nextsync/releases/latest) e instálalo:
```bash
-sudo pacman -U nextsync-0.2.18-1-x86_64.pkg.tar.zst
+sudo pacman -U nextsync-0.2.20-1-x86_64.pkg.tar.zst
```
El paquete depende de `gtk4` y `libadwaita`. Para cuentas Nextcloud instala `nextcloud-client` (aporta `nextcloudcmd`); para cuentas OpenCloud, el `opencloudcmd` oficial.
diff --git a/README.md b/README.md
index 070909f..1c7b209 100644
--- a/README.md
+++ b/README.md
@@ -17,7 +17,7 @@
-
+
@@ -84,7 +84,7 @@ Both engines sit behind the same small trait, so a new provider is a command bui
Download the `.pkg.tar.zst` from the [latest release](https://github.com/gnacho/nextsync/releases/latest) and install it:
```bash
-sudo pacman -U nextsync-0.2.18-1-x86_64.pkg.tar.zst
+sudo pacman -U nextsync-0.2.20-1-x86_64.pkg.tar.zst
```
The package depends on `gtk4` and `libadwaita`. For Nextcloud accounts install `nextcloud-client` (it provides `nextcloudcmd`); for OpenCloud accounts, the official `opencloudcmd`.
diff --git a/data/io.github.gnacho.nextsync.metainfo.xml b/data/io.github.gnacho.nextsync.metainfo.xml
index f3dafe0..613bbf2 100644
--- a/data/io.github.gnacho.nextsync.metainfo.xml
+++ b/data/io.github.gnacho.nextsync.metainfo.xml
@@ -32,6 +32,7 @@
io.github.gnacho.nextsync
+
diff --git a/landing/index.html b/landing/index.html
index 316b2bf..e9bf8e9 100644
--- a/landing/index.html
+++ b/landing/index.html
@@ -210,7 +210,7 @@
Lo que NextSync no hace (todavía)
Instalación fácil y rápida
En Arch, CachyOS y derivadas hay paquete listo en cada release.
Descarga el paquete .pkg.tar.zst más reciente desde GitHub Releases y ajusta el nombre del fichero.
diff --git a/src/ui/main_window.rs b/src/ui/main_window.rs
index 1949533..c1d6486 100644
--- a/src/ui/main_window.rs
+++ b/src/ui/main_window.rs
@@ -1372,7 +1372,9 @@ impl MainWindow {
// the per-file wall. Show folder-level counters only (the alert
// body already carries the exact total), so several hundred
// flat files stay readable instead of a 200-row list.
+ const LOOSE_PREVIEW_CAP: usize = 15;
let mut loose_count = 0usize;
+ let mut loose_preview: Vec = Vec::new();
for row in &review_rows {
match row {
crate::core::delete_guard::DeletionReviewRow::Group {
@@ -1388,16 +1390,39 @@ impl MainWindow {
group_row.set_enable_expansion(false);
list.append(&group_row);
}
- crate::core::delete_guard::DeletionReviewRow::File(_) => loose_count += 1,
+ crate::core::delete_guard::DeletionReviewRow::File(path) => {
+ if loose_preview.len() < LOOSE_PREVIEW_CAP {
+ loose_preview.push(path.clone());
+ }
+ loose_count += 1;
+ }
}
}
if loose_count > 0 {
- let loose_row = libadwaita::ActionRow::builder()
+ let loose_row = libadwaita::ExpanderRow::builder()
.title(t("At the top level"))
.subtitle(t("{count} files").replace("{count}", &loose_count.to_string()))
- .activatable(false)
- .selectable(false)
.build();
+ for path in &loose_preview {
+ let child = libadwaita::ActionRow::builder()
+ .title(path)
+ .activatable(false)
+ .selectable(false)
+ .build();
+ loose_row.add_row(&child);
+ }
+ if loose_count > LOOSE_PREVIEW_CAP {
+ let more =
+ libadwaita::ActionRow::builder()
+ .title(t("{count} more…").replace(
+ "{count}",
+ &(loose_count - LOOSE_PREVIEW_CAP).to_string(),
+ ))
+ .activatable(false)
+ .selectable(false)
+ .build();
+ loose_row.add_row(&more);
+ }
list.append(&loose_row);
}
t("These deletions will be propagated to the server when it synchronizes.")
diff --git a/version.json b/version.json
index 2d37976..1d45203 100644
--- a/version.json
+++ b/version.json
@@ -1,11 +1,11 @@
{
"schema_version": 1,
- "version": "0.2.18",
+ "version": "0.2.20",
"mandatory": false,
- "summary": "Added a proactive desktop notification when the deletion guard pauses synchronization for a mass local deletion.",
+ "summary": "Improved the mass-deletion review summary for a large number of flat files.",
"changelog": [
- "The deletion guard now raises a critical desktop notification when it detects an abnormal number of missing local files and pauses synchronization to protect them before they can be deleted from Nextcloud. The notification explains the pause and offers a Review Now button that opens the deletion review directly, even when the app is running only in the tray.",
- "Deletions originating from the server, the web interface or a mobile client continue to be handled by the sync engine and never require local confirmation."
+ "When the deletion guard pauses for many files sitting at the top level of a folder, the review now shows a preview of the first files and a 'N more' note instead of just a bare counter, so you can see what was removed without scrolling a hundreds-row list.",
+ "Files inside subfolders keep the folder grouping; individual rows are only listed when the number of missing files is small."
],
"released_at": "2026-09-08T00:00:00Z"
}