jellytau/docs/TRACEABILITY.md
Duncan Tourolle e3797f32ca
Some checks failed
Traceability Validation / Check Requirement Traces (push) Failing after 1m18s
🏗️ Build and Test JellyTau / Build APK and Run Tests (push) Has been cancelled
many changes
2026-02-14 00:09:47 +01:00

1328 lines
41 KiB
Markdown

🔍 Extracting TRACES from codebase...
# Code Traceability Matrix
**Generated:** 2/13/2026, 11:49:08 PM
## Summary
- **Total Files Scanned:** 185
- **Total TRACES Found:** 72
- **Requirements Covered:**
- User Requirements (UR): 23
- Integration Requirements (IR): 5
- Development Requirements (DR): 28
- Jellyfin API Requirements (JA): 0
## Requirements by Type
### User Requirements (UR)
```
UR-002, UR-003, UR-004, UR-005, UR-007, UR-008, UR-009, UR-010, UR-011, UR-012, UR-013, UR-015, UR-016, UR-017, UR-018, UR-019, UR-023, UR-024, UR-025, UR-026, UR-029, UR-030, UR-034
```
### Integration Requirements (IR)
```
IR-003, IR-004, IR-009, IR-012, IR-014
```
### Development Requirements (DR)
```
DR-001, DR-002, DR-003, DR-004, DR-005, DR-006, DR-007, DR-009, DR-011, DR-012, DR-013, DR-014, DR-015, DR-016, DR-017, DR-018, DR-020, DR-021, DR-026, DR-027, DR-028, DR-029, DR-033, DR-037, DR-038, DR-039, DR-047, DR-048
```
### Jellyfin API Requirements (JA)
```
```
## Detailed Mapping
### IR-003
**Locations:** 2 file(s)
- **File:** [`src-tauri/src/player/backend.rs`](src-tauri/src/player/backend.rs#L39)
- **Line:** 39
- **Context:** `pub fn playback_failed<S: Into<String>>(message: S) -> Self {`
- **File:** [`src-tauri/src/player/mpv_backend_test.rs`](src-tauri/src/player/mpv_backend_test.rs#L8)
- **Line:** 8
- **Context:** `Unknown`
### IR-004
**Locations:** 1 file(s)
- **File:** [`src-tauri/src/player/backend.rs`](src-tauri/src/player/backend.rs#L39)
- **Line:** 39
- **Context:** `pub fn playback_failed<S: Into<String>>(message: S) -> Self {`
### IR-009
**Locations:** 4 file(s)
- **File:** [`src/lib/stores/auth.ts`](src/lib/stores/auth.ts#L6)
- **Line:** 6
- **Context:** `Unknown`
- **File:** [`src/lib/stores/auth.ts`](src/lib/stores/auth.ts#L269)
- **Line:** 269
- **Context:** `Unknown`
- **File:** [`src/lib/stores/auth.ts`](src/lib/stores/auth.ts#L296)
- **Line:** 296
- **Context:** `Unknown`
- **File:** [`src/lib/services/deviceId.test.ts`](src/lib/services/deviceId.test.ts#L4)
- **Line:** 4
- **Context:** `Unknown`
### IR-012
**Locations:** 1 file(s)
- **File:** [`src/lib/stores/playbackMode.ts`](src/lib/stores/playbackMode.ts#L9)
- **Line:** 9
- **Context:** `Unknown`
### IR-014
**Locations:** 4 file(s)
- **File:** [`src/lib/stores/auth.ts`](src/lib/stores/auth.ts#L6)
- **Line:** 6
- **Context:** `Unknown`
- **File:** [`src/lib/stores/auth.ts`](src/lib/stores/auth.ts#L296)
- **Line:** 296
- **Context:** `Unknown`
- **File:** [`src/lib/stores/auth.ts`](src/lib/stores/auth.ts#L466)
- **Line:** 466
- **Context:** `Unknown`
- **File:** [`src/lib/services/deviceId.test.ts`](src/lib/services/deviceId.test.ts#L4)
- **Line:** 4
- **Context:** `Unknown`
### DR-001
**Locations:** 10 file(s)
- **File:** [`src/lib/stores/player.ts`](src/lib/stores/player.ts#L8)
- **Line:** 8
- **Context:** `Unknown`
- **File:** [`src/lib/stores/player.ts`](src/lib/stores/player.ts#L29)
- **Line:** 29
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L8)
- **Line:** 8
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L26)
- **Line:** 26
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L170)
- **Line:** 170
- **Context:** `function handlePositionUpdate(position: number, duration: number): voi...`
- **File:** [`src/lib/services/playerEvents.test.ts`](src/lib/services/playerEvents.test.ts#L4)
- **Line:** 4
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/state.rs`](src-tauri/src/player/state.rs#L7)
- **Line:** 7
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/state.rs`](src-tauri/src/player/state.rs#L25)
- **Line:** 25
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/events.rs`](src-tauri/src/player/events.rs#L6)
- **Line:** 6
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/events.rs`](src-tauri/src/player/events.rs#L20)
- **Line:** 20
- **Context:** `Unknown`
### DR-002
**Locations:** 1 file(s)
- **File:** [`src-tauri/src/player/media.rs`](src-tauri/src/player/media.rs#L42)
- **Line:** 42
- **Context:** `Unknown`
### DR-003
**Locations:** 1 file(s)
- **File:** [`src-tauri/src/player/media.rs`](src-tauri/src/player/media.rs#L116)
- **Line:** 116
- **Context:** `pub enum MediaType {`
### DR-004
**Locations:** 3 file(s)
- **File:** [`src-tauri/src/player/backend.rs`](src-tauri/src/player/backend.rs#L39)
- **Line:** 39
- **Context:** `pub fn playback_failed<S: Into<String>>(message: S) -> Self {`
- **File:** [`src-tauri/src/player/backend.rs`](src-tauri/src/player/backend.rs#L235)
- **Line:** 235
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/backend.rs`](src-tauri/src/player/backend.rs#L241)
- **Line:** 241
- **Context:** `Unknown`
### DR-005
**Locations:** 10 file(s)
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L7)
- **Line:** 7
- **Context:** `Unknown`
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L106)
- **Line:** 106
- **Context:** `Unknown`
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L111)
- **Line:** 111
- **Context:** `async function next() {`
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L116)
- **Line:** 116
- **Context:** `async function previous() {`
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L121)
- **Line:** 121
- **Context:** `async function skipTo(index: number) {`
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L126)
- **Line:** 126
- **Context:** `async function toggleShuffle() {`
- **File:** [`src/lib/stores/appState.ts`](src/lib/stores/appState.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/queue.rs`](src-tauri/src/player/queue.rs#L8)
- **Line:** 8
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/queue.rs`](src-tauri/src/player/queue.rs#L20)
- **Line:** 20
- **Context:** `pub enum RepeatMode {`
- **File:** [`src-tauri/src/player/queue.rs`](src-tauri/src/player/queue.rs#L508)
- **Line:** 508
- **Context:** `pub enum AddPosition {`
### DR-006
**Locations:** 1 file(s)
- **File:** [`src/lib/services/preload.ts`](src/lib/services/preload.ts#L5)
- **Line:** 5
- **Context:** `Unknown`
### DR-007
**Locations:** 1 file(s)
- **File:** [`src/lib/stores/library.ts`](src/lib/stores/library.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
### DR-009
**Locations:** 2 file(s)
- **File:** [`src/lib/stores/player.ts`](src/lib/stores/player.ts#L8)
- **Line:** 8
- **Context:** `Unknown`
- **File:** [`src/lib/stores/appState.ts`](src/lib/stores/appState.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
### DR-011
**Locations:** 1 file(s)
- **File:** [`src/lib/stores/library.ts`](src/lib/stores/library.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
### DR-012
**Locations:** 2 file(s)
- **File:** [`src-tauri/src/storage/db_service.rs`](src-tauri/src/storage/db_service.rs#L288)
- **Line:** 288
- **Context:** `Unknown`
- **File:** [`src-tauri/src/storage/mod.rs`](src-tauri/src/storage/mod.rs#L159)
- **Line:** 159
- **Context:** `pub fn file_size(&self) -> Option<u64> {`
### DR-013
**Locations:** 1 file(s)
- **File:** [`src/lib/stores/connectivity.ts`](src/lib/stores/connectivity.ts#L5)
- **Line:** 5
- **Context:** `Unknown`
### DR-014
**Locations:** 1 file(s)
- **File:** [`src/lib/services/syncService.ts`](src/lib/services/syncService.ts#L7)
- **Line:** 7
- **Context:** `Unknown`
### DR-015
**Locations:** 5 file(s)
- **File:** [`src/lib/stores/downloads.ts`](src/lib/stores/downloads.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src/lib/stores/downloads.test.ts`](src/lib/stores/downloads.test.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src/lib/utils/validation.test.ts`](src/lib/utils/validation.test.ts#L4)
- **Line:** 4
- **Context:** `Unknown`
- **File:** [`src/lib/services/preload.ts`](src/lib/services/preload.ts#L5)
- **Line:** 5
- **Context:** `Unknown`
- **File:** [`src-tauri/src/commands/download.rs`](src-tauri/src/commands/download.rs#L1533)
- **Line:** 1533
- **Context:** `Unknown`
### DR-016
**Locations:** 1 file(s)
- **File:** [`src/lib/services/imageCache.ts`](src/lib/services/imageCache.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
### DR-017
**Locations:** 3 file(s)
- **File:** [`src/lib/stores/downloads.ts`](src/lib/stores/downloads.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src/lib/stores/downloads.test.ts`](src/lib/stores/downloads.test.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src-tauri/src/commands/offline.rs`](src-tauri/src/commands/offline.rs#L133)
- **Line:** 133
- **Context:** `Unknown`
### DR-018
**Locations:** 1 file(s)
- **File:** [`src-tauri/src/commands/download.rs`](src-tauri/src/commands/download.rs#L1533)
- **Line:** 1533
- **Context:** `Unknown`
### DR-020
**Locations:** 6 file(s)
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L7)
- **Line:** 7
- **Context:** `Unknown`
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L116)
- **Line:** 116
- **Context:** `async function previous() {`
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L131)
- **Line:** 131
- **Context:** `async function cycleRepeat() {`
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L136)
- **Line:** 136
- **Context:** `async function removeFromQueue(index: number) {`
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L141)
- **Line:** 141
- **Context:** `async function moveInQueue(fromIndex: number, toIndex: number) {`
- **File:** [`src-tauri/src/player/queue.rs`](src-tauri/src/player/queue.rs#L20)
- **Line:** 20
- **Context:** `pub enum RepeatMode {`
### DR-021
**Locations:** 1 file(s)
- **File:** [`src/lib/services/favorites.ts`](src/lib/services/favorites.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
### DR-026
**Locations:** 2 file(s)
- **File:** [`src/lib/stores/nextEpisode.ts`](src/lib/stores/nextEpisode.ts#L9)
- **Line:** 9
- **Context:** `Unknown`
- **File:** [`src/lib/stores/home.ts`](src/lib/stores/home.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
### DR-027
**Locations:** 1 file(s)
- **File:** [`src/lib/stores/home.ts`](src/lib/stores/home.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
### DR-028
**Locations:** 8 file(s)
- **File:** [`src/lib/utils/duration.test.ts`](src/lib/utils/duration.test.ts#L4)
- **Line:** 4
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L8)
- **Line:** 8
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L26)
- **Line:** 26
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L160)
- **Line:** 160
- **Context:** `Unknown`
- **File:** [`src/lib/services/playbackReporting.ts`](src/lib/services/playbackReporting.ts#L7)
- **Line:** 7
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.test.ts`](src/lib/services/playerEvents.test.ts#L4)
- **Line:** 4
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/events.rs`](src-tauri/src/player/events.rs#L6)
- **Line:** 6
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/events.rs`](src-tauri/src/player/events.rs#L20)
- **Line:** 20
- **Context:** `Unknown`
### DR-029
**Locations:** 6 file(s)
- **File:** [`src/lib/stores/sleepTimer.ts`](src/lib/stores/sleepTimer.ts#L9)
- **Line:** 9
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L263)
- **Line:** 263
- **Context:** `function handleMediaLoaded(duration: number): void {`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L300)
- **Line:** 300
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/autoplay.rs`](src-tauri/src/player/autoplay.rs#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/sleep_timer.rs`](src-tauri/src/player/sleep_timer.rs#L4)
- **Line:** 4
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/sleep_timer.rs`](src-tauri/src/player/sleep_timer.rs#L81)
- **Line:** 81
- **Context:** `pub fn cancel(&mut self) {`
### DR-033
**Locations:** 1 file(s)
- **File:** [`src/lib/stores/library.ts`](src/lib/stores/library.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
### DR-037
**Locations:** 4 file(s)
- **File:** [`src/lib/stores/sessions.ts`](src/lib/stores/sessions.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src/lib/stores/playbackMode.ts`](src/lib/stores/playbackMode.ts#L9)
- **Line:** 9
- **Context:** `Unknown`
- **File:** [`src/lib/stores/playbackMode.test.ts`](src/lib/stores/playbackMode.test.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src/lib/stores/sessions.test.ts`](src/lib/stores/sessions.test.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
### DR-038
**Locations:** 1 file(s)
- **File:** [`src/lib/stores/home.ts`](src/lib/stores/home.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
### DR-039
**Locations:** 1 file(s)
- **File:** [`src/lib/stores/home.ts`](src/lib/stores/home.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
### DR-047
**Locations:** 10 file(s)
- **File:** [`src/lib/stores/nextEpisode.ts`](src/lib/stores/nextEpisode.ts#L9)
- **Line:** 9
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L8)
- **Line:** 8
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L26)
- **Line:** 26
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L263)
- **Line:** 263
- **Context:** `function handleMediaLoaded(duration: number): void {`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L309)
- **Line:** 309
- **Context:** `function handleSleepTimerChanged(mode: SleepTimerMode, remainingSecond...`
- **File:** [`src/lib/services/nextEpisodeService.ts`](src/lib/services/nextEpisodeService.ts#L7)
- **Line:** 7
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.test.ts`](src/lib/services/playerEvents.test.ts#L4)
- **Line:** 4
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/events.rs`](src-tauri/src/player/events.rs#L6)
- **Line:** 6
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/events.rs`](src-tauri/src/player/events.rs#L20)
- **Line:** 20
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/autoplay.rs`](src-tauri/src/player/autoplay.rs#L2)
- **Line:** 2
- **Context:** `Unknown`
### DR-048
**Locations:** 4 file(s)
- **File:** [`src/lib/stores/nextEpisode.ts`](src/lib/stores/nextEpisode.ts#L9)
- **Line:** 9
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L309)
- **Line:** 309
- **Context:** `function handleSleepTimerChanged(mode: SleepTimerMode, remainingSecond...`
- **File:** [`src/lib/services/nextEpisodeService.ts`](src/lib/services/nextEpisodeService.ts#L7)
- **Line:** 7
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/autoplay.rs`](src-tauri/src/player/autoplay.rs#L2)
- **Line:** 2
- **Context:** `Unknown`
### UR-002
**Locations:** 7 file(s)
- **File:** [`src/lib/stores/connectivity.ts`](src/lib/stores/connectivity.ts#L5)
- **Line:** 5
- **Context:** `Unknown`
- **File:** [`src/lib/services/syncService.ts`](src/lib/services/syncService.ts#L7)
- **Line:** 7
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/media.rs`](src-tauri/src/player/media.rs#L116)
- **Line:** 116
- **Context:** `pub enum MediaType {`
- **File:** [`src-tauri/src/commands/mod.rs`](src-tauri/src/commands/mod.rs#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src-tauri/src/commands/offline.rs`](src-tauri/src/commands/offline.rs#L133)
- **Line:** 133
- **Context:** `Unknown`
- **File:** [`src-tauri/src/storage/db_service.rs`](src-tauri/src/storage/db_service.rs#L288)
- **Line:** 288
- **Context:** `Unknown`
- **File:** [`src-tauri/src/storage/mod.rs`](src-tauri/src/storage/mod.rs#L159)
- **Line:** 159
- **Context:** `pub fn file_size(&self) -> Option<u64> {`
### UR-003
**Locations:** 7 file(s)
- **File:** [`src-tauri/src/player/media.rs`](src-tauri/src/player/media.rs#L42)
- **Line:** 42
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/media.rs`](src-tauri/src/player/media.rs#L116)
- **Line:** 116
- **Context:** `pub enum MediaType {`
- **File:** [`src-tauri/src/player/mod.rs`](src-tauri/src/player/mod.rs#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/backend.rs`](src-tauri/src/player/backend.rs#L39)
- **Line:** 39
- **Context:** `pub fn playback_failed<S: Into<String>>(message: S) -> Self {`
- **File:** [`src-tauri/src/player/backend.rs`](src-tauri/src/player/backend.rs#L235)
- **Line:** 235
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/mpv_backend_test.rs`](src-tauri/src/player/mpv_backend_test.rs#L8)
- **Line:** 8
- **Context:** `Unknown`
- **File:** [`src-tauri/src/commands/mod.rs`](src-tauri/src/commands/mod.rs#L2)
- **Line:** 2
- **Context:** `Unknown`
### UR-004
**Locations:** 8 file(s)
- **File:** [`src/lib/services/preload.ts`](src/lib/services/preload.ts#L5)
- **Line:** 5
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/media.rs`](src-tauri/src/player/media.rs#L42)
- **Line:** 42
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/media.rs`](src-tauri/src/player/media.rs#L116)
- **Line:** 116
- **Context:** `pub enum MediaType {`
- **File:** [`src-tauri/src/player/mod.rs`](src-tauri/src/player/mod.rs#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/backend.rs`](src-tauri/src/player/backend.rs#L39)
- **Line:** 39
- **Context:** `pub fn playback_failed<S: Into<String>>(message: S) -> Self {`
- **File:** [`src-tauri/src/player/backend.rs`](src-tauri/src/player/backend.rs#L235)
- **Line:** 235
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/mpv_backend_test.rs`](src-tauri/src/player/mpv_backend_test.rs#L8)
- **Line:** 8
- **Context:** `Unknown`
- **File:** [`src-tauri/src/commands/mod.rs`](src-tauri/src/commands/mod.rs#L2)
- **Line:** 2
- **Context:** `Unknown`
### UR-005
**Locations:** 29 file(s)
- **File:** [`src/lib/stores/player.ts`](src/lib/stores/player.ts#L8)
- **Line:** 8
- **Context:** `Unknown`
- **File:** [`src/lib/stores/player.ts`](src/lib/stores/player.ts#L29)
- **Line:** 29
- **Context:** `Unknown`
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L7)
- **Line:** 7
- **Context:** `Unknown`
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L106)
- **Line:** 106
- **Context:** `Unknown`
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L111)
- **Line:** 111
- **Context:** `async function next() {`
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L116)
- **Line:** 116
- **Context:** `async function previous() {`
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L121)
- **Line:** 121
- **Context:** `async function skipTo(index: number) {`
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L126)
- **Line:** 126
- **Context:** `async function toggleShuffle() {`
- **File:** [`src/lib/stores/appState.ts`](src/lib/stores/appState.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src/lib/utils/duration.test.ts`](src/lib/utils/duration.test.ts#L4)
- **Line:** 4
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L8)
- **Line:** 8
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L26)
- **Line:** 26
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L160)
- **Line:** 160
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L170)
- **Line:** 170
- **Context:** `function handlePositionUpdate(position: number, duration: number): voi...`
- **File:** [`src/lib/services/playerEvents.test.ts`](src/lib/services/playerEvents.test.ts#L4)
- **Line:** 4
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/state.rs`](src-tauri/src/player/state.rs#L7)
- **Line:** 7
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/state.rs`](src-tauri/src/player/state.rs#L25)
- **Line:** 25
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/events.rs`](src-tauri/src/player/events.rs#L6)
- **Line:** 6
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/events.rs`](src-tauri/src/player/events.rs#L20)
- **Line:** 20
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/mod.rs`](src-tauri/src/player/mod.rs#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/queue.rs`](src-tauri/src/player/queue.rs#L8)
- **Line:** 8
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/queue.rs`](src-tauri/src/player/queue.rs#L20)
- **Line:** 20
- **Context:** `pub enum RepeatMode {`
- **File:** [`src-tauri/src/player/queue.rs`](src-tauri/src/player/queue.rs#L508)
- **Line:** 508
- **Context:** `pub enum AddPosition {`
- **File:** [`src-tauri/src/player/backend.rs`](src-tauri/src/player/backend.rs#L42)
- **Line:** 42
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/backend.rs`](src-tauri/src/player/backend.rs#L46)
- **Line:** 46
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/backend.rs`](src-tauri/src/player/backend.rs#L50)
- **Line:** 50
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/backend.rs`](src-tauri/src/player/backend.rs#L54)
- **Line:** 54
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/backend.rs`](src-tauri/src/player/backend.rs#L58)
- **Line:** 58
- **Context:** `Unknown`
- **File:** [`src-tauri/src/commands/mod.rs`](src-tauri/src/commands/mod.rs#L2)
- **Line:** 2
- **Context:** `Unknown`
### UR-007
**Locations:** 2 file(s)
- **File:** [`src/lib/stores/library.ts`](src/lib/stores/library.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src/lib/services/imageCache.ts`](src/lib/services/imageCache.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
### UR-008
**Locations:** 1 file(s)
- **File:** [`src/lib/stores/library.ts`](src/lib/stores/library.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
### UR-009
**Locations:** 6 file(s)
- **File:** [`src/lib/stores/auth.ts`](src/lib/stores/auth.ts#L6)
- **Line:** 6
- **Context:** `Unknown`
- **File:** [`src/lib/stores/auth.ts`](src/lib/stores/auth.ts#L269)
- **Line:** 269
- **Context:** `Unknown`
- **File:** [`src/lib/stores/auth.ts`](src/lib/stores/auth.ts#L296)
- **Line:** 296
- **Context:** `Unknown`
- **File:** [`src/lib/utils/validation.test.ts`](src/lib/utils/validation.test.ts#L4)
- **Line:** 4
- **Context:** `Unknown`
- **File:** [`src/lib/services/deviceId.test.ts`](src/lib/services/deviceId.test.ts#L4)
- **Line:** 4
- **Context:** `Unknown`
- **File:** [`src-tauri/src/commands/mod.rs`](src-tauri/src/commands/mod.rs#L2)
- **Line:** 2
- **Context:** `Unknown`
### UR-010
**Locations:** 4 file(s)
- **File:** [`src/lib/stores/sessions.ts`](src/lib/stores/sessions.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src/lib/stores/playbackMode.ts`](src/lib/stores/playbackMode.ts#L9)
- **Line:** 9
- **Context:** `Unknown`
- **File:** [`src/lib/stores/playbackMode.test.ts`](src/lib/stores/playbackMode.test.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src/lib/stores/sessions.test.ts`](src/lib/stores/sessions.test.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
### UR-011
**Locations:** 7 file(s)
- **File:** [`src/lib/stores/downloads.ts`](src/lib/stores/downloads.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src/lib/stores/downloads.test.ts`](src/lib/stores/downloads.test.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src/lib/services/preload.ts`](src/lib/services/preload.ts#L5)
- **Line:** 5
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/media.rs`](src-tauri/src/player/media.rs#L116)
- **Line:** 116
- **Context:** `pub enum MediaType {`
- **File:** [`src-tauri/src/commands/mod.rs`](src-tauri/src/commands/mod.rs#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src-tauri/src/commands/download.rs`](src-tauri/src/commands/download.rs#L1533)
- **Line:** 1533
- **Context:** `Unknown`
- **File:** [`src-tauri/src/commands/offline.rs`](src-tauri/src/commands/offline.rs#L133)
- **Line:** 133
- **Context:** `Unknown`
### UR-012
**Locations:** 7 file(s)
- **File:** [`src/lib/stores/auth.ts`](src/lib/stores/auth.ts#L6)
- **Line:** 6
- **Context:** `Unknown`
- **File:** [`src/lib/stores/auth.ts`](src/lib/stores/auth.ts#L296)
- **Line:** 296
- **Context:** `Unknown`
- **File:** [`src/lib/stores/auth.ts`](src/lib/stores/auth.ts#L466)
- **Line:** 466
- **Context:** `Unknown`
- **File:** [`src/lib/services/deviceId.test.ts`](src/lib/services/deviceId.test.ts#L4)
- **Line:** 4
- **Context:** `Unknown`
- **File:** [`src-tauri/src/commands/mod.rs`](src-tauri/src/commands/mod.rs#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src-tauri/src/storage/db_service.rs`](src-tauri/src/storage/db_service.rs#L288)
- **Line:** 288
- **Context:** `Unknown`
- **File:** [`src-tauri/src/storage/mod.rs`](src-tauri/src/storage/mod.rs#L159)
- **Line:** 159
- **Context:** `pub fn file_size(&self) -> Option<u64> {`
### UR-013
**Locations:** 2 file(s)
- **File:** [`src/lib/stores/downloads.ts`](src/lib/stores/downloads.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src/lib/stores/downloads.test.ts`](src/lib/stores/downloads.test.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
### UR-015
**Locations:** 11 file(s)
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L7)
- **Line:** 7
- **Context:** `Unknown`
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L106)
- **Line:** 106
- **Context:** `Unknown`
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L111)
- **Line:** 111
- **Context:** `async function next() {`
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L116)
- **Line:** 116
- **Context:** `async function previous() {`
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L121)
- **Line:** 121
- **Context:** `async function skipTo(index: number) {`
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L126)
- **Line:** 126
- **Context:** `async function toggleShuffle() {`
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L131)
- **Line:** 131
- **Context:** `async function cycleRepeat() {`
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L136)
- **Line:** 136
- **Context:** `async function removeFromQueue(index: number) {`
- **File:** [`src/lib/stores/queue.ts`](src/lib/stores/queue.ts#L141)
- **Line:** 141
- **Context:** `async function moveInQueue(fromIndex: number, toIndex: number) {`
- **File:** [`src-tauri/src/player/queue.rs`](src-tauri/src/player/queue.rs#L20)
- **Line:** 20
- **Context:** `pub enum RepeatMode {`
- **File:** [`src-tauri/src/player/queue.rs`](src-tauri/src/player/queue.rs#L508)
- **Line:** 508
- **Context:** `pub enum AddPosition {`
### UR-016
**Locations:** 2 file(s)
- **File:** [`src-tauri/src/player/backend.rs`](src-tauri/src/player/backend.rs#L62)
- **Line:** 62
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/backend.rs`](src-tauri/src/player/backend.rs#L241)
- **Line:** 241
- **Context:** `Unknown`
### UR-017
**Locations:** 3 file(s)
- **File:** [`src/lib/services/favorites.ts`](src/lib/services/favorites.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src/lib/services/syncService.ts`](src/lib/services/syncService.ts#L7)
- **Line:** 7
- **Context:** `Unknown`
- **File:** [`src-tauri/src/commands/mod.rs`](src-tauri/src/commands/mod.rs#L2)
- **Line:** 2
- **Context:** `Unknown`
### UR-018
**Locations:** 3 file(s)
- **File:** [`src/lib/stores/downloads.ts`](src/lib/stores/downloads.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src/lib/stores/downloads.test.ts`](src/lib/stores/downloads.test.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src-tauri/src/commands/download.rs`](src-tauri/src/commands/download.rs#L1533)
- **Line:** 1533
- **Context:** `Unknown`
### UR-019
**Locations:** 9 file(s)
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L8)
- **Line:** 8
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L26)
- **Line:** 26
- **Context:** `Unknown`
- **File:** [`src/lib/services/playbackReporting.ts`](src/lib/services/playbackReporting.ts#L7)
- **Line:** 7
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.test.ts`](src/lib/services/playerEvents.test.ts#L4)
- **Line:** 4
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/events.rs`](src-tauri/src/player/events.rs#L6)
- **Line:** 6
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/events.rs`](src-tauri/src/player/events.rs#L20)
- **Line:** 20
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/mod.rs`](src-tauri/src/player/mod.rs#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src-tauri/src/commands/mod.rs`](src-tauri/src/commands/mod.rs#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src-tauri/src/storage/mod.rs`](src-tauri/src/storage/mod.rs#L159)
- **Line:** 159
- **Context:** `pub fn file_size(&self) -> Option<u64> {`
### UR-023
**Locations:** 12 file(s)
- **File:** [`src/lib/stores/nextEpisode.ts`](src/lib/stores/nextEpisode.ts#L9)
- **Line:** 9
- **Context:** `Unknown`
- **File:** [`src/lib/stores/home.ts`](src/lib/stores/home.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L8)
- **Line:** 8
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L26)
- **Line:** 26
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L263)
- **Line:** 263
- **Context:** `function handleMediaLoaded(duration: number): void {`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L309)
- **Line:** 309
- **Context:** `function handleSleepTimerChanged(mode: SleepTimerMode, remainingSecond...`
- **File:** [`src/lib/services/nextEpisodeService.ts`](src/lib/services/nextEpisodeService.ts#L7)
- **Line:** 7
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.test.ts`](src/lib/services/playerEvents.test.ts#L4)
- **Line:** 4
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/events.rs`](src-tauri/src/player/events.rs#L6)
- **Line:** 6
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/events.rs`](src-tauri/src/player/events.rs#L20)
- **Line:** 20
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/autoplay.rs`](src-tauri/src/player/autoplay.rs#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/mod.rs`](src-tauri/src/player/mod.rs#L2)
- **Line:** 2
- **Context:** `Unknown`
### UR-024
**Locations:** 1 file(s)
- **File:** [`src/lib/stores/home.ts`](src/lib/stores/home.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
### UR-025
**Locations:** 6 file(s)
- **File:** [`src/lib/utils/validation.test.ts`](src/lib/utils/validation.test.ts#L4)
- **Line:** 4
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L160)
- **Line:** 160
- **Context:** `Unknown`
- **File:** [`src/lib/services/playbackReporting.ts`](src/lib/services/playbackReporting.ts#L7)
- **Line:** 7
- **Context:** `Unknown`
- **File:** [`src/lib/services/syncService.ts`](src/lib/services/syncService.ts#L7)
- **Line:** 7
- **Context:** `Unknown`
- **File:** [`src-tauri/src/commands/mod.rs`](src-tauri/src/commands/mod.rs#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src-tauri/src/storage/mod.rs`](src-tauri/src/storage/mod.rs#L159)
- **Line:** 159
- **Context:** `pub fn file_size(&self) -> Option<u64> {`
### UR-026
**Locations:** 12 file(s)
- **File:** [`src/lib/stores/sleepTimer.ts`](src/lib/stores/sleepTimer.ts#L9)
- **Line:** 9
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L8)
- **Line:** 8
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L26)
- **Line:** 26
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L263)
- **Line:** 263
- **Context:** `function handleMediaLoaded(duration: number): void {`
- **File:** [`src/lib/services/playerEvents.ts`](src/lib/services/playerEvents.ts#L300)
- **Line:** 300
- **Context:** `Unknown`
- **File:** [`src/lib/services/playerEvents.test.ts`](src/lib/services/playerEvents.test.ts#L4)
- **Line:** 4
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/events.rs`](src-tauri/src/player/events.rs#L6)
- **Line:** 6
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/events.rs`](src-tauri/src/player/events.rs#L20)
- **Line:** 20
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/autoplay.rs`](src-tauri/src/player/autoplay.rs#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/mod.rs`](src-tauri/src/player/mod.rs#L2)
- **Line:** 2
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/sleep_timer.rs`](src-tauri/src/player/sleep_timer.rs#L4)
- **Line:** 4
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/sleep_timer.rs`](src-tauri/src/player/sleep_timer.rs#L81)
- **Line:** 81
- **Context:** `pub fn cancel(&mut self) {`
### UR-029
**Locations:** 1 file(s)
- **File:** [`src/lib/stores/library.ts`](src/lib/stores/library.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
### UR-030
**Locations:** 1 file(s)
- **File:** [`src/lib/stores/library.ts`](src/lib/stores/library.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
### UR-034
**Locations:** 1 file(s)
- **File:** [`src/lib/stores/home.ts`](src/lib/stores/home.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
### IT-003
**Locations:** 1 file(s)
- **File:** [`src-tauri/src/player/mpv_backend_test.rs`](src-tauri/src/player/mpv_backend_test.rs#L8)
- **Line:** 8
- **Context:** `Unknown`
### IT-004
**Locations:** 1 file(s)
- **File:** [`src-tauri/src/player/mpv_backend_test.rs`](src-tauri/src/player/mpv_backend_test.rs#L8)
- **Line:** 8
- **Context:** `Unknown`
### UT-003
**Locations:** 1 file(s)
- **File:** [`src-tauri/src/player/queue.rs`](src-tauri/src/player/queue.rs#L508)
- **Line:** 508
- **Context:** `pub enum AddPosition {`
### UT-004
**Locations:** 1 file(s)
- **File:** [`src-tauri/src/player/queue.rs`](src-tauri/src/player/queue.rs#L508)
- **Line:** 508
- **Context:** `pub enum AddPosition {`
### UT-005
**Locations:** 1 file(s)
- **File:** [`src-tauri/src/player/queue.rs`](src-tauri/src/player/queue.rs#L508)
- **Line:** 508
- **Context:** `pub enum AddPosition {`
### UT-010
**Locations:** 1 file(s)
- **File:** [`src/lib/stores/downloads.test.ts`](src/lib/stores/downloads.test.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
### UT-012
**Locations:** 1 file(s)
- **File:** [`src-tauri/src/player/sleep_timer.rs`](src-tauri/src/player/sleep_timer.rs#L81)
- **Line:** 81
- **Context:** `pub fn cancel(&mut self) {`
### UT-014
**Locations:** 2 file(s)
- **File:** [`src-tauri/src/storage/db_service.rs`](src-tauri/src/storage/db_service.rs#L288)
- **Line:** 288
- **Context:** `Unknown`
- **File:** [`src-tauri/src/storage/mod.rs`](src-tauri/src/storage/mod.rs#L159)
- **Line:** 159
- **Context:** `pub fn file_size(&self) -> Option<u64> {`
### UT-015
**Locations:** 2 file(s)
- **File:** [`src-tauri/src/storage/db_service.rs`](src-tauri/src/storage/db_service.rs#L288)
- **Line:** 288
- **Context:** `Unknown`
- **File:** [`src-tauri/src/storage/mod.rs`](src-tauri/src/storage/mod.rs#L159)
- **Line:** 159
- **Context:** `pub fn file_size(&self) -> Option<u64> {`
### UT-016
**Locations:** 2 file(s)
- **File:** [`src-tauri/src/storage/db_service.rs`](src-tauri/src/storage/db_service.rs#L288)
- **Line:** 288
- **Context:** `Unknown`
- **File:** [`src-tauri/src/storage/mod.rs`](src-tauri/src/storage/mod.rs#L159)
- **Line:** 159
- **Context:** `pub fn file_size(&self) -> Option<u64> {`
### UT-017
**Locations:** 2 file(s)
- **File:** [`src-tauri/src/storage/db_service.rs`](src-tauri/src/storage/db_service.rs#L288)
- **Line:** 288
- **Context:** `Unknown`
- **File:** [`src-tauri/src/storage/mod.rs`](src-tauri/src/storage/mod.rs#L159)
- **Line:** 159
- **Context:** `pub fn file_size(&self) -> Option<u64> {`
### UT-018
**Locations:** 2 file(s)
- **File:** [`src-tauri/src/storage/db_service.rs`](src-tauri/src/storage/db_service.rs#L288)
- **Line:** 288
- **Context:** `Unknown`
- **File:** [`src-tauri/src/storage/mod.rs`](src-tauri/src/storage/mod.rs#L159)
- **Line:** 159
- **Context:** `pub fn file_size(&self) -> Option<u64> {`
### UT-019
**Locations:** 2 file(s)
- **File:** [`src-tauri/src/storage/db_service.rs`](src-tauri/src/storage/db_service.rs#L288)
- **Line:** 288
- **Context:** `Unknown`
- **File:** [`src-tauri/src/storage/mod.rs`](src-tauri/src/storage/mod.rs#L159)
- **Line:** 159
- **Context:** `pub fn file_size(&self) -> Option<u64> {`
### UT-020
**Locations:** 2 file(s)
- **File:** [`src-tauri/src/storage/db_service.rs`](src-tauri/src/storage/db_service.rs#L288)
- **Line:** 288
- **Context:** `Unknown`
- **File:** [`src-tauri/src/storage/mod.rs`](src-tauri/src/storage/mod.rs#L159)
- **Line:** 159
- **Context:** `pub fn file_size(&self) -> Option<u64> {`
### UT-021
**Locations:** 2 file(s)
- **File:** [`src-tauri/src/storage/db_service.rs`](src-tauri/src/storage/db_service.rs#L288)
- **Line:** 288
- **Context:** `Unknown`
- **File:** [`src-tauri/src/storage/mod.rs`](src-tauri/src/storage/mod.rs#L159)
- **Line:** 159
- **Context:** `pub fn file_size(&self) -> Option<u64> {`
### UT-022
**Locations:** 2 file(s)
- **File:** [`src-tauri/src/storage/db_service.rs`](src-tauri/src/storage/db_service.rs#L288)
- **Line:** 288
- **Context:** `Unknown`
- **File:** [`src-tauri/src/storage/mod.rs`](src-tauri/src/storage/mod.rs#L159)
- **Line:** 159
- **Context:** `pub fn file_size(&self) -> Option<u64> {`
### UT-023
**Locations:** 2 file(s)
- **File:** [`src-tauri/src/storage/db_service.rs`](src-tauri/src/storage/db_service.rs#L288)
- **Line:** 288
- **Context:** `Unknown`
- **File:** [`src-tauri/src/storage/mod.rs`](src-tauri/src/storage/mod.rs#L159)
- **Line:** 159
- **Context:** `pub fn file_size(&self) -> Option<u64> {`
### UT-024
**Locations:** 1 file(s)
- **File:** [`src/lib/stores/downloads.test.ts`](src/lib/stores/downloads.test.ts#L2)
- **Line:** 2
- **Context:** `Unknown`
### UT-025
**Locations:** 2 file(s)
- **File:** [`src-tauri/src/storage/db_service.rs`](src-tauri/src/storage/db_service.rs#L288)
- **Line:** 288
- **Context:** `Unknown`
- **File:** [`src-tauri/src/storage/mod.rs`](src-tauri/src/storage/mod.rs#L159)
- **Line:** 159
- **Context:** `pub fn file_size(&self) -> Option<u64> {`
### UT-026
**Locations:** 2 file(s)
- **File:** [`src-tauri/src/player/backend.rs`](src-tauri/src/player/backend.rs#L235)
- **Line:** 235
- **Context:** `Unknown`
- **File:** [`src-tauri/src/player/backend.rs`](src-tauri/src/player/backend.rs#L241)
- **Line:** 241
- **Context:** `Unknown`
### UT-027
**Locations:** 1 file(s)
- **File:** [`src-tauri/src/player/backend.rs`](src-tauri/src/player/backend.rs#L235)
- **Line:** 235
- **Context:** `Unknown`
### UT-028
**Locations:** 1 file(s)
- **File:** [`src-tauri/src/player/backend.rs`](src-tauri/src/player/backend.rs#L235)
- **Line:** 235
- **Context:** `Unknown`
### UT-029
**Locations:** 1 file(s)
- **File:** [`src-tauri/src/player/backend.rs`](src-tauri/src/player/backend.rs#L235)
- **Line:** 235
- **Context:** `Unknown`
### UT-030
**Locations:** 1 file(s)
- **File:** [`src-tauri/src/player/backend.rs`](src-tauri/src/player/backend.rs#L235)
- **Line:** 235
- **Context:** `Unknown`
### UT-031
**Locations:** 1 file(s)
- **File:** [`src-tauri/src/player/backend.rs`](src-tauri/src/player/backend.rs#L235)
- **Line:** 235
- **Context:** `Unknown`
### UT-032
**Locations:** 1 file(s)
- **File:** [`src-tauri/src/player/backend.rs`](src-tauri/src/player/backend.rs#L235)
- **Line:** 235
- **Context:** `Unknown`
### UT-033
**Locations:** 1 file(s)
- **File:** [`src-tauri/src/player/backend.rs`](src-tauri/src/player/backend.rs#L235)
- **Line:** 235
- **Context:** `Unknown`
### UT-042
**Locations:** 1 file(s)
- **File:** [`src-tauri/src/commands/download.rs`](src-tauri/src/commands/download.rs#L1533)
- **Line:** 1533
- **Context:** `Unknown`
### UT-043
**Locations:** 1 file(s)
- **File:** [`src-tauri/src/commands/download.rs`](src-tauri/src/commands/download.rs#L1533)
- **Line:** 1533
- **Context:** `Unknown`
### UT-044
**Locations:** 1 file(s)
- **File:** [`src-tauri/src/commands/offline.rs`](src-tauri/src/commands/offline.rs#L133)
- **Line:** 133
- **Context:** `Unknown`
✅ Complete! Found 72 TRACES across 185 files