Ajout classe data pour éviter au maximum les méthodes asynchrone et les requêtes.
continuous-integration/drone/push Build is failing Details

remotes/origin/mvc-implementation
Félix MIELCAREK 2 years ago
parent 707d134141
commit 160d75a3e7

@ -1,70 +1,79 @@
import 'dart:convert'; import 'dart:convert';
import 'package:dafl_project_flutter/controller/live_datas.dart';
import 'package:dafl_project_flutter/model/music.dart'; import 'package:dafl_project_flutter/model/music.dart';
import 'package:dafl_project_flutter/model/spot.dart';
import 'package:dafl_project_flutter/services/api/api_spotify.dart'; import 'package:dafl_project_flutter/services/api/api_spotify.dart';
import 'package:dafl_project_flutter/services/database/database_service.dart'; import 'package:dafl_project_flutter/services/database/database_service.dart';
import 'package:dafl_project_flutter/services/position/location.dart'; import 'package:dafl_project_flutter/services/position/location.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import '../model/spot.dart';
import '../model/user.dart'; import '../model/user.dart';
class Controller { class Controller {
ApiSpotify _api = ApiSpotify(); ApiSpotify _api = ApiSpotify();
late User _currentUser; late User _currentUser;
final Location _location = Location();
final DataBaseService _dataBaseService = DataBaseService(); final DataBaseService _dataBaseService = DataBaseService();
bool sortChoice = false; //false = sort by name ; true = sort by date final LiveDatas _datas = LiveDatas();
late BuildContext navigatorKey; late BuildContext navigatorKey;
Uri getApiUrlAuthorize() { //
return _api.identification.urlAuthorize; // Methods to manage datas
} //
String getApiRedirectUrl() { // Datas that can change
return _api.identification.redirectUri;
}
apiAuthorization(url) { bool getChoice() => _datas.discoveriesSortChoice;
_api.apiAuthorization(url);
}
String getIdSpotify() { setChoice(bool c) {
return _currentUser.idSpotify; _datas.discoveriesSortChoice = c;
} }
Future<Music> getCompleteMusic(String id) async { Music getCurrentMusic() => _datas.userCurrentMusic;
Map infos = await _api.requests.getTrackInfo(id);
return Music(id, infos['name'], infos['artist'], infos['cover']);
}
setCurrentMusic() async { setCurrentMusic() async {
_currentUser.currentMusic = await _api.requests.getCurrentlyPlayingTrack(); _datas.userCurrentMusic =
await getCompleteMusic(await _api.requests.getCurrentlyPlayingTrack());
} }
String getCurrentMusic() { List<Spot> getSpots() => _datas.spots;
return _currentUser.currentMusic;
}
int getIdDafl() { setSpots() async {
return _currentUser.idDafl; _datas.spots = await Location.sendCurrentLocation();
} }
List<Spot> getSpots() { Map<Music, DateTime> getDiscoveries() => _datas.discoveries;
return _location.spots;
}
getLocation() async { setDiscoveries() async {
await _location.sendCurrentLocation(); Map<String, DateTime> tmpData = await _api.requests.getPlaylistTracks();
Map<Music, DateTime> tmpCast = {};
tmpData.forEach((key, value) async {
tmpCast[(await getCompleteMusic(key))] = value;
});
_datas.discoveries = tmpCast;
} }
playTrack(String id) { //Data that can not change
_api.requests.playTrack(id);
Uri getApiUrlAuthorize() => _api.identification.urlAuthorize;
String getApiRedirectUrl() => _api.identification.redirectUri;
String getIdSpotify() => _currentUser.idSpotify;
int getIdDafl() => _currentUser.idDafl;
//
//Other methods
//
apiAuthorization(url) {
_api.apiAuthorization(url);
} }
Future<Map<String, DateTime>> getDiscoveries() async { Future<Music> getCompleteMusic(String id) async {
_currentUser.discoveries = await _api.requests.getPlaylistTracks(); Map infos = await _api.requests.getTrackInfo(id);
return _currentUser.discoveries; return Music(id, infos['name'], infos['artist'], infos['cover']);
} }
removeFromPlaylist(String id) { removeFromPlaylist(String id) {
@ -75,6 +84,10 @@ class Controller {
_api.requests.addToPlaylist(id); _api.requests.addToPlaylist(id);
} }
playTrack(String id) {
_api.requests.playTrack(id);
}
// DATABASE // DATABASE
void save(User userToSave) { void save(User userToSave) {
_dataBaseService.save(userToSave); _dataBaseService.save(userToSave);

@ -0,0 +1,14 @@
import 'package:dafl_project_flutter/main.dart';
import '../model/music.dart';
import '../model/spot.dart';
class LiveDatas {
bool discoveriesSortChoice =
false; //false = sort by name ; true = sort by date
Map<Music, DateTime> discoveries;
List<Spot> spots;
Music userCurrentMusic;
LiveDatas() {}
}

@ -175,7 +175,7 @@ class CardProvider extends ChangeNotifier {
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
await MyApp.controller.getDiscoveries().containsKey( MyApp.controller.getDiscoveries().containsKey(
MyApp.controller.currentUser.spots.last.music) MyApp.controller.currentUser.spots.last.music)
? const Icon( ? const Icon(
Icons.info_rounded, Icons.info_rounded,
@ -327,7 +327,7 @@ class CardProvider extends ChangeNotifier {
child: ElevatedButton( child: ElevatedButton(
onPressed: () { onPressed: () {
sendMessage(messageTextField.text, sendMessage(messageTextField.text,
MyApp.controller.getSpots().last.userId); MyApp.controller.getSpots().last.key);
}, },
style: ElevatedButton.styleFrom( style: ElevatedButton.styleFrom(
backgroundColor: const Color(0xFF3F1DC3), backgroundColor: const Color(0xFF3F1DC3),

@ -1,7 +1,4 @@
import 'dart:async'; import 'dart:async';
import '../main.dart';
import 'music.dart';
import 'spot.dart';
class User { class User {
Timer? timer; Timer? timer;
@ -11,11 +8,8 @@ class User {
late int idDafl; late int idDafl;
late String usernameDafl; late String usernameDafl;
late String passwDafl; late String passwDafl;
Map<String, DateTime> discoveries = {};
final String _idSpotify; final String _idSpotify;
late String currentMusic;
bool sortChoise = true;
//constructors //constructors
User(this.usernameDafl, this._idSpotify); User(this.usernameDafl, this._idSpotify);

@ -6,17 +6,7 @@ import 'dart:async';
import '../../main.dart'; import '../../main.dart';
class Location { class Location {
final Map _spots = {}; static Future<List<Spot>> sendCurrentLocation() async {
List<Spot> get spots {
List<Spot> spots = [];
_spots.forEach((key, value) {
spots.add(Spot(key, value));
});
return spots;
}
sendCurrentLocation() async {
Uri uri = Uri.parse( Uri uri = Uri.parse(
"https://codefirst.iut.uca.fr/containers/php_script-dorianhodin/insertAndMakeListUser.php"); "https://codefirst.iut.uca.fr/containers/php_script-dorianhodin/insertAndMakeListUser.php");
LocationPermission permission; LocationPermission permission;
@ -32,7 +22,7 @@ class Location {
} }
String actualUser = MyApp.controller.getIdDafl().toString(); String actualUser = MyApp.controller.getIdDafl().toString();
String actualSong = MyApp.controller.getCurrentMusic(); String actualSong = MyApp.controller.getCurrentMusic().id;
Position current = await Geolocator.getCurrentPosition(); Position current = await Geolocator.getCurrentPosition();
http.Response response = await http.post(uri, body: { http.Response response = await http.post(uri, body: {
@ -43,13 +33,20 @@ class Location {
}); });
var data = jsonDecode(response.body); var data = jsonDecode(response.body);
Map<String, String> spotsData = {};
List<Spot> spots = [];
if (data == 2) { if (data == 2) {
return Future.error("Failed to connect, connection timeout"); return Future.error("Failed to connect, connection timeout");
} else if (data == 3) { } else if (data == 3) {
return Future.error("POST method failed"); return Future.error("POST method failed");
} else { } else {
data.forEach((s) => _spots.putIfAbsent(s['user'], () => s['music'])); data.forEach((s) => spotsData.putIfAbsent(s['user'], () => s['music']));
} }
spotsData.forEach((key, value) async {
spots.add(Spot(key, await MyApp.controller.getCompleteMusic(value)));
});
return spots;
} }
} }

@ -39,8 +39,8 @@ class _DiscoveryWidgetState extends State<DiscoveryWidget> {
), ),
OutlinedButton( OutlinedButton(
onPressed: () { onPressed: () {
MyApp.controller.sortChoice = MyApp.controller
!MyApp.controller.sortChoice; .setChoice(!MyApp.controller.getChoice());
rebuildAllChildren(context); rebuildAllChildren(context);
setState(() {}); setState(() {});
}, },
@ -49,7 +49,7 @@ class _DiscoveryWidgetState extends State<DiscoveryWidget> {
shadowColor: Colors.black, shadowColor: Colors.black,
shape: const CircleBorder(), shape: const CircleBorder(),
padding: const EdgeInsets.all(24)), padding: const EdgeInsets.all(24)),
child: MyApp.controller.sortChoice child: MyApp.controller.getChoice()
? Image.asset( ? Image.asset(
'assets/images/date_sort_icon.png', 'assets/images/date_sort_icon.png',
height: 25, height: 25,
@ -119,7 +119,7 @@ class _DiscoveryListState extends State<DiscoveryList> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var listDiscoveries = MyApp.controller.getDiscoveries(); var listDiscoveries = MyApp.controller.getDiscoveries();
if (MyApp.controller.sortChoice) { if (MyApp.controller.getChoice()) {
listDiscoveries.sort((a, b) { listDiscoveries.sort((a, b) {
return a.date.compareTo(b.date); return a.date.compareTo(b.date);
}); });

@ -30,12 +30,6 @@ class MainPageProfil extends StatefulWidget {
class _MainPageProfilState extends State<MainPageProfil> { class _MainPageProfilState extends State<MainPageProfil> {
String username = MyApp.controller.getIdDafl().toString(); String username = MyApp.controller.getIdDafl().toString();
late Future<Music> data;
Future<Music> getData() async {
return await MyApp.controller
.getCompleteMusic(MyApp.controller.getCurrentMusic());
}
@override @override
initState() async { initState() async {

Loading…
Cancel
Save