Zelfde bestand in twee OciDeck-vensters: laatste opslag wint zonder waarschuwing #1951
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#1951
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
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
.mdwé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:_indexOfOpenPathkijkt alleen in dézeTabsNotifier— één venster. Er is geen lockfile naast het deck, geen mtime-vergelijking bij opslaan, geen watcher.open_duplicate_path_test.dartdekt 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