Tracks opened from Home/Album/Liked Album pages can carry an unknown
(zero) durationMs from the metadata source, which was forwarded verbatim
to audio_service as Duration.zero. Android's media notification then
rendered 0:00 / 0:00 with no working seek bar, and macOS Now Playing
showed --:-- (issue #3077), even though the in-app player UI showed the
correct duration via the player's durationStream.
WindowsAudioService already forwards audioPlayer.durationStream to SMTC
(setEndTime), but MobileAudioService (Android/macOS/Linux) never updated
the active MediaItem after the player discovered the real duration.
- Report an unknown (zero) model duration as null instead of
Duration.zero so the OS treats it as unknown rather than 0:00.
- Update the active MediaItem from audioPlayer.durationStream once the
real duration is known, mirroring the existing Windows behaviour.
Fixes#3077
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Updated database schema to include `repository` and `pluginApiVersion` columns in the `MetadataPluginsTable`.
- Modified `PluginConfiguration` model to include new fields for `repository` and `pluginApiVersion`.
- Enhanced JSON serialization and deserialization for the new fields in `PluginConfiguration`.
- Refactored `SettingsMetadataProviderPage` to display installed plugins with their repository information.
- Created new components `MetadataInstalledPluginItem` and `MetadataPluginRepositoryItem` for better UI representation of plugins.
- Updated plugin installation logic to handle new fields and display relevant information.
- Bumped `youtube_explode_dart` dependency version to `2.5.1`.
* feat: add youtube engine abstraction and yt-dlp integration
* chore: add yt-dlp as optional dependency
* feat: implement custom path support for youtube engines
* chore: check for custom path in setting engine select dropdown
* chore: update yt_dlp_dart
* chore: setting video url instead of video id in fetchSiblings
* feat: implement NewPipe engine
* chore: update local path to git url for flutter_new_pipe_extractor package
* chore: fix android build isn't working
* chore: fix routes not working when initially signing in
* refactor: drop fallback support to different sources
* feat: add caching support with track metadata
* feat(settings): add cache music toggle
* fix(mobile): cache dir not open-able
* feat(local folder): add cache export/clear actions and size of the folder
* chore: ios deps upgrades
* chore: upgrade lint flutter version
* chore: lint secrets causing error
* cd: invalid value for env var
* feat: add invidious audio source with automatic track switch even on server playback endpoint
* fix: switching to different source on playback endpoint error not working
* chore: update invidious version
* feat: invidious instances customizability