fix(save): waarschuwing bij conflicterende opslag van hetzelfde bestand (#1951) #1974

Merged
brenno merged 1 commit from fix/twee-vensters-conflict-1951 into main 2026-09-03 16:41:35 +00:00
Owner

Samenvatting

Twee OciDeck-vensters kunnen hetzelfde .md-bestand allebei openen. Wie het laatst opslaat wint; de andere wijzigingen zijn weg — geen melding, geen bestandslock, geen mtime-vergelijking.

Nu vergelijkt DeckNotifier bij opslaan de mtime van het bestand op schijf met wat bij openen is gezien. Wijkt die af, dan toont de schil een dialoog: overschrijven, herladen of opslaan als. Niet stil overschrijven.

Wat er verandert

  • lib/services/file_service.dart: fileMtime en fileChangedSince — mtime lezen en vergelijken.
  • lib/state/deck_provider.dart: _fileMtime veld, opgenomen bij openen (loadDeck), bijgewerkt bij opslaan (_saveToPath, saveAs). fileChangedExternally() en reloadFromDisk() voor de conflict-detectie en herladen.
  • lib/widgets/shell/shell_actions_connections.dart: conflict-check in saveDeckWithDestination vóór opslaan, met _showLocalConflictDialog (overschrijven / herladen / opslaan als).
  • lib/l10n/translations/: 2 nieuwe strings in 31 talen.
  • test/local_file_conflict_test.dart: 5 tests voor mtime-tracking, conflict-detectie en herladen.

Bewaker

Geen formaatwijziging, geen lockfile, geen sidecar — alleen een mtime vergelijken. De webversie heeft geen lokaal bestandssysteem en gaat niet langs dit pad.

Test plan

  • make check groen (11000+ tests, golden suite, alle poorten)
  • make check-secrets schoon (gitleaks + trufflehog)
  • make sast schoon (semgrep, 0 bevindingen)
  • make l10n-check groen (31 talen, 2 nieuwe strings)
  • 5 nieuwe tests: mtime na openen, na externe wijziging, na eigen opslaan, herladen, zonder bestandspad

Generated with Devin

## Samenvatting Twee OciDeck-vensters kunnen hetzelfde `.md`-bestand allebei openen. Wie het laatst opslaat wint; de andere wijzigingen zijn weg — geen melding, geen bestandslock, geen mtime-vergelijking. Nu vergelijkt `DeckNotifier` bij opslaan de mtime van het bestand op schijf met wat bij openen is gezien. Wijkt die af, dan toont de schil een dialoog: overschrijven, herladen of opslaan als. Niet stil overschrijven. ### Wat er verandert - `lib/services/file_service.dart`: `fileMtime` en `fileChangedSince` — mtime lezen en vergelijken. - `lib/state/deck_provider.dart`: `_fileMtime` veld, opgenomen bij openen (`loadDeck`), bijgewerkt bij opslaan (`_saveToPath`, `saveAs`). `fileChangedExternally()` en `reloadFromDisk()` voor de conflict-detectie en herladen. - `lib/widgets/shell/shell_actions_connections.dart`: conflict-check in `saveDeckWithDestination` vóór opslaan, met `_showLocalConflictDialog` (overschrijven / herladen / opslaan als). - `lib/l10n/translations/`: 2 nieuwe strings in 31 talen. - `test/local_file_conflict_test.dart`: 5 tests voor mtime-tracking, conflict-detectie en herladen. ### Bewaker Geen formaatwijziging, geen lockfile, geen sidecar — alleen een mtime vergelijken. De webversie heeft geen lokaal bestandssysteem en gaat niet langs dit pad. #### Test plan - [x] `make check` groen (11000+ tests, golden suite, alle poorten) - [x] `make check-secrets` schoon (gitleaks + trufflehog) - [x] `make sast` schoon (semgrep, 0 bevindingen) - [x] `make l10n-check` groen (31 talen, 2 nieuwe strings) - [x] 5 nieuwe tests: mtime na openen, na externe wijziging, na eigen opslaan, herladen, zonder bestandspad Generated with [Devin](https://devin.ai)
fix(save): waarschuwing bij conflicterende opslag van hetzelfde bestand (#1951)
All checks were successful
scans / scans (pull_request) Successful in 2m57s
static-gate / static-gate (pull_request) Successful in 7m0s
c7546359c2
Twee OciDeck-vensters kunnen hetzelfde .md-bestand allebei openen. Wie
het laatst opslaat wint; de andere wijzigingen zijn weg — geen melding,
geen bestandslock, geen mtime-vergelijking.

Nu vergelijkt DeckNotifier bij opslaan de mtime van het bestand op schijf
met wat bij openen is gezien. Wijkt die af, dan toont de schil een dialoog:
overschrijven, herladen of opslaan als. Niet stil overschrijven.

- FileService.fileMtime/fileChangedSince: mtime lezen en vergelijken.
- DeckNotifier._fileMtime: opgenomen bij openen, bijgewerkt bij opslaan.
- DeckNotifier.fileChangedExternally/reloadFromDisk: conflict-detectie
  en herladen vanaf schijf.
- saveDeckWithDestination: conflict-check vóór opslaan, met dialoog.
- L10n: 2 nieuwe strings in 31 talen.

Geen formaatwijziging, geen lockfile, geen sidecar — alleen een mtime
vergelijken. De webversie heeft geen lokaal bestandssysteem en gaat
niet langs dit pad.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
brenno force-pushed fix/twee-vensters-conflict-1951 from c7546359c2
All checks were successful
scans / scans (pull_request) Successful in 2m57s
static-gate / static-gate (pull_request) Successful in 7m0s
to d0b5e7df75
All checks were successful
scans / scans (pull_request) Successful in 2m32s
static-gate / static-gate (pull_request) Successful in 5m49s
2026-09-03 16:35:32 +00:00
Compare
brenno merged commit 58730e2542 into main 2026-09-03 16:41:34 +00:00
Sign in to join this conversation.
No description provided.