gestion des fichier web et mobile fini

pull/4/head
Enzo 1 year ago
parent 35714bfbb7
commit eb1fa1e57d

@ -134,7 +134,8 @@ class ActivityOfUser {
for (int i = contentActivity.length - 1; i != 0; i--) { for (int i = contentActivity.length - 1; i != 0; i--) {
if (notNull(i, enteteCSV["Value_${_managerFile.fieldDistance}"]!)) { if (notNull(i, enteteCSV["Value_${_managerFile.fieldDistance}"]!)) {
double valueTmp = contentActivity[i] double valueTmp = contentActivity[i]
[enteteCSV["Value_${_managerFile.fieldDistance}"]!]; [enteteCSV["Value_${_managerFile.fieldDistance}"]!]
.toDouble();
if (valueTmp > max) { if (valueTmp > max) {
max = valueTmp; max = valueTmp;
} }
@ -164,7 +165,8 @@ class ActivityOfUser {
for (int i = contentActivity.length - 1; i != 0; i--) { for (int i = contentActivity.length - 1; i != 0; i--) {
if (notNull(i, enteteCSV["Value_${_managerFile.fieldTotalStep}"]!)) { if (notNull(i, enteteCSV["Value_${_managerFile.fieldTotalStep}"]!)) {
return contentActivity[i] return contentActivity[i]
[enteteCSV["Value_${_managerFile.fieldTotalStep}"]!]; [enteteCSV["Value_${_managerFile.fieldTotalStep}"]!]
.toInt();
} }
} }
return 0; return 0;
@ -192,7 +194,8 @@ class ActivityOfUser {
for (int i = 0; i < contentActivity.length; i++) { for (int i = 0; i < contentActivity.length; i++) {
if (notNull(i, enteteCSV["Value_${_managerFile.fieldAltitude}"]!)) { if (notNull(i, enteteCSV["Value_${_managerFile.fieldAltitude}"]!)) {
double valueTmp = contentActivity[i] double valueTmp = contentActivity[i]
[enteteCSV["Value_${_managerFile.fieldAltitude}"]!]; [enteteCSV["Value_${_managerFile.fieldAltitude}"]!]
.toDouble();
if (valueTmp > max) { if (valueTmp > max) {
max = valueTmp; max = valueTmp;
} }
@ -207,7 +210,8 @@ class ActivityOfUser {
for (int i = 0; i < contentActivity.length; i++) { for (int i = 0; i < contentActivity.length; i++) {
if (notNull(i, enteteCSV["Value_${_managerFile.fieldAltitude}"]!)) { if (notNull(i, enteteCSV["Value_${_managerFile.fieldAltitude}"]!)) {
double valueTmp = contentActivity[i] double valueTmp = contentActivity[i]
[enteteCSV["Value_${_managerFile.fieldAltitude}"]!]; [enteteCSV["Value_${_managerFile.fieldAltitude}"]!]
.toDouble();
if (valueTmp < min) { if (valueTmp < min) {
min = valueTmp; min = valueTmp;
} }
@ -238,8 +242,8 @@ class ActivityOfUser {
firstTimestamp) ~/ firstTimestamp) ~/
100) 100)
.toDouble(), .toDouble(),
contentActivity[i] contentActivity[i][enteteCSV["Value_${_managerFile.fieldSpeed}"]!]
[enteteCSV["Value_${_managerFile.fieldSpeed}"]!])); .toDouble()));
} }
} }
return result; return result;
@ -250,8 +254,9 @@ class ActivityOfUser {
double max = 0.00; double max = 0.00;
for (int i = 0; i < contentActivity.length; i++) { for (int i = 0; i < contentActivity.length; i++) {
if (notNull(i, enteteCSV["Value_${_managerFile.fieldSpeed}"]!)) { if (notNull(i, enteteCSV["Value_${_managerFile.fieldSpeed}"]!)) {
double valueTmp = double valueTmp = contentActivity[i]
contentActivity[i][enteteCSV["Value_${_managerFile.fieldSpeed}"]!]; [enteteCSV["Value_${_managerFile.fieldSpeed}"]!]
.toDouble();
if (valueTmp > max) { if (valueTmp > max) {
max = valueTmp; max = valueTmp;
} }

@ -1,6 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:smartfit_app_mobile/modele/activity.dart'; import 'package:smartfit_app_mobile/modele/activity.dart';
import 'package:smartfit_app_mobile/modele/utile/list_activity.dart/list_activity_utile.dart'; import 'package:smartfit_app_mobile/modele/utile/list_activity/list_activity_utile.dart';
class User extends ChangeNotifier { class User extends ChangeNotifier {
String username = "VOID"; String username = "VOID";
@ -23,16 +23,4 @@ class User extends ChangeNotifier {
listActivity.insert(index, activity); listActivity.insert(index, activity);
notifyListeners(); notifyListeners();
} }
void insertActivityTopMobile(ActivityOfUser activity, BuildContext context) {
listActivity.insert(0, activity);
ListActivityUtile().getContentOnTheFirstFileMobile(context);
notifyListeners();
}
void insertActivityTopWeb(ActivityOfUser activity, BuildContext context) {
listActivity.insert(0, activity);
ListActivityUtile().getContentOnTheFirstFileWeb(context);
notifyListeners();
}
} }

@ -1,49 +0,0 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:smartfit_app_mobile/modele/api/i_data_strategy.dart';
import 'package:smartfit_app_mobile/modele/api/request_api.dart';
import 'package:smartfit_app_mobile/modele/manager_file.dart';
import 'package:smartfit_app_mobile/modele/user.dart';
import 'package:tuple/tuple.dart';
class ListActivityUtile {
final IDataStrategy _strategy = RequestApi();
final ManagerFile _managerFile = ManagerFile();
Future<void> getContentOnTheFirstFileMobile(BuildContext context) async {
Tuple2 result = await _strategy.getFile(
Provider.of<User>(context, listen: false).token,
Provider.of<User>(context, listen: false).listActivity[0].fileUuid);
if (result.item1 == false) {
//Erreur
//print(result);
return;
}
/*
File file = File(
"${await _managerFile.localPath}/${Provider.of<User>(context, listen: false).listActivity[0].nameFile}");
await file.create();
await file.writeAsBytes(result.item2);
Provider.of<User>(context, listen: false).listActivity[0].contentActivity =
await _managerFile.readFitFileWhithFile(file);
*/
Provider.of<User>(context, listen: false).listActivity[0].contentActivity =
List.from(_managerFile.convertByteIntoCSV(result.item2));
}
Future<void> getContentOnTheFirstFileWeb(BuildContext context) async {
User user = Provider.of<User>(context, listen: false);
Tuple2 result =
await _strategy.getFile(user.token, user.listActivity[0].fileUuid);
if (result.item1 == false) {
//Erreur
//print(result);
return;
}
/*
Provider.of<User>(context, listen: false).listActivity[0].contentActivity =
_managerFile.convertByteIntoCSV(result.item2);*/
}
}

@ -0,0 +1,74 @@
import 'dart:convert';
import 'dart:typed_data';
import 'package:csv/csv.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:smartfit_app_mobile/modele/activity.dart';
import 'package:smartfit_app_mobile/modele/api/i_data_strategy.dart';
import 'package:smartfit_app_mobile/modele/api/request_api.dart';
import 'package:smartfit_app_mobile/modele/manager_file.dart';
import 'package:smartfit_app_mobile/modele/user.dart';
import 'package:tuple/tuple.dart';
class ListActivityUtile {
final IDataStrategy _strategy = RequestApi();
final ManagerFile _managerFile = ManagerFile();
Future<Tuple2<bool, String>> getContentActivity(BuildContext context) async {
Tuple2 result = await _strategy.getFile(
Provider.of<User>(context, listen: false).token,
Provider.of<User>(context, listen: false).listActivity[0].fileUuid);
if (result.item1 == false) {
return Tuple2(result.item1, result.item2);
}
Provider.of<User>(context, listen: false).listActivity[0].contentActivity =
List.from(_managerFile.convertByteIntoCSV(result.item2));
return const Tuple2(true, "Yeah");
}
Future<Tuple2<bool, String>> getFiles(
String token, BuildContext context) async {
bool notZero = false;
Tuple2 result = await _strategy
.getFiles(Provider.of<User>(context, listen: false).token);
if (result.item1 == false) {
return Tuple2(result.item1, result.item2);
}
for (Map<String, dynamic> element in result.item2) {
if (!notZero) {
Provider.of<User>(context, listen: false).listActivity.clear();
notZero = true;
}
Provider.of<User>(context, listen: false).addActivity(ActivityOfUser(
element["creation_date"].toString(),
element["category"].toString(),
element["uuid"].toString(),
element["filename"].toString()));
}
if (notZero) {
await getContentActivity(context);
}
return const Tuple2(true, "Yeah");
}
Future<Tuple2<bool, String>> addFile(
Uint8List bytes, String filename, String token) async {
// -- Transormer le fit en CSV
List<List<String>> csv = _managerFile.convertBytesFitFileIntoCSVList(bytes);
String csvString = const ListToCsvConverter().convert(csv);
Uint8List byteCSV = Uint8List.fromList(utf8.encode(csvString));
// --- Save Local
// --- Api
String categoryActivity = filename.split("_").first.toLowerCase();
String dateActivity = filename.split("_")[1].split("T").first;
Tuple2<bool, String> result = await _strategy.uploadFileByte(
token, byteCSV, filename, categoryActivity, dateActivity);
if (result.item1 == false) {
return Tuple2(false, result.item2);
}
return const Tuple2(true, "Yeah");
}
}

@ -13,7 +13,7 @@ import 'package:smartfit_app_mobile/modele/api/request_api.dart';
import 'package:smartfit_app_mobile/modele/manager_file.dart'; import 'package:smartfit_app_mobile/modele/manager_file.dart';
import 'package:smartfit_app_mobile/modele/user.dart'; import 'package:smartfit_app_mobile/modele/user.dart';
import 'package:smartfit_app_mobile/common_widget/container/workout_row.dart'; import 'package:smartfit_app_mobile/common_widget/container/workout_row.dart';
import 'package:smartfit_app_mobile/modele/utile/list_activity.dart/list_activity_utile.dart'; import 'package:smartfit_app_mobile/modele/utile/list_activity/list_activity_utile.dart';
import 'package:tuple/tuple.dart'; import 'package:tuple/tuple.dart';
class MobileListActivity extends StatefulWidget { class MobileListActivity extends StatefulWidget {
@ -63,50 +63,18 @@ class _MobileListActivity extends State<MobileListActivity> {
return true; return true;
} }
void addFile(String path, String token, String filename) async { void addFileMobile(String path, String token, String filename) async {
// -- Transormer le fit en CSV Tuple2<bool, String> resultAdd =
List<List<String>> csv = _managerFile await _utile.addFile(await File(path).readAsBytes(), filename, token);
.convertBytesFitFileIntoCSVList(await File(path).readAsBytes()); if (!resultAdd.item1) {
String csvString = const ListToCsvConverter().convert(csv); //print("Message error");
Uint8List byteCSV = Uint8List.fromList(utf8.encode(csvString));
// --- Save Local
// --- Api
String categoryActivity = filename.split("_").first.toLowerCase();
String dateActivity = filename.split("_")[1].split("T").first;
Tuple2<bool, String> result = await _strategy.uploadFileByte(
token, byteCSV, filename, categoryActivity, dateActivity);
if (result.item1 == false) {
// Afficher msg d'erreur
print("Upload - ${result.item2}");
return; return;
} }
getFiles(token); Tuple2<bool, String> resultGet = await _utile.getFiles(token, context);
} if (!resultGet.item1) {
//print("Message error");
void getFiles(String token) async {
bool check = false;
Tuple2 result = await _strategy.getFiles(token);
if (result.item1 == false) {
print("GetFiles - ${result.item2}");
// Afficher une message d'erreur
return; return;
} }
Provider.of<User>(context, listen: false).listActivity.clear();
for (Map<String, dynamic> element in result.item2) {
Provider.of<User>(context, listen: false).addActivity(ActivityOfUser(
element["creation_date"].toString(),
element["category"].toString(),
element["uuid"].toString(),
element["filename"].toString()));
check = true;
}
if (check) {
await _utile.getContentOnTheFirstFileMobile(context);
}
return;
} }
@override @override
@ -134,8 +102,9 @@ class _MobileListActivity extends State<MobileListActivity> {
fontWeight: FontWeight.w700), fontWeight: FontWeight.w700),
), ),
TextButton( TextButton(
onPressed: () => getFiles( onPressed: () => _utile.getFiles(
Provider.of<User>(context, listen: false).token), Provider.of<User>(context, listen: false).token,
context),
child: Text("Get activity", child: Text("Get activity",
style: TextStyle( style: TextStyle(
color: TColor.gray, color: TColor.gray,
@ -146,7 +115,7 @@ class _MobileListActivity extends State<MobileListActivity> {
FilePickerResult? result = FilePickerResult? result =
await FilePicker.platform.pickFiles(); await FilePicker.platform.pickFiles();
if (result != null) { if (result != null) {
addFile( addFileMobile(
result.files.single.path!, result.files.single.path!,
Provider.of<User>(context, listen: false).token, Provider.of<User>(context, listen: false).token,
result.files.single.name); result.files.single.name);
@ -225,8 +194,8 @@ class _MobileListActivity extends State<MobileListActivity> {
Provider.of<User>(context, listen: false) Provider.of<User>(context, listen: false)
.removeActivity(activityObj); .removeActivity(activityObj);
Provider.of<User>(context, listen: false) Provider.of<User>(context, listen: false)
.insertActivityTopMobile( .insertActivity(0, activityObj);
activityObj, context); _utile.getContentActivity(context);
}, },
isFirstActivity: isFirstActivity, isFirstActivity: isFirstActivity,
), ),

@ -1,6 +1,7 @@
import 'dart:io';
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:smartfit_app_mobile/modele/utile/list_activity.dart/list_activity_utile.dart'; import 'package:smartfit_app_mobile/modele/utile/list_activity/list_activity_utile.dart';
import 'package:tuple/tuple.dart'; import 'package:tuple/tuple.dart';
import 'package:universal_html/html.dart' as html; import 'package:universal_html/html.dart' as html;
@ -9,7 +10,6 @@ import 'package:provider/provider.dart';
import 'package:smartfit_app_mobile/common/colo_extension.dart'; import 'package:smartfit_app_mobile/common/colo_extension.dart';
import 'package:smartfit_app_mobile/modele/api/i_data_strategy.dart'; import 'package:smartfit_app_mobile/modele/api/i_data_strategy.dart';
import 'package:smartfit_app_mobile/modele/api/request_api.dart'; import 'package:smartfit_app_mobile/modele/api/request_api.dart';
import 'package:smartfit_app_mobile/modele/activity.dart';
import 'package:smartfit_app_mobile/modele/user.dart'; import 'package:smartfit_app_mobile/modele/user.dart';
import 'package:smartfit_app_mobile/common_widget/container/workout_row.dart'; import 'package:smartfit_app_mobile/common_widget/container/workout_row.dart';
@ -49,68 +49,36 @@ class _WebListActivityState extends State<WebListActivity> {
Future<bool> deleteFileOnBDD(String token, String fileUuid) async { Future<bool> deleteFileOnBDD(String token, String fileUuid) async {
Tuple2<bool, String> result = await _strategy.deleteFile(token, fileUuid); Tuple2<bool, String> result = await _strategy.deleteFile(token, fileUuid);
if (!result.item1) { if (!result.item1) {
print(fileUuid); //print(fileUuid);
print("msg d'erreur"); //print("msg d'erreur");
print(result.item2); //print(result.item2);
return false; return false;
} }
return true; return true;
} }
void addFile(html.File file) async { void addFileWeb(html.File file, String token) async {
final reader = html.FileReader(); final reader = html.FileReader();
reader.readAsArrayBuffer(file); reader.readAsArrayBuffer(file);
reader.onLoadEnd.listen((event) async { reader.onLoadEnd.listen((event) async {
if (reader.readyState == html.FileReader.DONE) { if (reader.readyState == html.FileReader.DONE) {
print("donne");
Uint8List bytes = reader.result as Uint8List; Uint8List bytes = reader.result as Uint8List;
Tuple2<bool, String> resultAdd =
String filename = file.name; await _utile.addFile(bytes, file.name, token);
String categoryActivity = filename.split("_").first.toLowerCase(); if (!resultAdd.item1) {
String dateActivity = filename.split("_")[1].split("T").first; return;
}
Tuple2<bool, String> result = await strategy.uploadFileByte( Tuple2<bool, String> resultGet = await _utile.getFiles(token, context);
Provider.of<User>(context, listen: false).token, if (!resultGet.item1) {
bytes, //print("MessageError");
filename,
categoryActivity,
dateActivity);
if (result.item1 == false) {
// Afficher msg d'erreur
print("Upload - ${result.item2}");
return; return;
} }
getFiles();
} }
}); });
} }
// -- On doit garder cet fonction dans la page pour pouvoir afficher les msg -- //
void getFiles() async {
bool check = false;
Tuple2 result = await strategy
.getFiles(Provider.of<User>(context, listen: false).token);
if (result.item1 == false) {
print("GetFiles - ${result.item2}");
// Afficher une message d'erreur
return;
}
Provider.of<User>(context, listen: false).listActivity.clear();
for (Map<String, dynamic> element in result.item2) {
Provider.of<User>(context, listen: false).addActivity(ActivityOfUser(
element["creation_date"].toString(),
element["category"].toString(),
element["uuid"].toString(),
element["filename"].toString()));
check = true;
}
if (check) {
await _utile.getContentOnTheFirstFileWeb(context);
}
return;
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var media = MediaQuery.of(context).size; var media = MediaQuery.of(context).size;
@ -135,7 +103,9 @@ class _WebListActivityState extends State<WebListActivity> {
fontWeight: FontWeight.w700), fontWeight: FontWeight.w700),
), ),
TextButton( TextButton(
onPressed: getFiles, onPressed: () => _utile.getFiles(
Provider.of<User>(context, listen: false).token,
context),
child: Text("Get activity", child: Text("Get activity",
style: TextStyle( style: TextStyle(
color: TColor.gray, color: TColor.gray,
@ -150,7 +120,10 @@ class _WebListActivityState extends State<WebListActivity> {
uploadInput.onChange.listen((e) { uploadInput.onChange.listen((e) {
final files = uploadInput.files; final files = uploadInput.files;
if (files != null && files.isNotEmpty) { if (files != null && files.isNotEmpty) {
addFile(files[0]); // Lecture du fichier sélectionné addFileWeb(
files[0],
Provider.of<User>(context, listen: false)
.token); // Lecture du fichier sélectionné
} }
}); });
}, },
@ -223,8 +196,8 @@ class _WebListActivityState extends State<WebListActivity> {
Provider.of<User>(context, listen: false) Provider.of<User>(context, listen: false)
.removeActivity(activityObj); .removeActivity(activityObj);
Provider.of<User>(context, listen: false) Provider.of<User>(context, listen: false)
.insertActivityTopWeb( .insertActivity(0, activityObj);
activityObj, context); _utile.getContentActivity(context);
}, },
isFirstActivity: isFirstActivity, isFirstActivity: isFirstActivity,
), ),

Loading…
Cancel
Save