refactor: extract YouTube download to ytmusic extension and fix UI issues

Remove built-in YouTube/Cobalt download pipeline from Go backend and
Dart frontend. YouTube downloading now requires the ytmusic-spotiflac
extension (with download_provider capability).

Go backend:
- Delete youtube.go (745 lines) and youtube_quality_test.go
- Remove DownloadFromYouTube, IsYouTubeURLExport,
  ExtractYouTubeVideoIDExport from exports.go
- Remove YouTube routing from DownloadTrack and DownloadByStrategy

Dart frontend:
- Remove YouTube from built-in services, bitrate settings, quality UI
- Remove youtubeOpusBitrate/youtubeMp3Bitrate from settings model
- Add migration 7: default service youtube -> tidal
- Remove YouTube l10n keys from all 14 arb files and regenerate
- Update _determineOutputExt to handle opus_/mp3_ quality strings
- Add SAF opus/mp3 metadata embedding in unified branch
- Fix TweenSequence assertion crash (t outside 0.0-1.0)
- Fix store URL TextField styling consistency

Extension changes (gitignored, in extension/YT-Music-SpotiFLAC/):
- Add download_provider type, qualityOptions, network permissions
- Implement checkAvailability and download via SpotubeDL/Cobalt
This commit is contained in:
zarzet
2026-03-26 16:17:57 +07:00
parent d4b37edc2f
commit 5e1cc3ecb5
41 changed files with 100 additions and 1650 deletions
+2 -2
View File
@@ -748,7 +748,7 @@ class _DownloadSuccessOverlayState extends State<DownloadSuccessOverlay>
_flashAnimation = TweenSequence<double>([
TweenSequenceItem(tween: Tween(begin: 0.0, end: 0.15), weight: 30),
TweenSequenceItem(tween: Tween(begin: 0.15, end: 0.0), weight: 70),
]).animate(CurvedAnimation(parent: _controller, curve: Curves.easeOut));
]).animate(_controller);
}
@override
@@ -816,7 +816,7 @@ class _AnimatedBadgeState extends State<AnimatedBadge>
_scaleAnimation = TweenSequence<double>([
TweenSequenceItem(tween: Tween(begin: 1.0, end: 1.3), weight: 40),
TweenSequenceItem(tween: Tween(begin: 1.3, end: 1.0), weight: 60),
]).animate(CurvedAnimation(parent: _controller, curve: Curves.easeOutBack));
]).animate(_controller);
}
@override