Remove .claude folder from repo and add to .gitignore
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
19a588a997
commit
486379183b
@ -1,126 +0,0 @@
|
|||||||
# Memory Bank - Multi Debrid Downloader
|
|
||||||
|
|
||||||
## Projekt-Überblick
|
|
||||||
|
|
||||||
**Name:** Multi Debrid Downloader (MDD)
|
|
||||||
**Typ:** Electron Desktop App für Windows 10/11
|
|
||||||
**Repository:**
|
|
||||||
- Codeberg: https://codeberg.org/Sucukdeluxe/real-debrid-downloader.git
|
|
||||||
- GitHub: https://github.com/Sucukdeluxe/real-debrid-downloader.git
|
|
||||||
|
|
||||||
## Technologie-Stack
|
|
||||||
|
|
||||||
- **Runtime:** Electron 31.x
|
|
||||||
- **Frontend:** React 18.x + TypeScript 5.x
|
|
||||||
- **Build:** Vite (Renderer) + tsup (Main/Preload)
|
|
||||||
- **Tests:** Vitest (262+ Tests)
|
|
||||||
- **Installer:** NSIS via electron-builder
|
|
||||||
|
|
||||||
## Unterstützte Debrid-Provider
|
|
||||||
|
|
||||||
| Provider | Auth | Priorität |
|
|
||||||
|----------|------|-----------|
|
|
||||||
| Real-Debrid | API Token | Primär |
|
|
||||||
| Mega-Debrid | Login + Passwort | Fallback 1 |
|
|
||||||
| BestDebrid | API Token | Fallback 2 |
|
|
||||||
| AllDebrid | API Key | Fallback 3 |
|
|
||||||
|
|
||||||
## Kernfeatures
|
|
||||||
|
|
||||||
- **Queue-Management:** Package-basierte Organisation mit Drag & Drop
|
|
||||||
- **Auto-Extract:** RAR, ZIP, 7z mit Passwortliste
|
|
||||||
- **Auto-Rename:** Scene-Release Muster (4sf/4sj) → saubere Namen
|
|
||||||
- **Integritätsprüfung:** CRC32, MD5, SHA1 via SFV-Dateien
|
|
||||||
- **Provider-Fallback:** Automatischer Wechsel bei Fehlern/Fair-Use
|
|
||||||
- **Session-Persistenz:** Queue überlebt App-Neustart
|
|
||||||
- **Clipboard-Watcher:** Automatische Link-Erkennung
|
|
||||||
- **System-Tray:** Minimize to Tray
|
|
||||||
- **Speed-Limit:** Global oder per Download + Bandwidth-Schedules
|
|
||||||
- **MKV-Sammelordner:** Automatisches Verschieben nach Paketabschluss
|
|
||||||
- **Update-System:** Automatische Updates via Codeberg Releases
|
|
||||||
|
|
||||||
## Projektstruktur
|
|
||||||
|
|
||||||
```
|
|
||||||
src/
|
|
||||||
├── main/ # Electron Main Process
|
|
||||||
│ ├── main.ts # Entry Point, IPC Handler, Window Management
|
|
||||||
│ ├── app-controller.ts # Koordiniert DownloadManager + Settings
|
|
||||||
│ ├── download-manager.ts # Core: Queue, Downloads, Retry-Logic
|
|
||||||
│ ├── debrid.ts # Debrid-Service Abstraktion
|
|
||||||
│ ├── realdebrid.ts # Real-Debrid API Client
|
|
||||||
│ ├── extractor.ts # Archiv-Entpackung
|
|
||||||
│ ├── integrity.ts # CRC32/Hash-Validierung
|
|
||||||
│ ├── storage.ts # Session/Settings Persistenz
|
|
||||||
│ ├── update.ts # Update-Check & Installation
|
|
||||||
│ └── ...
|
|
||||||
├── renderer/ # React UI
|
|
||||||
│ ├── App.tsx # Hauptkomponente mit allen Tabs
|
|
||||||
│ └── styles.css # Styling
|
|
||||||
├── preload/ # Preload Script (IPC Bridge)
|
|
||||||
│ └── preload.ts
|
|
||||||
└── shared/ # Geteilte Types
|
|
||||||
├── types.ts # Alle TypeScript Interfaces
|
|
||||||
├── ipc.ts # IPC Channel Konstanten
|
|
||||||
└── preload-api.ts # window.rd API Definition
|
|
||||||
```
|
|
||||||
|
|
||||||
## Wichtige Types (src/shared/types.ts)
|
|
||||||
|
|
||||||
- `DownloadItem`: Einzelner Download mit Status, Progress, Speed
|
|
||||||
- `PackageEntry`: Gruppe von Downloads mit OutputDir, ExtractDir
|
|
||||||
- `SessionState`: Gesamter Queue-Zustand (persistiert)
|
|
||||||
- `AppSettings`: Alle Einstellungen
|
|
||||||
- `UiSnapshot`: Kompletter UI-State für Renderer
|
|
||||||
|
|
||||||
## IPC Channels (src/shared/ipc.ts)
|
|
||||||
|
|
||||||
Hauptchannels für Renderer ↔ Main Kommunikation:
|
|
||||||
- `GET_SNAPSHOT`, `STATE_UPDATE`: State-Sync
|
|
||||||
- `ADD_LINKS`, `ADD_CONTAINERS`: Queue befüllen
|
|
||||||
- `START`, `STOP`, `TOGGLE_PAUSE`: Download-Kontrolle
|
|
||||||
- `UPDATE_SETTINGS`: Einstellungen ändern
|
|
||||||
|
|
||||||
## Aktuelle Version
|
|
||||||
|
|
||||||
**Version:** 1.5.27
|
|
||||||
**Letztes Release:** 1.4.68 (2026-03-01)
|
|
||||||
|
|
||||||
### Letzte Änderungen (CHANGELOG)
|
|
||||||
- Session-Backup für Queue-Zustand
|
|
||||||
- Start-Konflikt-Behandlung verbessert
|
|
||||||
- Mega-Web Unrestrict abort-fähig
|
|
||||||
- DLC-Import gehärtet
|
|
||||||
- Auto-Renamer erweitert
|
|
||||||
|
|
||||||
## Offene Pläne
|
|
||||||
|
|
||||||
1. **Native Menüleiste** (`.claude/plans/agile-watching-lampson.md`)
|
|
||||||
- JDownloader 2 Style Menü
|
|
||||||
- Electron Menu API nutzen
|
|
||||||
- Bestehende React Menu-Bar ersetzen
|
|
||||||
|
|
||||||
## Coding-Conventions
|
|
||||||
|
|
||||||
- TypeScript strict mode
|
|
||||||
- Async/Await über Promises
|
|
||||||
- Deutsche UI-Texte
|
|
||||||
- Ausführliche Error-Logs via `logger`
|
|
||||||
- Retry-Logic mit exponential backoff
|
|
||||||
- AbortController für abbrechbare Operationen
|
|
||||||
|
|
||||||
## Build & Release
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run build # TypeScript + Vite Build
|
|
||||||
npm run dist # electron-builder (NSIS + Portable)
|
|
||||||
npm test # Vitest Tests
|
|
||||||
npm run self-check # Vollständiger Check (Typecheck + Tests)
|
|
||||||
```
|
|
||||||
|
|
||||||
## Wichtige Dateien
|
|
||||||
|
|
||||||
- `CHANGELOG.md` - Detaillierte Versionshistorie
|
|
||||||
- `.claude/plans/` - Feature-Pläne
|
|
||||||
- `tests/` - Umfangreiche Test-Suite
|
|
||||||
- `installer/RealDebridDownloader.iss` - Inno Setup Script
|
|
||||||
@ -1,66 +0,0 @@
|
|||||||
# 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
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"enabledPlugins": {
|
|
||||||
"frontend-design@claude-plugins-official": true,
|
|
||||||
"code-review@claude-plugins-official": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,7 +0,0 @@
|
|||||||
{
|
|
||||||
"permissions": {
|
|
||||||
"allow": [
|
|
||||||
"WebFetch(domain:github.com)"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1 +0,0 @@
|
|||||||
Subproject commit f1e132b2ed4717667fd7318ecab22e5ef52da0cc
|
|
||||||
2
.gitignore
vendored
2
.gitignore
vendored
@ -17,6 +17,8 @@ rd_download_manifest.json
|
|||||||
_update_staging/
|
_update_staging/
|
||||||
apply_update.cmd
|
apply_update.cmd
|
||||||
|
|
||||||
|
.claude/
|
||||||
|
|
||||||
node_modules/
|
node_modules/
|
||||||
.vite/
|
.vite/
|
||||||
coverage/
|
coverage/
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user