MovieMapper/Rust/PHASE2_IMPLEMENTATION.md
jarianc 00d8e072c5 feat: Add Rust UI and backend implementation with project infrastructure
Adds the new Rust-based UI (iced), backend service, shared Swift models,
CI/CD workflows, build scripts, and project documentation.
2026-08-19 21:22:08 -05:00

4.2 KiB

Phase 2 Implementation Summary

Status

  • Build: SUCCESS (with warnings)
  • All components compiled but not fully implemented per plan

Components Created

2.1 Basic Layout Components

  • Breadcrumb - Basic navigation component (placeholder)
  • ProgressIndicator - Progress display with bar (implemented)
  • FileList - File listing component (basic implementation)
  • Sidebar - Search and show details (basic implementation)
  • TagManager - Tag display component (implemented)
  • FloatingAction - FAB component (implemented)

2.2 File List Component

  • Basic file rendering with icons
  • Full drag-and-drop support
  • Folder vs file visual distinction
  • File metadata display (duration, quality, FPS)
  • Episode number display with arrows
  • Tag state indicators
  • Play button integration
  • Callback implementation

2.3 Sidebar Components

  • Basic search input
  • Search results dropdown
  • Show details panel
  • Season selector with episode list
  • Episode hover highlighting
  • Callbacks for user interactions

Component Structure

Current State

All components exist but most are minimal implementations without full callbacks and state management.

Required Implementation

Breadcrumb Component

// Need to implement:
// - Path navigation with clickable segments
// - Back button functionality
// - Directory path display

File List Component (Needs Major Enhancement)

// Required features:
// - Drag-and-drop support using iced_native::event::drag
// - Visual distinction for folders vs files
// - Metadata display (duration, quality, FPS)
// - Tag indicators (Extra, Commentary)
// - Play button for each file
// - Episode number display with arrows
// - Callbacks for click, tag, play, drag events

Sidebar Component (Needs Enhancement)

// Required features:
// - Search input with debouncing
// - Search results dropdown (TVDB shows)
// - Show details panel with summary
// - Season selector with episode counts
// - Episode list with hover highlighting
// - Callbacks for search, show select, season select

Tag Manager Component

// Already implemented basic tag display
// Need to add:
// - Tag toggle functionality
// - Visual indicators for tagged files
// - Callbacks for tag operations

Issues Encountered

1. Backend Integration

  • Backend crate uses different naming conventions
  • Need to properly map MediaFile to FileMetadata
  • Some async operations need proper error handling

2. Component Callbacks

  • Components lack Callback trait implementation
  • Missing message passing for user interactions
  • Need to implement iced::widget::Tree for complex components

3. Drag and Drop

  • Iced 0.12 has limited drag-and-drop support
  • Need to use iced_native::event::drag properly
  • May need custom event handling

4. State Management

  • State is in AppState but not passed to components
  • Components don't receive callbacks from parent
  • Need to implement proper message flow

Build Status

✅ Backend: Compiles successfully
✅ UI: Compiles successfully  
⚠️  Warnings: Many unused imports and variables
⚠️  Components: Basic structure exists, needs full implementation

Next Steps

Immediate Fixes (Before Full Implementation)

  1. Fix compiler warnings (unused imports, etc.)
  2. Implement proper callbacks for all components
  3. Add drag-and-drop support
  4. Implement full file metadata display
  5. Add episode editing with arrows

Component Enhancement Tasks

  1. Breadcrumb: Add navigation stack and back button
  2. FileList: Implement full file rendering with tags, play buttons
  3. Sidebar: Add TVDB search integration
  4. TagManager: Add toggle functionality
  5. FloatingAction: Add move all tagged files functionality

Testing Tasks

  1. Test directory scanning with progress updates
  2. Test file tagging and movement
  3. Test TVDB search and show selection
  4. Test episode mapping workflow

Notes

  • The backend API is functional but needs proper integration
  • Iced 0.12 provides good foundation but requires careful state management
  • Need to ensure proper async/await handling for long-running operations
  • Consider using iced_futures::Subscription for real-time updates