--- title: Dossier-Launcher linkTitle: Launcher weight: 3 toc: true --- Der **Dossier-Launcher** ist eine separate **Tauri 2** Standalone-App. Sie verwaltet Projekte, hält Settings, liefert Auto-Updates und lebt im System-Tray. Aktuell produktiv im Einsatz für Projekt-Switching, Window-Layout-Push und Plugin-Settings. ## Was er macht {{< cards >}} {{< card title="Projekt-Verwaltung" icon="collection" subtitle="Liste aller DOSSIER-Projekte mit Pfad, letztem Zugriff und Phase." >}} {{< card title="Settings-Sync" icon="cog" subtitle="Schreibt Plugin-Settings in dossier_settings.json — Rhino liest live." >}} {{< card title="Auto-Updates" icon="cloud-download" subtitle="Über tauri-plugin-updater, signiert mit Code-Signing-Key." >}} {{< card title="System-Tray" icon="desktop-computer" subtitle="Quick-Open der letzten 5 Projekte, ohne Hauptfenster zu öffnen." >}} {{< card title="Window-Layouts" icon="template" subtitle="Live-Push von Window-Layouts an laufende Rhino-Session." >}} {{< card title="Recent-Cache" icon="clock" subtitle="recent.json — letzte 50 geöffnete Projekte für Quick-Access." >}} {{< /cards >}} ## Technologie | Komponente | Stack | |--------------|------------------------------------| | Frontend | React + Vite (`launcher/src/`) | | Backend | Rust + Tauri 2 (`launcher/src-tauri/`) | | Update-Plugin| `tauri-plugin-updater` | | Tray-Plugin | `tauri-plugin-tray` | | IPC zu Rhino | Dateibasiert (kein Socket) | ## Settings-Files Pfad-Hierarchie: 1. **Primär** (Launcher schreibt): `~/Library/Application Support/ch.gabrielevarano.Dossier/dossier_settings.json` 2. **Legacy-Fallback** (read-only): `~/Library/Application Support/RhinoPanel/dossier_settings.json` Recent-Cache: `~/Library/Application Support/ch.gabrielevarano.Dossier/recent.json` ## Bekannte Settings-Keys | Key | Beschreibung | |----------------------|-------------------------------------------------------| | `windowLayout` | Aktives Window-Layout (XML-Display-Name) | | `autoApplyLayout` | Bool — Layout beim Projekt-Wechsel anwenden? | | `pendingApplyLayout` | Pending Layout-Name — wird von `oberleiste.tick_idle()` gepollt und gelöscht | | `rhinoApp` | Pfad zum Rhino-App-Bundle | | `templatePath` | Default-Template für neue Projekte | ## Window-Layouts auf Mac Mac Rhino 8 speichert Window-Layouts als **XML** unter: ```text ~/Library/Application Support/McNeel/Rhinoceros/8.0/settings/Scheme__Default/workspaces/.xml ``` Display-Name aus dem `` Attribut. Der Launcher liest diese Datei direkt — kein `.rwl` wie auf Windows. **Apply** via Reflection über `Rhino.UI.WindowLayout.*`, Fallback `_-SetActiveLayout "Name" _Enter`. ## Live-Push Workflow ```text Launcher ─writes─▶ pendingApplyLayout key ──▶ dossier_settings.json │ ▼ Rhino-Plugin: oberleiste.tick_idle() ─polls─▶ liest + clearet │ ▼ Window-Layout aktiv ``` Polling-Intervall: 500 ms im Rhino-Idle-Handler. Latenz spürbar < 1 s. ## Setup ```bash cd launcher npm install npm run tauri dev # Development-Mode ``` Release-Build mit Code-Signing: ```bash cd launcher ./scripts/release.sh # → schreibt latest.json für Updater ``` Voraussetzungen siehe [Tauri Prerequisites](https://v2.tauri.app/start/prerequisites/). ## Standalone **Rhino läuft ohne Launcher** — Settings haben sinnvolle Defaults, Plugin funktioniert direkt aus dem PackageManager-Install. **Launcher läuft ohne Rhino** — Projekt-Verwaltung, Settings-Editor und Updates funktionieren auch ohne installiertes Rhino. IPC ist bewusst dateibasiert.