Merge branch 'Enzo'
continuous-integration/drone/push Build is failing Details

pull/4/head
Enzo 1 year ago
commit 44f2a6b9ca

@ -4,6 +4,7 @@ import 'package:smartfit_app_mobile/modele/user.dart';
import 'package:smartfit_app_mobile/common/colo_extension.dart'; import 'package:smartfit_app_mobile/common/colo_extension.dart';
import 'package:smartfit_app_mobile/view/home/stats_activities_view.dart'; import 'package:smartfit_app_mobile/view/home/stats_activities_view.dart';
import 'package:smartfit_app_mobile/view/login/signup_view.dart'; import 'package:smartfit_app_mobile/view/login/signup_view.dart';
import 'package:smartfit_app_mobile/view/test/page_test.dart';
void main() { void main() {
runApp(ChangeNotifierProvider( runApp(ChangeNotifierProvider(
@ -37,6 +38,7 @@ class MyApp extends StatelessWidget {
primaryColor: TColor.primaryColor1, primaryColor: TColor.primaryColor1,
fontFamily: "Poppins"), fontFamily: "Poppins"),
home: const SignUpView(), home: const SignUpView(),
//home: const TestPage(),
//home: const ProfileView(), //home: const ProfileView(),
); );
} }

@ -1,7 +1,10 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:ffi';
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:csv/csv.dart'; import 'package:csv/csv.dart';
import 'package:fit_tool/fit_tool.dart'; import 'package:fit_tool/fit_tool.dart';
import 'package:path_provider/path_provider.dart';
import 'package:tuple/tuple.dart';
class ManagerFile { class ManagerFile {
// -- Field // -- Field
@ -45,23 +48,42 @@ class ManagerFile {
]; ];
} }
List<List<String>> convertBytesFitFileIntoCSVList(Uint8List bytes) { Tuple3<String, String, List<List<String>>> convertBytesFitFileIntoCSVList(
Uint8List bytes) {
FitFile fitFile = FitFile.fromBytes(bytes); FitFile fitFile = FitFile.fromBytes(bytes);
// ----------- Lire le fit et extarire les données qu'on choisi ----------- // // ----------- Lire le fit et extarire les données qu'on choisi ----------- //
List<Map<String, Map<String, String>>> dataResult = List<Map<String, Map<String, String>>> dataResult =
List.empty(growable: true); List.empty(growable: true);
String startTime = "2000-01-01";
String category = "Generic";
for (Record element in fitFile.records) { for (Record element in fitFile.records) {
List listeField = element.toRow(); List listeField = element.toRow();
Map<String, Map<String, String>> ligneDataResult = {}; Map<String, Map<String, String>> ligneDataResult = {};
bool skip = true; bool skip = true;
bool sesssionLigne = false;
if (listeField[0] != "Data") { if (listeField[0] != "Data") {
continue; continue;
} }
for (int i = 0; i < listeField.length;) { for (int i = 0; i < listeField.length;) {
// -- Check si c'est une ligne session --//
if (i == 0 && listeField[0] == "Data" && listeField[2] == "session") {
sesssionLigne = true;
}
// -- Si ligne session && starttime -- //
if (sesssionLigne && listeField[i] == "start_time") {
startTime =
DateTime.fromMillisecondsSinceEpoch(listeField[i + 1] as int)
.toIso8601String();
}
// -- Si ligne session && sport -- //
if (sesssionLigne && listeField[i] == "sport") {
category = _getCategoryById(listeField[i + 1] as int);
}
if (allowedFieldWalking.contains(listeField[i])) { if (allowedFieldWalking.contains(listeField[i])) {
Map<String, String> tmp = {}; Map<String, String> tmp = {};
tmp["Value"] = listeField[i + 1].toString(); tmp["Value"] = listeField[i + 1].toString();
@ -103,7 +125,9 @@ class ManagerFile {
} }
csvData.insert(0, enteteCSV); csvData.insert(0, enteteCSV);
// ------- FIN --------------- // // ------- FIN --------------- //
return csvData; // -- Extraire la catégorie + date début -- //
return Tuple3(category, startTime, csvData);
} }
// -- Read the byte of file CSV -- // // -- Read the byte of file CSV -- //
@ -111,12 +135,48 @@ class ManagerFile {
return const CsvToListConverter().convert(utf8.decode(bytes)); return const CsvToListConverter().convert(utf8.decode(bytes));
} }
/* // -- Retourne la catégorie et la date d'une activité -- //
Tuple2<String, String> getCategoryAndDate(List<List<String>> contentFile) {
String startTime = "2000-01-01";
String category = "Generic";
// On regarde que les 8 derniers ligne !!
for (int i = contentFile.length - 1; i != contentFile.length - 8; i--) {
if (contentFile[i][0] == "Data" && contentFile[i][0] == "session") {
for (int colonne = 6; colonne < contentFile[i].length; colonne++) {
if (contentFile[i][colonne] == "start_time") {
// Convertir la date timestamp !!!
startTime = DateTime.fromMillisecondsSinceEpoch(
contentFile[i][colonne + 1] as int)
.toIso8601String();
}
if (contentFile[i][colonne] == "sport") {
category = _getCategoryById(contentFile[i][colonne + 1] as int);
}
}
}
}
return Tuple2(category, startTime);
}
String _getCategoryById(int id) {
switch (id) {
case 0:
return "generic";
case 2:
return "cycling";
case 11:
return "walking";
default:
return "generic";
}
}
// ------------- Get The path of application --- // // ------------- Get The path of application --- //
Future<String> get localPath async { Future<String> get localPath async {
final directory = await getApplicationDocumentsDirectory(); final directory = await getApplicationDocumentsDirectory();
return directory.path; return directory.path;
}*/ }
/* /*
// ----- Read csv File ------- // // ----- Read csv File ------- //

@ -54,7 +54,6 @@ class ManagerSelectedActivity {
List<FlSpot> getXWithTime(String field) { List<FlSpot> getXWithTime(String field) {
List<FlSpot> result = List.empty(growable: true); List<FlSpot> result = List.empty(growable: true);
int firstTimestamp = 0; int firstTimestamp = 0;
for (int c = 0; c < activitySelected.length; c++) { for (int c = 0; c < activitySelected.length; c++) {

@ -63,16 +63,17 @@ class ListActivityUtile {
Future<Tuple2<bool, String>> addFile( Future<Tuple2<bool, String>> addFile(
Uint8List bytes, String filename, String token) async { Uint8List bytes, String filename, String token) async {
// -- Transormer le fit en CSV // -- Transormer le fit en CSV
List<List<String>> csv = _managerFile.convertBytesFitFileIntoCSVList(bytes); Tuple3<String, String, List<List<String>>> categorieStarttimeCsv =
String csvString = const ListToCsvConverter().convert(csv); _managerFile.convertBytesFitFileIntoCSVList(bytes);
String csvString =
const ListToCsvConverter().convert(categorieStarttimeCsv.item3);
Uint8List byteCSV = Uint8List.fromList(utf8.encode(csvString)); Uint8List byteCSV = Uint8List.fromList(utf8.encode(csvString));
// --- Save Local // --- Save Local
// --- Api // --- Api
String categoryActivity = filename.split("_").first.toLowerCase();
String dateActivity = filename.split("_")[1].split("T").first;
Tuple2<bool, String> result = await _strategy.uploadFileByte( Tuple2<bool, String> result = await _strategy.uploadFileByte(token, byteCSV,
token, byteCSV, filename, categoryActivity, dateActivity); filename, categorieStarttimeCsv.item1, categorieStarttimeCsv.item2);
if (result.item1 == false) { if (result.item1 == false) {
return Tuple2(false, result.item2); return Tuple2(false, result.item2);
} }

@ -1,6 +1,7 @@
import 'dart:convert'; import 'dart:convert';
import 'package:crypto/crypto.dart'; import 'package:crypto/crypto.dart';
import 'package:csv/csv.dart';
import 'package:fit_tool/fit_tool.dart'; import 'package:fit_tool/fit_tool.dart';
import 'package:flutter/foundation.dart' show kIsWeb; import 'package:flutter/foundation.dart' show kIsWeb;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -8,6 +9,7 @@ import 'package:file_picker/file_picker.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'dart:io'; import 'dart:io';
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/manager_file.dart';
import 'package:smartfit_app_mobile/modele/user.dart'; import 'package:smartfit_app_mobile/modele/user.dart';
import 'package:smartfit_app_mobile/modele/api/request_api.dart'; import 'package:smartfit_app_mobile/modele/api/request_api.dart';
import 'package:tuple/tuple.dart'; import 'package:tuple/tuple.dart';
@ -82,6 +84,8 @@ class _TestPage extends State<TestPage> {
//late File x = File(file.path); //late File x = File(file.path);
Future<void> readFile() async { Future<void> readFile() async {
ManagerFile _managerFile = ManagerFile();
PlatformFile t = result!.files.single; PlatformFile t = result!.files.single;
String? y = t.path; String? y = t.path;
if (t.path == null) { if (t.path == null) {
@ -91,15 +95,13 @@ class _TestPage extends State<TestPage> {
final content = await file.readAsBytes(); final content = await file.readAsBytes();
FitFile fitFile = FitFile.fromBytes(content); FitFile fitFile = FitFile.fromBytes(content);
//print(fitFile.toRows()); //print(fitFile.toRows());
print("--------------");
print("--------------");
print("--------------");
//print("${await _managerFile.localPath}\\test.csv"); //print("${await _managerFile.localPath}\\test.csv");
//final outFile = File("${await _managerFile.localPath}\\test.csv"); final outFile = File("${await _managerFile.localPath}\\test.csv");
//final csv = const ListToCsvConverter().convert(fitFile.toRows()); final csv = const ListToCsvConverter().convert(fitFile.toRows());
//await outFile.writeAsString(csv); await outFile.writeAsString(csv);
/*
// ----------- Lire le fit et extarire les données qu'on choisi ----------- // // ----------- Lire le fit et extarire les données qu'on choisi ----------- //
List<Record> liste = fitFile.records; List<Record> liste = fitFile.records;
List<String> allowedField = [ List<String> allowedField = [
@ -180,7 +182,7 @@ class _TestPage extends State<TestPage> {
//print(x.getDistanceWithTime(ActivityOfUser(result))); //print(x.getDistanceWithTime(ActivityOfUser(result)));
//print(x.getDistance(ActivityOfUser(result))); //print(x.getDistance(ActivityOfUser(result)));
//print(x.getAltitudeWithTime(ActivityOfUser(result))); //print(x.getAltitudeWithTime(ActivityOfUser(result)));
//print(x.getSpeedWithTime(ActivityOfUser(result))); //print(x.getSpeedWithTime(ActivityOfUser(result)));*/
} }
} }

Loading…
Cancel
Save