Zelfde bestand in twee OciDeck-vensters: laatste opslag wint zonder waarschuwing #1951

Closed
opened 2026-09-03 10:14:32 +00:00 by brenno · 0 comments
Owner

Het probleem

Binnen één venster opent OciDeck hetzelfde pad niet twee keer: het springt naar het bestaande tabblad. Twee OciDeck-vensters (of twee processen) kunnen hetzelfde .md wél allebei openen. Elke kant bewerkt onafhankelijk. Wie het laatst opslaat, wint; de andere wijzigingen zijn weg. Geen melding, geen bestandslock, geen "dit bestand is elders gewijzigd".

Op een laptop met een extra venster voor presenteren-plus-bewerken, of met twee projecten in twee vensters, is dat een realistisch pad.

Hoe het nu werkt

lib/state/tabs_provider.dart, openFileByPath:

// Dezelfde presentatie hoort maar één keer open te staan. Staat dit bestand
// al in een tabblad, spring er dan naartoe ...
final existing = _indexOfOpenPath(this, path);

_indexOfOpenPath kijkt alleen in déze TabsNotifier — één venster. Er is geen lockfile naast het deck, geen mtime-vergelijking bij opslaan, geen watcher.

open_duplicate_path_test.dart dekt het intra-venster-gedrag; multi-window niet.

Denkrichting (niet uitgewerkt)

Minimum: bij opslaan de mtime/hash van het bestand vergelijken met wat bij openen is gezien. Als een ander het bestand intussen schreef: dialoog (overschrijven / herladen / opslaan-als), niet stil overschrijven.

Sterker: een lockfile naast het project (of advisory lock) zolang een venster het pad open heeft, met een duidelijke melding bij het tweede openen. Lockfiles zijn kwetsbaar bij crashes — combineer met stale-lock-timeout.

Geen formaatwijziging van de .md; een lockfile zou een sidecar-achtig bestand zijn en hoort eerst langs de formaatgrens.

Raakvlakken

  • lib/state/tabs_provider.dart (openFileByPath, _indexOfOpenPath)
  • lib/state/deck_provider.dart (_saveToPath)
  • test/open_duplicate_path_test.dart
## Het probleem Binnen één venster opent OciDeck hetzelfde pad niet twee keer: het springt naar het bestaande tabblad. Twee OciDeck-vensters (of twee processen) kunnen hetzelfde `.md` wél allebei openen. Elke kant bewerkt onafhankelijk. Wie het laatst opslaat, wint; de andere wijzigingen zijn weg. Geen melding, geen bestandslock, geen "dit bestand is elders gewijzigd". Op een laptop met een extra venster voor presenteren-plus-bewerken, of met twee projecten in twee vensters, is dat een realistisch pad. ## Hoe het nu werkt `lib/state/tabs_provider.dart`, `openFileByPath`: ```dart // Dezelfde presentatie hoort maar één keer open te staan. Staat dit bestand // al in een tabblad, spring er dan naartoe ... final existing = _indexOfOpenPath(this, path); ``` `_indexOfOpenPath` kijkt alleen in déze `TabsNotifier` — één venster. Er is geen lockfile naast het deck, geen mtime-vergelijking bij opslaan, geen watcher. `open_duplicate_path_test.dart` dekt het intra-venster-gedrag; multi-window niet. ## Denkrichting (niet uitgewerkt) Minimum: bij opslaan de mtime/hash van het bestand vergelijken met wat bij openen is gezien. Als een ander het bestand intussen schreef: dialoog (overschrijven / herladen / opslaan-als), niet stil overschrijven. Sterker: een lockfile naast het project (of advisory lock) zolang een venster het pad open heeft, met een duidelijke melding bij het tweede openen. Lockfiles zijn kwetsbaar bij crashes — combineer met stale-lock-timeout. Geen formaatwijziging van de `.md`; een lockfile zou een sidecar-achtig bestand zijn en hoort eerst langs de formaatgrens. ## Raakvlakken - `lib/state/tabs_provider.dart` (`openFileByPath`, `_indexOfOpenPath`) - `lib/state/deck_provider.dart` (`_saveToPath`) - `test/open_duplicate_path_test.dart`
brenno 2026-09-03 16:35:06 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#1951
No description provided.