add logging
This commit is contained in:
58
spec/logging_feature.md
Normal file
58
spec/logging_feature.md
Normal file
@@ -0,0 +1,58 @@
|
||||
# Feature Request: Real-time Logging & UI Refinement
|
||||
|
||||
## 1. Context & Objective
|
||||
Users currently experience download failures without sufficient context or error details, making troubleshooting difficult.
|
||||
The objective is to introduce a dedicated **Logs System** within the application to capture, display, and persist detailed execution logs from the `yt-dlp` process.
|
||||
Additionally, the application's sidebar layout requires balancing for better UX.
|
||||
|
||||
## 2. Requirements
|
||||
|
||||
### 2.1. Backend (Rust) - Logging Infrastructure
|
||||
* **Stream Capture**: The `downloader` module must capture both `STDOUT` (progress) and `STDERR` (errors/warnings) from the `yt-dlp` process.
|
||||
* **Event Emission**: Emit a new Tauri event `download-log` to the frontend in real-time.
|
||||
* Payload: `{ id: String, message: String, level: 'info' | 'error' | 'debug' }`
|
||||
* **Persistence (Optional but Recommended)**: Ideally, write logs to a local file (e.g., `logs/{date}.log` or `logs/{task_id}.log`) for post-mortem analysis. *For this iteration, real-time event emission is priority.*
|
||||
|
||||
### 2.2. Frontend - Logs View
|
||||
* **New Route**: `/logs`
|
||||
* **UI Layout**:
|
||||
* A dedicated **Logs Tab** in the main navigation.
|
||||
* A console-like view displaying a stream of log messages.
|
||||
* Filters: Filter by "Task ID" or "Level" (Error/Info).
|
||||
* **Real-time**: The view must update automatically as new log events arrive.
|
||||
* **Detail**: Failed downloads must show the specific error message returned by `yt-dlp` (e.g., "Sign in required", "Video unavailable").
|
||||
|
||||
### 2.3. UI/UX - Sidebar Refactoring
|
||||
* **Reordering**:
|
||||
* **Top Section**: Home (Downloader), History.
|
||||
* **Bottom Section**: Logs, Settings.
|
||||
* **Removal**: Remove the "Version Number" text from the bottom of the sidebar (it can be moved to the Settings page if needed, or just removed as requested).
|
||||
|
||||
## 3. Implementation Steps
|
||||
|
||||
### Step 1: Rust Backend Updates
|
||||
* Modify `src-tauri/src/downloader.rs`:
|
||||
* Update `download_video` to spawn the process with `Stdio::piped()` for both stdout and stderr.
|
||||
* Use `tokio::select!` or separate tasks to read both streams concurrently.
|
||||
* Emit `download-log` events for every line read.
|
||||
* Ensure the final error message (if exit code != 0) is explicitly captured and returned/logged.
|
||||
|
||||
### Step 2: Frontend Store & Logic
|
||||
* Create `src/stores/logs.ts`:
|
||||
* State: `logs: LogEntry[]`.
|
||||
* Action: `addLog(entry)`.
|
||||
* Listener: Listen for `download-log` events globally.
|
||||
|
||||
### Step 3: Frontend UI
|
||||
* Create `src/views/Logs.vue`:
|
||||
* Display logs in a scrollable container.
|
||||
* Style error logs in red, info in gray/white.
|
||||
* Update `src/App.vue`:
|
||||
* Add the `FileText` (or similar) icon for Logs.
|
||||
* Refactor the sidebar Flexbox layout to push Logs and Settings to the bottom.
|
||||
* Remove the version footer.
|
||||
* Update `src/router/index.ts` to include the new route.
|
||||
|
||||
## 4. Success Criteria
|
||||
* When a download fails, the user can go to the "Logs" tab and see the exact error output from `yt-dlp`.
|
||||
* The sidebar looks balanced with navigation items split between top and bottom.
|
||||
Reference in New Issue
Block a user