v1.5.28: Visuelle Fortschrittsanzeigen (JDownloader 2 Style)
Build and Release / build (push) Has been cancelled
Build and Release / build (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
# Native Menüleiste (JDownloader 2 Style)
|
||||
|
||||
## Context
|
||||
Die App hat aktuell keine native Menüleiste (nur ein Tray-Kontextmenü). Der User möchte eine Menüleiste oben links wie bei JDownloader 2 mit Datei-Menü, Shortcuts und Sicherungs-Funktion.
|
||||
|
||||
## Features
|
||||
|
||||
### "Datei"-Menü (oben links)
|
||||
| Menüpunkt | Shortcut | Aktion |
|
||||
|-----------|----------|--------|
|
||||
| Text mit Links analysieren | Ctrl+L | Wechselt zum Linksammler-Tab |
|
||||
| Linkcontainer laden | Ctrl+O | Öffnet DLC-Dateiauswahl (existiert bereits) |
|
||||
| --- Separator --- | | |
|
||||
| Sicherung → Backup erstellen | | Exportiert Queue als JSON (existiert: `exportQueue`) |
|
||||
| Sicherung → Backup laden | | Importiert Queue-JSON (existiert: `importQueue`) |
|
||||
| --- Separator --- | | |
|
||||
| Neustart | Ctrl+Shift+R | `app.relaunch()` + `app.quit()` |
|
||||
| Beenden | Ctrl+Q | `app.quit()` |
|
||||
|
||||
## Implementation
|
||||
|
||||
### Step 1: Neue IPC-Channels
|
||||
**Datei:** `src/shared/ipc.ts`
|
||||
- `NAVIGATE_TAB: "app:navigate-tab"` — Renderer wechselt Tab
|
||||
- `RESTART: "app:restart"` — App neustarten
|
||||
- `SAVE_BACKUP: "dialog:save-backup"` — Save-Dialog + Export
|
||||
- `LOAD_BACKUP: "dialog:load-backup"` — Open-Dialog + Import
|
||||
|
||||
### Step 2: Preload-API erweitern
|
||||
**Datei:** `src/shared/preload-api.ts` + `src/preload/preload.ts`
|
||||
- `onNavigateTab(callback)` — Event-Listener für Tab-Wechsel
|
||||
- `saveBackup()` — Backup über nativen Save-Dialog speichern
|
||||
- `loadBackup()` — Backup über nativen Open-Dialog laden
|
||||
|
||||
### Step 3: Menüleiste erstellen
|
||||
**Datei:** `src/main/main.ts`
|
||||
|
||||
Neue Funktion `createApplicationMenu()` nach `createTray()`:
|
||||
- Nutzt `Menu.buildFromTemplate()` + `Menu.setApplicationMenu()`
|
||||
- "Datei"-Menü mit allen Punkten aus der Tabelle
|
||||
- Accelerators für Shortcuts (Electron handelt die automatisch)
|
||||
- Menü-Clicks senden IPC-Events an den Renderer oder rufen direkt Main-Process-Funktionen auf
|
||||
|
||||
**Backup erstellen:** `dialog.showSaveDialog()` → `controller.exportQueue()` → `fs.writeFile()`
|
||||
**Backup laden:** `dialog.showOpenDialog()` → `fs.readFile()` → `controller.importQueue()`
|
||||
**Neustart:** `app.relaunch()` → `app.quit()`
|
||||
**Beenden:** `app.quit()`
|
||||
**Linksammler/DLC:** IPC-Event an Renderer senden
|
||||
|
||||
### Step 4: Renderer reagiert auf Menü-Events
|
||||
**Datei:** `src/renderer/App.tsx`
|
||||
- `onNavigateTab` Listener registrieren im `useEffect`
|
||||
- Bei `"collector"` → `setTab("collector")`
|
||||
- DLC-Import: `pickContainers` + `addContainers` (bestehendes Pattern)
|
||||
|
||||
## Dateien
|
||||
- `src/shared/ipc.ts` — Neue Channels
|
||||
- `src/shared/preload-api.ts` — Neue API-Methoden
|
||||
- `src/preload/preload.ts` — IPC-Bridge
|
||||
- `src/main/main.ts` — Menüleiste + IPC-Handler + Backup-Logik
|
||||
- `src/renderer/App.tsx` — Tab-Navigation Listener
|
||||
|
||||
## Verification
|
||||
1. `npm run build`
|
||||
2. `npx vitest run` (schnelle Tests)
|
||||
3. Manuell: App starten, Datei-Menü prüfen, Shortcuts testen
|
||||
Reference in New Issue
Block a user