Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -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"
Expand Down
2 changes: 1 addition & 1 deletion PKGBUILD
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Maintainer: gnacho <https://github.com/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')
Expand Down
4 changes: 2 additions & 2 deletions README.es.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
</p>
<p>
<a href="https://github.com/gnacho/nextsync/actions/workflows/ci.yml"><img src="https://github.com/gnacho/nextsync/actions/workflows/ci.yml/badge.svg" alt="Estado de CI"></a>
<img src="https://img.shields.io/badge/version-0.2.18-blue?style=flat-square" alt="Versión 0.2.18">
<img src="https://img.shields.io/badge/version-0.2.20-blue?style=flat-square" alt="Versión 0.2.20">
<img src="https://img.shields.io/badge/license-GPL--3.0%2B-informational?style=flat-square" alt="GNU GPL v3 o posterior">
</p>
</div>
Expand Down Expand Up @@ -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.
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
</p>
<p>
<a href="https://github.com/gnacho/nextsync/actions/workflows/ci.yml"><img src="https://github.com/gnacho/nextsync/actions/workflows/ci.yml/badge.svg" alt="CI status"></a>
<img src="https://img.shields.io/badge/version-0.2.18-blue?style=flat-square" alt="Version 0.2.18">
<img src="https://img.shields.io/badge/version-0.2.20-blue?style=flat-square" alt="Version 0.2.20">
<img src="https://img.shields.io/badge/license-GPL--3.0%2B-informational?style=flat-square" alt="GNU GPL v3 or later">
</p>
</div>
Expand Down Expand Up @@ -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`.
Expand Down
1 change: 1 addition & 0 deletions data/io.github.gnacho.nextsync.metainfo.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
<icon type="stock">io.github.gnacho.nextsync</icon>
<content_rating type="oars-1.1"/>
<releases>
<release version="0.2.20" date="2026-09-08"/>
<release version="0.2.18" date="2026-09-08"/>
<release version="0.2.16" date="2026-08-27"/>
<release version="0.2.14" date="2026-08-26"/>
Expand Down
2 changes: 1 addition & 1 deletion landing/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ <h3 data-i18n="compare.ht">Lo que NextSync no hace (todavía)</h3>
<h2 class="reveal" data-i18n="install.title">Instalación fácil y rápida</h2>
<p class="lead reveal" data-i18n="install.lead">En Arch, CachyOS y derivadas hay paquete listo en cada release.</p>
<div class="card install-card reveal">
<pre class="code-block"><code id="installCmd">sudo pacman -U nextsync-0.2.18-1-x86_64.pkg.tar.zst</code></pre>
<pre class="code-block"><code id="installCmd">sudo pacman -U nextsync-0.2.20-1-x86_64.pkg.tar.zst</code></pre>
<button class="btn suggested" id="copyBtn" data-i18n="install.copy">Copiar comando</button>
<p class="small-print" data-i18n="install.note">Descarga el paquete <code>.pkg.tar.zst</code> más reciente desde <a href="https://github.com/gnacho/nextsync/releases" target="_blank" rel="noopener">GitHub Releases</a> y ajusta el nombre del fichero.</p>
</div>
Expand Down
33 changes: 29 additions & 4 deletions src/ui/main_window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<String> = Vec::new();
for row in &review_rows {
match row {
crate::core::delete_guard::DeletionReviewRow::Group {
Expand All @@ -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.")
Expand Down
8 changes: 4 additions & 4 deletions version.json
Original file line number Diff line number Diff line change
@@ -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"
}
Loading