Files
DOSSIER-WEBSITE/content/launcher/_index.md
T

101 lines
4.0 KiB
Markdown

---
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/<GUID>.xml
```
Display-Name aus dem `<RhinoUI name="…">` 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.