Files
encoderPro/SELECTION-ONLY-FINAL.md
2026-01-24 17:43:28 -05:00

240 lines
5.7 KiB
Markdown

# Selection-Only Workflow (Final)
**Date:** December 21, 2024
**Purpose:** Fixed the "encoding all 161 files" bug by implementing true selection-only workflow
---
## The Problem We Fixed
**Bug:** Clicking "Encode Selected" on 1 movie would encode ALL 161 movies!
**Root Cause:** Two conflicting workflows sharing the same "pending" state:
- Scan marked 161 files as "pending"
- "Encode Selected" then called "Start Processing" which processes ALL pending files
- Result: You selected 1 file but it encoded all 161!
---
## The Solution
### New State: "DISCOVERED"
Files now go through these states:
1. **DISCOVERED** (purple) - Found during scan, NOT selected
2. **PENDING** (yellow) - User selected with "Encode Selected" button
3. **PROCESSING** (blue) - Currently encoding
4. **COMPLETED** (green) - Successfully encoded
5. **FAILED** (red) - Encoding failed
6. **SKIPPED** (gray) - No subtitles
### Key Change
**Scan behavior:**
- **Before:** Marked files with subtitles as "pending" (161 files)
- **After:** Marks files with subtitles as "discovered" (0 pending)
**"Encode Selected" behavior:**
- Marks YOUR selected files as "pending"
- Then processes ONLY those pending files
- Result: Only your selection encodes!
---
## UI Changes
### Removed "Start Processing All Pending" Button
**Before:**
```
[▶ Start Processing All Pending] [⏹ Stop] [📂 Scan] [🔄 Refresh]
```
**After:**
```
[⏹ Stop] [📂 Scan] [🔄 Refresh] [🔧 Reset Stuck]
```
**Why:** This button caused confusion and the bug. You should ONLY encode via "Encode Selected".
### Stats Card
**Before:** "Pending - Files waiting to process"
**After:** "Discovered - Files found (not selected)"
### Filter Dropdown
- All Files
- **Discovered** (new!)
- Selected (Pending)
- Processing
- Completed
- Failed
- Skipped
### Quick Select Buttons
**Before:**
- 📁 Not Encoded
- 🔄 Failed
**After:**
- 📁 Discovered
- 🔄 Failed
---
## Workflow
### Simple 3-Step Process
1. **Select files** (checkboxes or "📁 Discovered" button)
2. **Choose profile** (dropdown)
3. **Click "▶️ Encode Selected"** → Encodes ONLY selected files
### What Happens Behind the Scenes
```javascript
async function encodeSelected() {
// 1. Mark selected files as "pending"
await API.queueSelected(fileIds, profile)
// 2. Start processing (only processes files marked "pending")
await API.startProcessing(profile)
// Result: Only the files YOU selected encode!
}
```
---
## State Diagram
```
[Scan Library]
[DISCOVERED] ← 161 files marked here (purple)
↓ (user selects 1 file)
↓ (clicks "Encode Selected")
[PENDING] ← ONLY 1 file marked here (yellow)
↓ (encoding starts automatically)
[PROCESSING] ← 1 file encoding (blue)
[COMPLETED] or [FAILED] ← 1 file done (green/red)
```
---
## Code Changes
### 1. reencode.py
**Added DISCOVERED state:**
```python
class ProcessingState(Enum):
DISCOVERED = "discovered" # Found during scan, not selected yet
PENDING = "pending" # User selected for encoding
PROCESSING = "processing"
COMPLETED = "completed"
FAILED = "failed"
SKIPPED = "skipped"
```
**Scan marks as DISCOVERED:**
```python
# Files with subtitles are marked as DISCOVERED (found but not selected)
# Only when user selects files do they become PENDING
state = ProcessingState.DISCOVERED.value if has_subtitles else ProcessingState.SKIPPED.value
```
### 2. dashboard.html
**Removed button:**
- Deleted "Start Processing All Pending" button entirely
**Updated stats:**
```html
<div class="card-title">Discovered</div>
<div class="card-value" id="statDiscovered">-</div>
<div class="card-subtitle">Files found (not selected)</div>
```
**Updated filters and quick-select:**
- Filter: "Discovered" instead of "Not Encoded"
- Quick Select: "📁 Discovered" button
**State colors:**
```javascript
'discovered': '#8b5cf6', // Purple - found but not selected
'pending': '#fbbf24', // Yellow - selected for encoding
'processing': '#3b82f6', // Blue - encoding
'completed': '#10b981', // Green - done
'failed': '#ef4444', // Red - error
'skipped': '#94a3b8' // Gray - no subs
```
---
## Testing Scenarios
### ✅ Scenario 1: Select One File
1. Scan library → 161 files show as "discovered" (purple)
2. Select 1 file with checkbox
3. Choose profile
4. Click "Encode Selected"
5. **Expected:** Only 1 file encodes
6. **Stats:** Discovered: 160, Processing: 1
### ✅ Scenario 2: Quick Select
1. Click "📁 Discovered" button
2. All 161 discovered files selected
3. Click "Encode Selected"
4. **Expected:** All 161 files encode
5. **Stats:** Discovered: 0, Processing: 161
### ✅ Scenario 3: Failed Retry
1. Some files fail encoding
2. They show as "failed" (red)
3. Click "🔄 Failed" quick-select
4. Click "Encode Selected"
5. **Expected:** Only failed files retry
---
## Benefits
**Bug Fixed:** Selecting 1 file only encodes 1 file
**Clear States:** "discovered" vs "pending" are distinct
**No Confusion:** Removed "Start Processing All Pending" button
**Visual Clarity:** Purple (discovered) → Yellow (selected) → Blue (encoding) → Green (done)
**Intentional Actions:** User must explicitly select files
**No Accidents:** Can't accidentally encode entire library
---
## Migration
### Existing Databases
Files currently in database will be treated as:
- "pending" stays as "pending" (will encode if you had queued them)
- New scans mark files as "discovered"
### Clean Slate
To reset all files to discovered state:
```sql
UPDATE files SET state = 'discovered' WHERE state = 'pending' AND has_subtitles = 1;
```
Or just rescan the library.
---
## Version
**encoderPro Version:** 3.4.0 (Selection-Only Workflow - Final)
**Date:** December 21, 2024
**Bug Fixed:** #1 - Encoding all files when selecting only one