From c0ce4dcc04b9288075007744c2cf52156fa69aa0 Mon Sep 17 00:00:00 2001 From: emkartal1 Date: Sat, 29 Jul 2023 20:32:02 +0200 Subject: [PATCH] add new functions --- .../lib/view_model/MusicViewModel.dart | 75 +++++++++++++++---- Sources/justMUSIC/test/Music_test.dart | 22 ++++++ 2 files changed, 83 insertions(+), 14 deletions(-) diff --git a/Sources/justMUSIC/lib/view_model/MusicViewModel.dart b/Sources/justMUSIC/lib/view_model/MusicViewModel.dart index 668526a..e50285e 100644 --- a/Sources/justMUSIC/lib/view_model/MusicViewModel.dart +++ b/Sources/justMUSIC/lib/view_model/MusicViewModel.dart @@ -42,21 +42,22 @@ class MusicViewModel { } } - List _getMusicsFromResponse(Map responseData) { + List _getMusicsFromResponse(List tracks) { List musics = []; - List tracks = responseData['tracks']['items']; for (var track in tracks) { List artists = List.from(track['artists'].map((artist) { return Artist(artist['id'], artist['name'], ''); })); + DateTime releaseDate = DateTime.parse(track['album']['release_date']); + musics.add(Music( track['id'], track['name'], track['album']['images'][0]['url'], track['preview_url'], - DateTime.now(), + releaseDate, track['duration_ms'] / 1000, track['explicit'], artists)); @@ -77,7 +78,7 @@ class MusicViewModel { if (response.statusCode == 200) { Map responseData = jsonDecode(response.body); - return _getMusicsFromResponse(responseData); + return _getMusicsFromResponse(responseData['tracks']['items']); } else { throw Exception( 'Error while retrieving music : ${response.statusCode} ${response.reasonPhrase}'); @@ -96,7 +97,7 @@ class MusicViewModel { if (response.statusCode == 200) { Map responseData = jsonDecode(response.body); - return _getMusicsFromResponse(responseData); + return _getMusicsFromResponse(responseData['tracks']['items']); } else { throw Exception( 'Error while retrieving music : ${response.statusCode} ${response.reasonPhrase}'); @@ -175,22 +176,42 @@ class MusicViewModel { if (response.statusCode == 200) { Map responseData = jsonDecode(response.body); + return _getMusicsFromResponse(responseData['tracks']); + } else { + throw Exception( + 'Error while retrieving music : ${response.statusCode} ${response.reasonPhrase}'); + } + } + + Future> getMusicsWithPlaylistId(String id, + {String market = "FR"}) async { + var accessToken = await _token.getAccessToken(); + var response = await http + .get(Uri.parse('$API_URL/playlists/$id?market=$market'), headers: { + 'Authorization': 'Bearer $accessToken', + }); + + if (response.statusCode == 200) { + Map responseData = jsonDecode(response.body); + List musics = []; - List tracks = responseData['tracks']; + List tracks = responseData['tracks']['items']; for (var track in tracks) { - List artists = List.from(track['artists'].map((artist) { + List artists = List.from(track['track']['artists'].map((artist) { return Artist(artist['id'], artist['name'], ''); })); + DateTime releaseDate = DateTime.parse(track['track']['album']['release_date']); + musics.add(Music( - track['id'], - track['name'], - track['album']['images'][0]['url'], - track['preview_url'], - DateTime.now(), - track['duration_ms'] / 1000, - track['explicit'], + track['track']['id'], + track['track']['name'], + track['track']['album']['images'][0]['url'], + track['track']['preview_url'], + releaseDate, + track['track']['duration_ms'] / 1000, + track['track']['explicit'], artists)); } @@ -200,4 +221,30 @@ class MusicViewModel { 'Error while retrieving music : ${response.statusCode} ${response.reasonPhrase}'); } } + + Future> getMusicsWithIds(List ids, + {String market = "FR"}) async { + var accessToken = await _token.getAccessToken(); + String url = API_URL+'/tracks?market=$market&ids='; + + if (ids.length == 0) return []; + + url += ids.join('%2C'); + + print(url); + + var response = await http + .get(Uri.parse(url), headers: { + 'Authorization': 'Bearer $accessToken', + }); + + if (response.statusCode == 200) { + Map responseData = jsonDecode(response.body); + return _getMusicsFromResponse(responseData['tracks']); + } else { + throw Exception( + 'Error while retrieving music : ${response.statusCode} ${response.reasonPhrase}'); + } + } + } diff --git a/Sources/justMUSIC/test/Music_test.dart b/Sources/justMUSIC/test/Music_test.dart index baf3aaa..f98529a 100644 --- a/Sources/justMUSIC/test/Music_test.dart +++ b/Sources/justMUSIC/test/Music_test.dart @@ -57,4 +57,26 @@ Future main() async { } } + print('\nPlaylist Musics :'); + + List playlistMusics = await musicVM.getMusicsWithPlaylistId('37i9dQZF1DX1X23oiQRTB5'); + for (Music m in playlistMusics) { + print("id : ${m.id.toString()}, cover : ${m.cover}, title : ${m.title}"); + print("date : ${m.date.toString()}, preview : ${m.previewUrl}, duration : ${m.duration}, explicit : ${m.explicit}"); + for (Artist a in m.artists) { + print("id : ${a.id}, name : ${a.name}"); + } + } + + print('\nMusics With Ids :'); + + List musicsIds = await musicVM.getMusicsWithIds(['6D1HiF2e3Z0F8FwQ5uLxwn','6IGg7qsBvA5xbrwz3MNHWK']); + for (Music m in musicsIds) { + print("id : ${m.id.toString()}, cover : ${m.cover}, title : ${m.title}"); + print("date : ${m.date.toString()}, preview : ${m.previewUrl}, duration : ${m.duration}, explicit : ${m.explicit}"); + for (Artist a in m.artists) { + print("id : ${a.id}, name : ${a.name}"); + } + } + } -- 2.36.3