How tinypinglite/sakuramedia works
SakuraMedia is a Flutter client for discovering, tracking, importing, organizing, and watching a personal media library across desktop and mobile platforms. The principal workflow runs from discovery or subscription through resource acquisition and library import, then into playback and personal collections. Feature directories show the client’s domain boundaries; the README documents several backend-driven workflows and optional integrations, but sampled source does not establish detailed client-side call wiring, so links below reflect documented flows rather than inferred implementation calls.
Main entry points: routes Navigation · subscriptions Subscriptions · media Media Management · player Playback
Components 26
Client Shell
- App Shell
lib/app/app.dart - Navigation
lib/routes
Discovery and Tracking
- Search
lib/features/search - Actor Discovery
lib/features/actors - Rankings
lib/features/rankings - Tags
lib/features/tags - Subscriptions
lib/features/subscriptions - Image Search
lib/features/image_search
Library Operations
- Movie Catalog
lib/features/movies - Video Library
lib/features/videos - Media Import
lib/features/media_import - Media Management
lib/features/media
Playback and Collections
- Playback
lib/features/movies/presentation/controllers/player - External Player
lib/features/external_player - Playlists
lib/features/playlists - Moments
lib/features/moments - Clips
lib/features/clips - Collections
lib/features/moment_collections - Clip Collections
lib/features/clip_collections
Tasks and Extensions
- Tasks and Notices
lib/features/activity - Plugin Management
lib/features/plugins
Other components
- Media User
- SakuraMedia Backend
- Download Provider
- Storage Provider
- Notification Channel
Connections 44
- Media User → App Shell: uses
- App Shell → Navigation: navigates
- Navigation → Search: opens
- Navigation → Actor Discovery: opens
- Navigation → Rankings: opens
- Navigation → Tags: opens
- Navigation → Subscriptions: opens
- Navigation → Movie Catalog: opens
- Navigation → Video Library: opens
- Navigation → Media Import: opens
- Navigation → Media Management: opens
- Navigation → Image Search: opens
- Navigation → Playback: opens
- Navigation → Playlists: opens
- Navigation → Moments: opens
- Navigation → Clips: opens
- Navigation → Collections: opens
- Navigation → Clip Collections: opens
- Navigation → Tasks and Notices: opens
- Navigation → Plugin Management: opens
- Search → SakuraMedia Backend: queries
- Actor Discovery → SakuraMedia Backend: queries
- Rankings → SakuraMedia Backend: loads rankings
- Tags → SakuraMedia Backend: loads tags
- Subscriptions → SakuraMedia Backend: submits subscriptions
- Subscriptions → Download Provider: finds resources
- Download Provider → Storage Provider: writes downloads
- Storage Provider → Media Import: provides media
- Media Import → SakuraMedia Backend: imports metadata
- Media Management → SakuraMedia Backend: manages library
- Media Management → Storage Provider: migrates media
- Image Search → SakuraMedia Backend: searches images
- Movie Catalog → SakuraMedia Backend: loads catalog
- Video Library → SakuraMedia Backend: loads media
- Playback → SakuraMedia Backend: requests streams
- Playback → External Player: launches playback
- Playlists → SakuraMedia Backend: saves lists
- Moments → SakuraMedia Backend: saves moments
- Clips → SakuraMedia Backend: saves clips
- Collections → SakuraMedia Backend: loads collections
- Clip Collections → SakuraMedia Backend: loads collections
- Tasks and Notices → SakuraMedia Backend: loads task status
- SakuraMedia Backend → Notification Channel: dispatches notices
- Plugin Management → SakuraMedia Backend: configures extensions