Ordner-Dialog und Anlegen-Flow #12

Merged
RDietermann merged 1 commits from feat/ordner-dialog into feat/workspace-liste 2026-08-28 07:58:23 +00:00
Owner

Setzt die Entscheidungen aus #2 (Ordner-Dialog), #4 (Marker-Format) und #6 (Fehlerfälle) um.

Basiert auf feat/workspace-liste (PR #11), weil der Flow die WorkspaceList braucht — deshalb ist der Ziel-Branch dieser PR nicht main. Nach dem Merge von #11 lässt sich der Ziel-Branch umstellen.

Der Marker

.dionotes/workspace.ron mit genau (schema_version: 1). Kein created_at, keine Vorratsfelder.

Zwei Verhaltensweisen sind durch Tests festgenagelt, weil sie später teuer zu ändern wären:

  • Anlegen ist additiv — vorhandene Dateien im Ordner bleiben unberührt.
  • Ein beschädigter Marker wird nicht neu geschrieben. Der Workspace öffnet nicht, die kaputte Datei bleibt liegen. Heute übervorsichtig; sobald dort ein Passwort-Hash liegt, wäre stillschweigendes Neuanlegen ein Weg, den Schutz auszuhebeln.

Die Fehlerzustände

OpenError unterscheidet die drei Zustände aus #6 — Unreachable, NotAWorkspace, Damaged — plus TooNew für einen Marker aus einer neueren Programmfassung. Die Display-Impl liefert genau die Formulierungen („nicht erreichbar", „kein Workspace mehr", „beschädigt"), mit denen in Schritt 4 die Listeneinträge markiert werden.

Der Flow

Fall Verhalten
Dialog abgebrochen nichts, keine Meldung — None ist eine Absage, keine Störung
Ordner ist bereits Workspace öffnen, nicht ablehnen
Ordner leer anlegen
Ordner nicht leer Rückfrage mit Hinweis, dass nichts verändert wird
Anlegen scheitert Fehler im Selector

Dass ein vorhandener Workspace geöffnet statt abgelehnt wird, ist das, was die Beschriftung „Workspace hinzufügen…" überhaupt rechtfertigt: derselbe Knopf nimmt neue und wiedergefundene Workspaces auf.

rfd kostet nichts

Eingebunden mit denselben Features, die dioxus-desktop ohnehin zieht — xdg-portal statt default. Mit den Default-Features wären neun Wayland-Pakete dazugekommen, die das Portal nicht braucht. So ergibt die explizite Abhängigkeit genau eine Zeile in Cargo.lock und keinen zusätzlichen Compile-Schritt.

Tests

14 grün. Neu sind sieben zur Marker-Logik: Roundtrip, additives Anlegen, fehlender Ordner, fehlender Marker, beschädigter Marker (samt Nachweis, dass er liegen bleibt), zu neues Schema, Leer-Erkennung. Ohne tempfile-Crate — der Testname macht das Scratch-Verzeichnis eindeutig.

Nicht automatisch geprüft

Der Dialog selbst. rfd::AsyncFileDialog::pick_folder() öffnet ein Betriebssystem-Fenster; das ist mit dx serve von Hand zu prüfen, nicht im Testlauf.

Setzt die Entscheidungen aus #2 (Ordner-Dialog), #4 (Marker-Format) und #6 (Fehlerfälle) um. **Basiert auf `feat/workspace-liste`** (PR #11), weil der Flow die `WorkspaceList` braucht — deshalb ist der Ziel-Branch dieser PR nicht `main`. Nach dem Merge von #11 lässt sich der Ziel-Branch umstellen. ## Der Marker `.dionotes/workspace.ron` mit genau `(schema_version: 1)`. Kein `created_at`, keine Vorratsfelder. Zwei Verhaltensweisen sind durch Tests festgenagelt, weil sie später teuer zu ändern wären: - **Anlegen ist additiv** — vorhandene Dateien im Ordner bleiben unberührt. - **Ein beschädigter Marker wird nicht neu geschrieben.** Der Workspace öffnet nicht, die kaputte Datei bleibt liegen. Heute übervorsichtig; sobald dort ein Passwort-Hash liegt, wäre stillschweigendes Neuanlegen ein Weg, den Schutz auszuhebeln. ## Die Fehlerzustände `OpenError` unterscheidet die drei Zustände aus #6 — `Unreachable`, `NotAWorkspace`, `Damaged` — plus `TooNew` für einen Marker aus einer neueren Programmfassung. Die `Display`-Impl liefert genau die Formulierungen („nicht erreichbar", „kein Workspace mehr", „beschädigt"), mit denen in Schritt 4 die Listeneinträge markiert werden. ## Der Flow | Fall | Verhalten | | --- | --- | | Dialog abgebrochen | nichts, keine Meldung — `None` ist eine Absage, keine Störung | | Ordner ist bereits Workspace | **öffnen**, nicht ablehnen | | Ordner leer | anlegen | | Ordner nicht leer | Rückfrage mit Hinweis, dass nichts verändert wird | | Anlegen scheitert | Fehler im Selector | Dass ein vorhandener Workspace geöffnet statt abgelehnt wird, ist das, was die Beschriftung „Workspace hinzufügen…" überhaupt rechtfertigt: derselbe Knopf nimmt neue **und** wiedergefundene Workspaces auf. ## `rfd` kostet nichts Eingebunden mit denselben Features, die `dioxus-desktop` ohnehin zieht — `xdg-portal` statt `default`. Mit den Default-Features wären **neun Wayland-Pakete** dazugekommen, die das Portal nicht braucht. So ergibt die explizite Abhängigkeit genau eine Zeile in `Cargo.lock` und keinen zusätzlichen Compile-Schritt. ## Tests 14 grün. Neu sind sieben zur Marker-Logik: Roundtrip, additives Anlegen, fehlender Ordner, fehlender Marker, beschädigter Marker (samt Nachweis, dass er liegen bleibt), zu neues Schema, Leer-Erkennung. Ohne `tempfile`-Crate — der Testname macht das Scratch-Verzeichnis eindeutig. ## Nicht automatisch geprüft Der Dialog selbst. `rfd::AsyncFileDialog::pick_folder()` öffnet ein Betriebssystem-Fenster; das ist mit `dx serve` von Hand zu prüfen, nicht im Testlauf.
RDietermann added 1 commit 2026-08-28 07:56:36 +00:00
Setzt die Entscheidungen aus #2, #4 und #6 um: Der Knopf "Workspace
hinzufuegen..." oeffnet den nativen Ordner-Dialog, legt den Marker an und
uebernimmt den Workspace in Context, Liste und Editor.

Der Marker ist .dionotes/workspace.ron mit genau (schema_version: 1). Er wird
additiv angelegt, vorhandene Dateien bleiben unberuehrt - ein Test haelt das
fest. Ein beschaedigter Marker fuehrt dazu, dass der Workspace nicht
geoeffnet und der Marker nicht neu geschrieben wird; auch das ist getestet,
denn sobald dort ein Passwort-Hash liegt, waere stillschweigendes Neuanlegen
ein Weg, den Schutz auszuhebeln.

OpenError unterscheidet die drei Zustaende aus #6 - nicht erreichbar, kein
Workspace mehr, beschaedigt - plus den Fall eines zu neuen Schemas. Die
Display-Impl liefert genau die Formulierungen, mit denen spaeter die
Listeneintraege markiert werden.

Der Flow folgt der Regel aus #6: Ein abgebrochener Dialog ist kein Fehler und
erzeugt keine Meldung. Ein Ordner, der bereits Workspace ist, wird geoeffnet
statt abgelehnt - derselbe Knopf nimmt neue und wiedergefundene Workspaces
auf, was seine Beschriftung erst rechtfertigt. Ein nicht leerer Ordner loest
eine Rueckfrage aus, die ausdruecklich sagt, dass nichts Vorhandenes
veraendert wird; das ist beim Import der Normalfall, keine Ausnahme.

rfd wird mit denselben Features eingebunden, die dioxus-desktop ohnehin zieht
(xdg-portal statt default). Mit den Default-Features waeren neun
Wayland-Pakete dazugekommen, die das Portal nicht braucht - so kostet die
explizite Abhaengigkeit keinen einzigen zusaetzlichen Eintrag.
RDietermann merged commit 28ed8240f9 into feat/workspace-liste 2026-08-28 07:58:23 +00:00
RDietermann deleted branch feat/ordner-dialog 2026-08-28 07:58:23 +00:00
Sign in to join this conversation.