How yuelioi/bdl works
BDL is a local-first Bilibili media downloader for desktop and Android, with a separate CLI. The main user journey is to enter a source, inspect and select parsed media, create download tasks, then monitor or control transfers; completed media may be muxed and saved locally. The graph also preserves documented account-backed library browsing, settings, and Android platform services. Workflow stages follow the README and the sampled UI; unsampled backend wiring is represented only at subsystem boundaries, not as detailed helper calls.
Main entry points: commands.rs Tauri commands · queue_worker.rs Queue worker · main.rs CLI · App.vue Desktop app
Components 24
User interfaces
- Desktop app
apps/desktop/src/App.vue - Parse workspace
apps/desktop/src/pages/parse/useParseResultWorkspace.ts - Transfer page
apps/desktop/src/pages/useTransferPage.ts - Library pages
apps/desktop/src/pages/useLibraryPage.ts - CLI
crates/bdl-cli/src/main.rs - Tauri API bridge
apps/desktop/src/api/tauri.ts
Media workflow
- Source resolvers
crates/bdl-core/src/resolver/mod.rs - Download planner
crates/bdl-core/src/planner.rs - Media fetcher
crates/bdl-core/src/fetcher.rs - Media muxer
crates/bdl-core/src/muxer.rs
Task runtime
- Tauri commands
crates/bdl-tauri/src/commands.rs - Queue coordinator
crates/bdl-tauri/src/queue_coordinator.rs - Queue worker
crates/bdl-tauri/src/queue_worker.rs - Local database
crates/bdl-core/src/storage.rs
Account and configuration
- Account services
crates/bdl-core/src/account.rs - Library state
apps/desktop/src/stores/library.ts - Settings
crates/bdl-core/src/settings.rs
Platform services
- Android background execution
crates/bdl-mobile-execution/android/src/main/java/DownloadForegroundService.kt - Android storage bridge
crates/bdl-tauri/src/mobile_storage.rs - Android storage plugin
crates/bdl-mobile-storage/android/src/main/java/StoragePlugin.kt
Other components
- User
- Bilibili
- Local media files
- FFmpeg
Connections 33
- User → Desktop app: uses
- Desktop app → Parse workspace: opens
- Desktop app → Transfer page: opens
- Desktop app → Library pages: opens
- Parse workspace → Tauri API bridge: requests parsing
- Tauri API bridge → Tauri commands: invokes commands
- Tauri commands → Source resolvers: resolves sources
- Source resolvers → Bilibili: requests media data
- Tauri commands → Download planner: plans tasks
- Download planner → Queue coordinator: creates tasks
- Transfer page → Tauri API bridge: controls transfers
- Tauri commands → Queue coordinator: coordinates tasks
- Queue coordinator → Queue worker: dispatches work
- Queue worker → Media fetcher: downloads resources
- Media fetcher → Bilibili: fetches media
- Queue worker → Media muxer: merges streams
- Media muxer → FFmpeg: runs processing
- Queue worker → Local media files: writes downloads
- Queue coordinator → Local database: persists task state
- Tauri commands → Local database: reads and writes
- Library pages → Library state: browses library
- Library state → Tauri API bridge: loads content
- Tauri commands → Account services: manages login
- Account services → Bilibili: authenticates
- Tauri commands → Settings: loads settings
- CLI → Source resolvers: resolves input
- CLI → Download planner: plans downloads
- CLI → Media fetcher: downloads media
- CLI → Media muxer: merges streams
- Queue worker → Android background execution: uses background service
- Tauri commands → Android storage bridge: requests export
- Android storage bridge → Android storage plugin: dispatches storage calls
- Android storage plugin → Local media files: exports files