From eb1fa1e57d3ee12e1b81319f0a8b8c87108ca579 Mon Sep 17 00:00:00 2001 From: Enzo Date: Mon, 27 Nov 2023 16:00:05 +0100 Subject: [PATCH] gestion des fichier web et mobile fini --- lib/modele/activity.dart | 21 +++-- lib/modele/user.dart | 14 +--- .../list_activity_utile.dart | 49 ------------ .../list_activity/list_activity_utile.dart | 74 ++++++++++++++++++ .../activity/mobile/mobile_list_activity.dart | 61 ++++----------- lib/view/activity/web/web_list_activity.dart | 77 ++++++------------- 6 files changed, 128 insertions(+), 168 deletions(-) delete mode 100644 lib/modele/utile/list_activity.dart/list_activity_utile.dart create mode 100644 lib/modele/utile/list_activity/list_activity_utile.dart diff --git a/lib/modele/activity.dart b/lib/modele/activity.dart index faf3f86..7bb5e17 100644 --- a/lib/modele/activity.dart +++ b/lib/modele/activity.dart @@ -134,7 +134,8 @@ class ActivityOfUser { for (int i = contentActivity.length - 1; i != 0; i--) { if (notNull(i, enteteCSV["Value_${_managerFile.fieldDistance}"]!)) { double valueTmp = contentActivity[i] - [enteteCSV["Value_${_managerFile.fieldDistance}"]!]; + [enteteCSV["Value_${_managerFile.fieldDistance}"]!] + .toDouble(); if (valueTmp > max) { max = valueTmp; } @@ -164,7 +165,8 @@ class ActivityOfUser { for (int i = contentActivity.length - 1; i != 0; i--) { if (notNull(i, enteteCSV["Value_${_managerFile.fieldTotalStep}"]!)) { return contentActivity[i] - [enteteCSV["Value_${_managerFile.fieldTotalStep}"]!]; + [enteteCSV["Value_${_managerFile.fieldTotalStep}"]!] + .toInt(); } } return 0; @@ -192,7 +194,8 @@ class ActivityOfUser { for (int i = 0; i < contentActivity.length; i++) { if (notNull(i, enteteCSV["Value_${_managerFile.fieldAltitude}"]!)) { double valueTmp = contentActivity[i] - [enteteCSV["Value_${_managerFile.fieldAltitude}"]!]; + [enteteCSV["Value_${_managerFile.fieldAltitude}"]!] + .toDouble(); if (valueTmp > max) { max = valueTmp; } @@ -207,7 +210,8 @@ class ActivityOfUser { for (int i = 0; i < contentActivity.length; i++) { if (notNull(i, enteteCSV["Value_${_managerFile.fieldAltitude}"]!)) { double valueTmp = contentActivity[i] - [enteteCSV["Value_${_managerFile.fieldAltitude}"]!]; + [enteteCSV["Value_${_managerFile.fieldAltitude}"]!] + .toDouble(); if (valueTmp < min) { min = valueTmp; } @@ -238,8 +242,8 @@ class ActivityOfUser { firstTimestamp) ~/ 100) .toDouble(), - contentActivity[i] - [enteteCSV["Value_${_managerFile.fieldSpeed}"]!])); + contentActivity[i][enteteCSV["Value_${_managerFile.fieldSpeed}"]!] + .toDouble())); } } return result; @@ -250,8 +254,9 @@ class ActivityOfUser { double max = 0.00; for (int i = 0; i < contentActivity.length; i++) { if (notNull(i, enteteCSV["Value_${_managerFile.fieldSpeed}"]!)) { - double valueTmp = - contentActivity[i][enteteCSV["Value_${_managerFile.fieldSpeed}"]!]; + double valueTmp = contentActivity[i] + [enteteCSV["Value_${_managerFile.fieldSpeed}"]!] + .toDouble(); if (valueTmp > max) { max = valueTmp; } diff --git a/lib/modele/user.dart b/lib/modele/user.dart index c067711..ce294d8 100644 --- a/lib/modele/user.dart +++ b/lib/modele/user.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.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 { String username = "VOID"; @@ -23,16 +23,4 @@ class User extends ChangeNotifier { listActivity.insert(index, activity); 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(); - } } diff --git a/lib/modele/utile/list_activity.dart/list_activity_utile.dart b/lib/modele/utile/list_activity.dart/list_activity_utile.dart deleted file mode 100644 index 08c8faa..0000000 --- a/lib/modele/utile/list_activity.dart/list_activity_utile.dart +++ /dev/null @@ -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 getContentOnTheFirstFileMobile(BuildContext context) async { - Tuple2 result = await _strategy.getFile( - Provider.of(context, listen: false).token, - Provider.of(context, listen: false).listActivity[0].fileUuid); - if (result.item1 == false) { - //Erreur - //print(result); - return; - } - /* - File file = File( - "${await _managerFile.localPath}/${Provider.of(context, listen: false).listActivity[0].nameFile}"); - await file.create(); - await file.writeAsBytes(result.item2); - Provider.of(context, listen: false).listActivity[0].contentActivity = - await _managerFile.readFitFileWhithFile(file); - */ - - Provider.of(context, listen: false).listActivity[0].contentActivity = - List.from(_managerFile.convertByteIntoCSV(result.item2)); - } - - Future getContentOnTheFirstFileWeb(BuildContext context) async { - User user = Provider.of(context, listen: false); - Tuple2 result = - await _strategy.getFile(user.token, user.listActivity[0].fileUuid); - if (result.item1 == false) { - //Erreur - //print(result); - return; - } - /* - Provider.of(context, listen: false).listActivity[0].contentActivity = - _managerFile.convertByteIntoCSV(result.item2);*/ - } -} diff --git a/lib/modele/utile/list_activity/list_activity_utile.dart b/lib/modele/utile/list_activity/list_activity_utile.dart new file mode 100644 index 0000000..0ee8bae --- /dev/null +++ b/lib/modele/utile/list_activity/list_activity_utile.dart @@ -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> getContentActivity(BuildContext context) async { + Tuple2 result = await _strategy.getFile( + Provider.of(context, listen: false).token, + Provider.of(context, listen: false).listActivity[0].fileUuid); + if (result.item1 == false) { + return Tuple2(result.item1, result.item2); + } + Provider.of(context, listen: false).listActivity[0].contentActivity = + List.from(_managerFile.convertByteIntoCSV(result.item2)); + return const Tuple2(true, "Yeah"); + } + + Future> getFiles( + String token, BuildContext context) async { + bool notZero = false; + Tuple2 result = await _strategy + .getFiles(Provider.of(context, listen: false).token); + if (result.item1 == false) { + return Tuple2(result.item1, result.item2); + } + + for (Map element in result.item2) { + if (!notZero) { + Provider.of(context, listen: false).listActivity.clear(); + notZero = true; + } + Provider.of(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> addFile( + Uint8List bytes, String filename, String token) async { + // -- Transormer le fit en CSV + List> 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 result = await _strategy.uploadFileByte( + token, byteCSV, filename, categoryActivity, dateActivity); + if (result.item1 == false) { + return Tuple2(false, result.item2); + } + return const Tuple2(true, "Yeah"); + } +} diff --git a/lib/view/activity/mobile/mobile_list_activity.dart b/lib/view/activity/mobile/mobile_list_activity.dart index 075ffd6..3a978e7 100644 --- a/lib/view/activity/mobile/mobile_list_activity.dart +++ b/lib/view/activity/mobile/mobile_list_activity.dart @@ -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/user.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'; class MobileListActivity extends StatefulWidget { @@ -63,50 +63,18 @@ class _MobileListActivity extends State { return true; } - void addFile(String path, String token, String filename) async { - // -- Transormer le fit en CSV - List> csv = _managerFile - .convertBytesFitFileIntoCSVList(await File(path).readAsBytes()); - 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 result = await _strategy.uploadFileByte( - token, byteCSV, filename, categoryActivity, dateActivity); - if (result.item1 == false) { - // Afficher msg d'erreur - print("Upload - ${result.item2}"); + void addFileMobile(String path, String token, String filename) async { + Tuple2 resultAdd = + await _utile.addFile(await File(path).readAsBytes(), filename, token); + if (!resultAdd.item1) { + //print("Message error"); return; } - getFiles(token); - } - - 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 + Tuple2 resultGet = await _utile.getFiles(token, context); + if (!resultGet.item1) { + //print("Message error"); return; } - Provider.of(context, listen: false).listActivity.clear(); - - for (Map element in result.item2) { - Provider.of(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 @@ -134,8 +102,9 @@ class _MobileListActivity extends State { fontWeight: FontWeight.w700), ), TextButton( - onPressed: () => getFiles( - Provider.of(context, listen: false).token), + onPressed: () => _utile.getFiles( + Provider.of(context, listen: false).token, + context), child: Text("Get activity", style: TextStyle( color: TColor.gray, @@ -146,7 +115,7 @@ class _MobileListActivity extends State { FilePickerResult? result = await FilePicker.platform.pickFiles(); if (result != null) { - addFile( + addFileMobile( result.files.single.path!, Provider.of(context, listen: false).token, result.files.single.name); @@ -225,8 +194,8 @@ class _MobileListActivity extends State { Provider.of(context, listen: false) .removeActivity(activityObj); Provider.of(context, listen: false) - .insertActivityTopMobile( - activityObj, context); + .insertActivity(0, activityObj); + _utile.getContentActivity(context); }, isFirstActivity: isFirstActivity, ), diff --git a/lib/view/activity/web/web_list_activity.dart b/lib/view/activity/web/web_list_activity.dart index 3923c10..8577f5a 100644 --- a/lib/view/activity/web/web_list_activity.dart +++ b/lib/view/activity/web/web_list_activity.dart @@ -1,6 +1,7 @@ +import 'dart:io'; import 'dart:typed_data'; 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: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/modele/api/i_data_strategy.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/common_widget/container/workout_row.dart'; @@ -49,68 +49,36 @@ class _WebListActivityState extends State { Future deleteFileOnBDD(String token, String fileUuid) async { Tuple2 result = await _strategy.deleteFile(token, fileUuid); if (!result.item1) { - print(fileUuid); - print("msg d'erreur"); - print(result.item2); + //print(fileUuid); + //print("msg d'erreur"); + //print(result.item2); return false; } return true; } - void addFile(html.File file) async { + void addFileWeb(html.File file, String token) async { final reader = html.FileReader(); reader.readAsArrayBuffer(file); + reader.onLoadEnd.listen((event) async { if (reader.readyState == html.FileReader.DONE) { + print("donne"); Uint8List bytes = reader.result as Uint8List; - - String filename = file.name; - String categoryActivity = filename.split("_").first.toLowerCase(); - String dateActivity = filename.split("_")[1].split("T").first; - - Tuple2 result = await strategy.uploadFileByte( - Provider.of(context, listen: false).token, - bytes, - filename, - categoryActivity, - dateActivity); - - if (result.item1 == false) { - // Afficher msg d'erreur - print("Upload - ${result.item2}"); + Tuple2 resultAdd = + await _utile.addFile(bytes, file.name, token); + if (!resultAdd.item1) { + return; + } + Tuple2 resultGet = await _utile.getFiles(token, context); + if (!resultGet.item1) { + //print("MessageError"); 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(context, listen: false).token); - if (result.item1 == false) { - print("GetFiles - ${result.item2}"); - // Afficher une message d'erreur - return; - } - Provider.of(context, listen: false).listActivity.clear(); - - for (Map element in result.item2) { - Provider.of(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 Widget build(BuildContext context) { var media = MediaQuery.of(context).size; @@ -135,7 +103,9 @@ class _WebListActivityState extends State { fontWeight: FontWeight.w700), ), TextButton( - onPressed: getFiles, + onPressed: () => _utile.getFiles( + Provider.of(context, listen: false).token, + context), child: Text("Get activity", style: TextStyle( color: TColor.gray, @@ -150,7 +120,10 @@ class _WebListActivityState extends State { uploadInput.onChange.listen((e) { final files = uploadInput.files; if (files != null && files.isNotEmpty) { - addFile(files[0]); // Lecture du fichier sélectionné + addFileWeb( + files[0], + Provider.of(context, listen: false) + .token); // Lecture du fichier sélectionné } }); }, @@ -223,8 +196,8 @@ class _WebListActivityState extends State { Provider.of(context, listen: false) .removeActivity(activityObj); Provider.of(context, listen: false) - .insertActivityTopWeb( - activityObj, context); + .insertActivity(0, activityObj); + _utile.getContentActivity(context); }, isFirstActivity: isFirstActivity, ),