From f2f862a4065d72fadfe383250daf8c6b6ad4741a Mon Sep 17 00:00:00 2001 From: Pato05 Date: Mon, 1 Apr 2024 00:07:56 +0200 Subject: [PATCH] fix old url generation + try mpv on ios --- lib/api/audio_sources/deezer_audio_source.dart | 3 +-- lib/api/deezer.dart | 8 +++++--- lib/api/deezer_audio.dart | 9 ++++++++- lib/api/definitions.dart | 2 +- lib/api/player/audio_handler.dart | 2 +- pubspec.lock | 8 ++++++++ pubspec.yaml | 1 + 7 files changed, 25 insertions(+), 8 deletions(-) diff --git a/lib/api/audio_sources/deezer_audio_source.dart b/lib/api/audio_sources/deezer_audio_source.dart index ca18d5f..2b46ab4 100644 --- a/lib/api/audio_sources/deezer_audio_source.dart +++ b/lib/api/audio_sources/deezer_audio_source.dart @@ -157,8 +157,7 @@ class DeezerAudioSource extends StreamAudioSource { int dropBytes = start % DeezerAudio.chunkSize; _logger.finest( "deezerStart: $deezerStart (actual start: $start), end: $end, dropBytes: $dropBytes"); - final stream = DeezerAudio.decryptionStream(res.stream, - start: start, trackId: trackId); + final stream = _deezerAudio.stream(res.stream, start: start); final cl = res.contentLength! - dropBytes; diff --git a/lib/api/deezer.dart b/lib/api/deezer.dart index e40918c..2fa5c36 100644 --- a/lib/api/deezer.dart +++ b/lib/api/deezer.dart @@ -325,15 +325,17 @@ class DeezerAPI { }), headers: headers, ); + print('getTracksUrl($trackTokens, $format)'); + print(response.body); final data = (jsonDecode(response.body) as Map)['data'] as List; return data.map((data) { if (data['errors'] != null) { if (data['errors'][0]['code'] == 2002) { - return GetTrackUrlResponse(error: 'Wrong geolocation'); + return GetTrackUrlResponse( + error: {'code': 2002, 'message': 'Wrong geolocation'}); } - return GetTrackUrlResponse( - error: (data['errors'][0] as Map).toString()); + return GetTrackUrlResponse(error: data['errors'][0] as Map); } if (data['media'] == null) return GetTrackUrlResponse(); diff --git a/lib/api/deezer_audio.dart b/lib/api/deezer_audio.dart index c212e3a..aea3d59 100644 --- a/lib/api/deezer_audio.dart +++ b/lib/api/deezer_audio.dart @@ -33,6 +33,7 @@ class DeezerAudio { trackId: trackId, mediaVersion: mediaVersion); quality = res.quality; + print('PREVIOUS TRACKID: $trackId, NEW TRACKID: ${res.trackId}'); trackId = res.trackId; return ( uri: res.uri, @@ -205,6 +206,9 @@ class DeezerAudio { return uri; } + Stream> stream(Stream> source, {required int start}) => + decryptionStream(source, start: start, trackId: trackId); + static List getKey(String id) { final secret = utf8.encode('g4el58wc0zvf9na1'); final idmd5 = @@ -235,6 +239,7 @@ class DeezerAudio { final deezerStart = start - dropBytes; int counter = deezerStart ~/ chunkSize; final buffer = List.empty(growable: true); + print('GETTING KEY FOR $trackId'); final key = getKey(trackId); await for (var bytes in source) { @@ -309,12 +314,14 @@ class DeezerAudio { trackToken, quality.toDeezerQualityString()); if (res.error != null) { try { - final json = jsonDecode(res.error!); + final json = res.error!; if (json['code'] == 2001) { // token expired. return getTrackUrl(deezerAPI, trackId, trackToken, 0, quality: quality); } + + throw Exception(res.error!); } catch (e) {} _logger.warning('Error while getting track url: ${res.error!}'); return null; diff --git a/lib/api/definitions.dart b/lib/api/definitions.dart index fc7ab0b..25f2c4a 100644 --- a/lib/api/definitions.dart +++ b/lib/api/definitions.dart @@ -1626,6 +1626,6 @@ class TrackUrlSource { class GetTrackUrlResponse { final List? sources; - final String? error; + final Map? error; GetTrackUrlResponse({this.sources, this.error}); } diff --git a/lib/api/player/audio_handler.dart b/lib/api/player/audio_handler.dart index c2cc530..43859af 100644 --- a/lib/api/player/audio_handler.dart +++ b/lib/api/player/audio_handler.dart @@ -140,7 +140,7 @@ class AudioPlayerTask extends BaseAudioHandler { Future _start(AudioPlayerTaskInitArguments initArgs) async { // Linux and Windows support - JustAudioMediaKit.ensureInitialized(); + JustAudioMediaKit.ensureInitialized(iOS: true); JustAudioMediaKit.title = 'Freezer'; JustAudioMediaKit.protocolWhitelist = const ['http']; //JustAudioMediaKit.bufferSize = 128; diff --git a/pubspec.lock b/pubspec.lock index 2f9eee5..f8215a5 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -879,6 +879,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.10+1" + media_kit_libs_ios_audio: + dependency: "direct main" + description: + name: media_kit_libs_ios_audio + sha256: "78ccf04e27d6b4ba00a355578ccb39b772f00d48269a6ac3db076edf2d51934f" + url: "https://pub.dev" + source: hosted + version: "1.1.4" media_kit_libs_linux: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 0edd491..5c71ed4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -88,6 +88,7 @@ dependencies: # Player libs for Linux and windows media_kit_libs_linux: any media_kit_libs_windows_audio: any + media_kit_libs_ios_audio: any # Audio service plugin for Linux (MPRIS) audio_service_mpris: ^0.1.3