YouTubeEngine passed track duration in seconds while
SpotubeAudioSourceMatchObject.fromJson interprets `duration` as
microseconds, so durations collapsed to ~0 and the queue displayed 0:00.
- lib/services/metadata/metadata.dart: send duration in microseconds
(search() and getVideo() callbacks)
- lib/components/track_tile/track_tile.dart,
lib/modules/player/player_queue.dart: add resolveMissingDuration so
the queue actively resolves the sourced track's real duration when
the track's own metadata duration is effectively zero
Fixes#3021
* feat(queue): add multi-select and bulk actions to queue
- Add selection mode to PlayerQueue with long-press to select
- Disable inner navigation (title/artist) when selecting via TrackTile
- Show checkboxes only in selection mode
- Add selection AppBar behavior and bottom-sheet menu with: Select all, Add to playlist, Remove selected, Cancel
- Reuse existing PlaylistAddTrackDialog for bulk add
- Hide drag handle while in selection mode
Closes: # (implement multi-select queue feature)
* chore: update .gitignore to include .vscode and modify signing configurations back to default in build.gradle
* chore: add VS Code configuration files
* chore: update dependencies in pubspec.lock
* chore: update pubspec.lock to reflect dependency changes and version updates
* chore: fix replace material widgets with shadcn widgets
---------
Co-authored-by: Kingkor Roy Tirtho <krtirtho@gmail.com>
* feat: add new improved logo
* feat: add new improved logo
* feat: add new improved logo
* feat: add new improved logo
* chore: update the logos in app
* Merge branch 'alexio-dev-refactor/new-icons' into refactor/new-icons #2676
* chore: generate icons for every flavor
* chore: add readme banner
* chore: add back deleted images
* chore: update native splash screen
* chore: fix dart analyzer warnings