Improvement of the model (addition of the class artist and modification of the class music) 🎨 and realization of the class MusicViewModel with test ✅
parent
e40560aa7d
commit
a6e617e59c
@ -0,0 +1,10 @@
|
||||
class Artist {
|
||||
String _id;
|
||||
String _name;
|
||||
|
||||
Artist(this._id, this._name);
|
||||
|
||||
String get id => _id;
|
||||
|
||||
String get name => _name;
|
||||
}
|
@ -1,10 +1,8 @@
|
||||
import '../model/Comment.dart';
|
||||
|
||||
class CommentViewModel {
|
||||
|
||||
// Methods
|
||||
List<Comment> getCommentsPost(int idPost) {
|
||||
throw new Error();
|
||||
}
|
||||
|
||||
}
|
@ -1,19 +1,96 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:justmusic/view_model/TokenSpotify.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import '../model/Artist.dart';
|
||||
import '../model/Music.dart';
|
||||
|
||||
class MusicViewModel {
|
||||
final String API_URL = "https://api.spotify.com/v1";
|
||||
late TokenSpotify _token;
|
||||
|
||||
final String API_URL = "";
|
||||
MusicViewModel() {
|
||||
_token = new TokenSpotify();
|
||||
}
|
||||
|
||||
// Methods
|
||||
Music getMusic(int id) {
|
||||
throw new Error();
|
||||
Future<Music> getMusic(String id) async {
|
||||
var accessToken = await _token.getAccessToken();
|
||||
var response = await http.get(Uri.parse('$API_URL/tracks/$id'), headers: {
|
||||
'Authorization': 'Bearer $accessToken',
|
||||
});
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final responseData = jsonDecode(response.body);
|
||||
List<Artist> artists =
|
||||
List<Artist>.from(responseData['artists'].map((artist) {
|
||||
return Artist(artist['id'], artist['name']);
|
||||
}));
|
||||
|
||||
return Music(
|
||||
responseData['id'],
|
||||
responseData['name'],
|
||||
responseData['album']['images'][0]['url'],
|
||||
responseData['preview_url'],
|
||||
DateTime.parse(responseData['album']['release_date']),
|
||||
artists);
|
||||
} else {
|
||||
throw Exception(
|
||||
'Error retrieving music information : ${response.statusCode} ${response.reasonPhrase}');
|
||||
}
|
||||
}
|
||||
|
||||
Music getMusicWithName(String name) {
|
||||
throw new Error();
|
||||
List<Music> _getMusicsFromResponse(Map<String, dynamic> responseData) {
|
||||
List<Music> musics = [];
|
||||
|
||||
List<dynamic> tracks = responseData['tracks']['items'];
|
||||
for (var track in tracks) {
|
||||
List<Artist> artists = List<Artist>.from(track['artists'].map((artist) {
|
||||
return Artist(artist['id'], artist['name']);
|
||||
}));
|
||||
|
||||
musics.add(Music(
|
||||
track['id'],
|
||||
track['name'],
|
||||
track['album']['images'][0]['url'],
|
||||
track['preview_url'],
|
||||
DateTime.now(),
|
||||
artists));
|
||||
}
|
||||
|
||||
return musics;
|
||||
}
|
||||
|
||||
List<Music> getMusics(String name) {
|
||||
throw new Error();
|
||||
Future<List<Music>> getMusicsWithName(String name, {int limit = 20, int offset = 1}) async {
|
||||
var accessToken = await _token.getAccessToken();
|
||||
var response = await http
|
||||
.get(Uri.parse('$API_URL/search?q=track%3A$name&type=track&limit=$limit&offset=$offset'), headers: {
|
||||
'Authorization': 'Bearer $accessToken',
|
||||
});
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
Map<String, dynamic> responseData = jsonDecode(response.body);
|
||||
return _getMusicsFromResponse(responseData);
|
||||
} else {
|
||||
throw Exception(
|
||||
'Error while retrieving music : ${response.statusCode} ${response.reasonPhrase}');
|
||||
}
|
||||
}
|
||||
|
||||
Future<List<Music>> getMusicsWithArtistName(String name, {int limit = 20, int offset = 1}) async {
|
||||
var accessToken = await _token.getAccessToken();
|
||||
var response = await http.get(
|
||||
Uri.parse('$API_URL/search?q=artist%3A$name&type=track&limit=$limit&offset=$offset'),
|
||||
headers: {
|
||||
'Authorization': 'Bearer $accessToken',
|
||||
});
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
Map<String, dynamic> responseData = jsonDecode(response.body);
|
||||
return _getMusicsFromResponse(responseData);
|
||||
} else {
|
||||
throw Exception(
|
||||
'Error while retrieving music : ${response.statusCode} ${response.reasonPhrase}');
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
import 'package:justmusic/model/Artist.dart';
|
||||
import 'package:justmusic/model/Music.dart';
|
||||
import 'package:justmusic/view_model/MusicViewModel.dart';
|
||||
|
||||
Future<void> main() async {
|
||||
MusicViewModel musicVM = new MusicViewModel();
|
||||
Music m = await musicVM.getMusic('295SxdR1DqunCNwd0U767w');
|
||||
print("id :" + m.id.toString() + " cover :" + m.cover + " title :" + m.title);
|
||||
print(m.date.toString() + " " + m.previewUrl);
|
||||
for (Artist a in m.artists) {
|
||||
print(a.id + ":" + a.name);
|
||||
}
|
||||
|
||||
print('\nMusics :');
|
||||
|
||||
List<Music> musics = await musicVM.getMusicsWithName('Onizuka');
|
||||
for (Music m in musics) {
|
||||
print("id :" + m.id.toString() + " cover :" + m.cover + " title :" + m.title);
|
||||
print(m.date.toString() + " " + m.previewUrl);
|
||||
for (Artist a in m.artists) {
|
||||
print(a.id + ":" + a.name);
|
||||
}
|
||||
}
|
||||
|
||||
print('\nMusics With Artist:');
|
||||
|
||||
List<Music> musics2 = await musicVM.getMusicsWithArtistName('PNL');
|
||||
for (Music m in musics2) {
|
||||
print("id :" + m.id.toString() + " cover :" + m.cover + " title :" + m.title);
|
||||
print(m.date.toString() + " " + m.previewUrl);
|
||||
for (Artist a in m.artists) {
|
||||
print(a.id + ":" + a.name);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in new issue