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--) {
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;
}

@ -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();
}
}

@ -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/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<MobileListActivity> {
return true;
}
void addFile(String path, String token, String filename) async {
// -- Transormer le fit en CSV
List<List<String>> 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<bool, String> 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<bool, String> 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<bool, String> resultGet = await _utile.getFiles(token, context);
if (!resultGet.item1) {
//print("Message error");
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
@ -134,8 +102,9 @@ class _MobileListActivity extends State<MobileListActivity> {
fontWeight: FontWeight.w700),
),
TextButton(
onPressed: () => getFiles(
Provider.of<User>(context, listen: false).token),
onPressed: () => _utile.getFiles(
Provider.of<User>(context, listen: false).token,
context),
child: Text("Get activity",
style: TextStyle(
color: TColor.gray,
@ -146,7 +115,7 @@ class _MobileListActivity extends State<MobileListActivity> {
FilePickerResult? result =
await FilePicker.platform.pickFiles();
if (result != null) {
addFile(
addFileMobile(
result.files.single.path!,
Provider.of<User>(context, listen: false).token,
result.files.single.name);
@ -225,8 +194,8 @@ class _MobileListActivity extends State<MobileListActivity> {
Provider.of<User>(context, listen: false)
.removeActivity(activityObj);
Provider.of<User>(context, listen: false)
.insertActivityTopMobile(
activityObj, context);
.insertActivity(0, activityObj);
_utile.getContentActivity(context);
},
isFirstActivity: isFirstActivity,
),

@ -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<WebListActivity> {
Future<bool> deleteFileOnBDD(String token, String fileUuid) async {
Tuple2<bool, String> 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<bool, String> result = await strategy.uploadFileByte(
Provider.of<User>(context, listen: false).token,
bytes,
filename,
categoryActivity,
dateActivity);
if (result.item1 == false) {
// Afficher msg d'erreur
print("Upload - ${result.item2}");
Tuple2<bool, String> resultAdd =
await _utile.addFile(bytes, file.name, token);
if (!resultAdd.item1) {
return;
}
Tuple2<bool, String> 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<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
Widget build(BuildContext context) {
var media = MediaQuery.of(context).size;
@ -135,7 +103,9 @@ class _WebListActivityState extends State<WebListActivity> {
fontWeight: FontWeight.w700),
),
TextButton(
onPressed: getFiles,
onPressed: () => _utile.getFiles(
Provider.of<User>(context, listen: false).token,
context),
child: Text("Get activity",
style: TextStyle(
color: TColor.gray,
@ -150,7 +120,10 @@ class _WebListActivityState extends State<WebListActivity> {
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<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)
.removeActivity(activityObj);
Provider.of<User>(context, listen: false)
.insertActivityTopWeb(
activityObj, context);
.insertActivity(0, activityObj);
_utile.getContentActivity(context);
},
isFirstActivity: isFirstActivity,
),

Loading…
Cancel
Save