* 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
Key Improvements:
SpotubeMediaFactory: Handles the logic of creating SpotubeMedia instances, allowing for easier scalability and reducing repetitive code.
Dependency Injection (DI): CustomPlayer is injected into the AudioPlayerInterface, improving testability and modularity.
Helper Methods: Functions like getNetworkAddress() and getUriForTrack() simplify and centralize repeated logic, improving maintainability.
Playback Control Methods: Added play(), pause(), stop(), and seek() methods for better playback control with error handling.
PlaybackStateManager: Manages the state-related properties (isPlaying, duration, etc.), keeping the AudioPlayerInterface cleaner and more focused on playback control.
Advantages:
Separation of Concerns: The code is now better structured with clear separation between media management (SpotubeMedia), playback state management (PlaybackStateManager), and playback controls (AudioPlayerInterface).
Extensibility: The code is more scalable with the factory pattern, making it easy to add new track types or other media sources.
Testability: With dependency injection, you can easily mock the CustomPlayer and test the logic of AudioPlayerInterface independently.
Clean Code: Centralized logic and helper methods reduce code duplication, improving readability and maintainability.
* 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
* feat: add discord rpc support for macos, windows arm64 and linux arm64
* chore: discord rpc not clearing activity after close/setting rpc to false
* chore: add migration script to move from files from macos sandbox to non-sandbox directories