real-debrid-downloader/.claude/plans/agile-watching-lampson.md
Sucukdeluxe e35fc1f31a
Some checks are pending
Build and Release / build (push) Waiting to run
v1.5.28: Visuelle Fortschrittsanzeigen (JDownloader 2 Style)
2026-03-02 22:17:59 +01:00

2.8 KiB

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

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