From bbc4e4fb04f82af077fdab8ed88de2cd30f10e8e Mon Sep 17 00:00:00 2001 From: rem Date: Mon, 11 Dec 2023 10:21:15 +0100 Subject: [PATCH 1/2] :boom: offline done --- lib/modele/api/api_wrapper.dart | 31 ++++++------------- .../profile_view_allplatforme.dart | 17 +++++----- 2 files changed, 19 insertions(+), 29 deletions(-) diff --git a/lib/modele/api/api_wrapper.dart b/lib/modele/api/api_wrapper.dart index 9ea6fd3..48ee173 100644 --- a/lib/modele/api/api_wrapper.dart +++ b/lib/modele/api/api_wrapper.dart @@ -1,5 +1,3 @@ -import 'dart:typed_data'; - import 'package:flutter/foundation.dart'; import 'package:smartfit_app_mobile/modele/activity_info/activity_info.dart'; import 'package:smartfit_app_mobile/modele/api/i_data_strategy.dart'; @@ -9,9 +7,10 @@ import 'package:smartfit_app_mobile/modele/utile/info_message.dart'; import 'package:email_validator/email_validator.dart'; import 'package:tuple/tuple.dart'; import 'dart:convert'; +import 'dart:io'; import 'package:crypto/crypto.dart'; import 'package:smartfit_app_mobile/main.dart'; -import 'dart:io'; +import 'package:http/http.dart' as http; class ApiWrapper { late IDataStrategy api; @@ -22,15 +21,15 @@ class ApiWrapper { // TODO: Change check online for flutterWeb Future isOnline() async { try { - final result = await InternetAddress.lookup('example.com') - .timeout(const Duration(seconds: 2)); - if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) { + final http.Response res = await http + .head(Uri.https("example.com")) + .timeout(const Duration(seconds: 5)); + + if (res.statusCode == 200) { return true; } - } on SocketException catch (_) { + } catch (_) { return false; - } on UnsupportedError catch (_) { - return true; } return true; } @@ -43,13 +42,10 @@ class ApiWrapper { } if (await isOnline()) { - stdout.write("(API) "); api = RequestApi(); } else if (!kIsWeb && localDB.getSaveLocally()) { - stdout.write("(LOCAL) "); api = RequestLocal(); } else { - stdout.write("(API OFFLINE) "); api = RequestApi(); } } @@ -67,7 +63,6 @@ class ApiWrapper { await init(); Tuple2 res = await api.getInfoUser(token); - stdout.write("getUserInfo: ${res.item1}\n"); return res; } @@ -80,7 +75,6 @@ class ApiWrapper { infoManager.displayMessage(noConnectionMessage, true); } - stdout.write("getFile: ${res.item1}\n"); return res; } @@ -92,7 +86,6 @@ class ApiWrapper { infoManager.displayMessage(noConnectionMessage, true); } - stdout.write("getFiles: ${res.item1}\n"); return res; } @@ -108,7 +101,6 @@ class ApiWrapper { Tuple2 res = await api.modifAttribut(token, infoToModify, value); - stdout.write("updateUserInfo: ${res.item1}\n"); if (res.item1) { infoManager.displayMessage( "${infoToModify.capitalize()} modified succesfully !", false); @@ -133,7 +125,6 @@ class ApiWrapper { String hash = sha256.convert(utf8.encode(password)).toString(); Tuple2 res = await api.connexion(email, hash); - stdout.write("login: ${res.item1}\n"); if (res.item1) { return Tuple2(true, res.item2); } else { @@ -151,7 +142,6 @@ class ApiWrapper { Tuple2 res = await api.deleteUser(token); - stdout.write("deleteUser: ${res.item1}\n"); return res; } @@ -162,7 +152,6 @@ class ApiWrapper { Tuple2 res = await api.postUser(email, hash, username); - stdout.write("createUser: ${res.item1}\n"); return res; } @@ -172,7 +161,6 @@ class ApiWrapper { if (handleOffline(infoManager)) return const Tuple2(false, "offline"); Tuple2 res = await api.uploadFile(token, file); - stdout.write("uploadFile: ${res.item1}\n"); return res; } @@ -191,7 +179,7 @@ class ApiWrapper { token, contentFile, filename, category, date, activityInfo); if (!res.item1) infoManager.displayMessage(noConnectionMessage, true); - stdout.write("uploadFileByte: ${res.item1}\n"); + //stdout.write("uploadFileByte: ${res.item1}\n"); return res; } @@ -203,7 +191,6 @@ class ApiWrapper { bool res = await api.deleteFile(token, fileUuid); if (!res) infoManager.displayMessage(noConnectionMessage, true); - stdout.write("deleteFile: $res\n"); return res; } } diff --git a/lib/view/profile/all_platforme/profile_view_allplatforme.dart b/lib/view/profile/all_platforme/profile_view_allplatforme.dart index 64d0514..4406961 100644 --- a/lib/view/profile/all_platforme/profile_view_allplatforme.dart +++ b/lib/view/profile/all_platforme/profile_view_allplatforme.dart @@ -62,13 +62,16 @@ class _ProfileViewAllPlatforme extends State { // TODO: Download/Delete (local) all users files on toggle ? // TODO: Display size of download in Mo Visibility( - visible: isNative, - child: const ProfileSwitch("Offline mode", - "Save your files locally", "local_save.png"), - ), - const SizedBox( - height: 25, - ), + visible: isNative, + child: const Column( + children: [ + ProfileSwitch("Offline mode", "Save your files locally", + "local_save.png"), + SizedBox( + height: 25, + ) + ], + )), ProfileOther(widget.otherArr) ], ), From 7fc300c05065dc67645296d1b4645a69bc9c1374 Mon Sep 17 00:00:00 2001 From: rem Date: Mon, 11 Dec 2023 11:55:29 +0100 Subject: [PATCH 2/2] :bug: works again --- lib/main.dart | 26 +++++++++---------- lib/modele/local_db/objectbox.dart | 5 ++-- lib/modele/local_db/request_local.dart | 2 +- lib/modele/user.dart | 2 +- .../list_activity/list_activity_utile.dart | 3 ++- 5 files changed, 18 insertions(+), 20 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 1277346..d14e769 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -34,23 +34,21 @@ class MyApp extends StatelessWidget { Widget viewToDisplay = const SignUpView(); // Skip sign-up + fill provider if user already connected - if (!kIsWeb) { - if (localDB.hasUser()) { - final User user = localDB.getUser(); - final userActivities = localDB.getAllActivities(); + if (!kIsWeb && localDB.hasUser()) { + final User user = localDB.getUser(); + final userActivities = localDB.getAllActivities(); - context.watch().username = user.username; - context.watch().email = user.email; - context.watch().token = user.token; - context.watch().listActivity = userActivities; + context.watch().username = user.username; + context.watch().email = user.email; + context.watch().token = user.token; + context.watch().listActivity = userActivities; - stdout.write("===== USER =====\n"); - stdout.write("Username: ${user.username}\n"); - stdout.write("Email: ${user.email}\n"); - stdout.write("Token: ${user.token}\n"); + stdout.write("===== USER =====\n"); + stdout.write("Username: ${user.username}\n"); + stdout.write("Email: ${user.email}\n"); + stdout.write("Token: ${user.token}\n"); - viewToDisplay = const MainTabView(); - } + viewToDisplay = const MainTabView(); } return MaterialApp( diff --git a/lib/modele/local_db/objectbox.dart b/lib/modele/local_db/objectbox.dart index 8245880..3029be3 100644 --- a/lib/modele/local_db/objectbox.dart +++ b/lib/modele/local_db/objectbox.dart @@ -45,7 +45,6 @@ class ObjectBox implements DbImpl { @override User getUser() { db.User userRes = userBox.get(1); - return User.create(userRes.username, userRes.email, userRes.token); } @@ -83,8 +82,7 @@ class ObjectBox implements DbImpl { // ===== Activity ===== @override void addActivity(String uuid, String filename, String category, String info) { - db.Activity act = - db.Activity(0, uuid, filename, category, jsonEncode(info)); + db.Activity act = db.Activity(0, uuid, filename, category, info); try { activityBox.put(act); @@ -125,6 +123,7 @@ class ObjectBox implements DbImpl { for (db.Activity act in activityDBList) { ActivityInfo actInfo = ActivityInfo.fromJson(jsonDecode(act.info)); + userActivityList .add(ActivityOfUser(actInfo, act.category, act.uuid, act.filename)); } diff --git a/lib/modele/local_db/request_local.dart b/lib/modele/local_db/request_local.dart index b10bd5f..a8fcb26 100644 --- a/lib/modele/local_db/request_local.dart +++ b/lib/modele/local_db/request_local.dart @@ -41,7 +41,7 @@ class RequestLocal implements IDataStrategy { jsonList.add(json); } - return Tuple2(true, jsonEncode(activities)); + return Tuple2(true, jsonList); } @override diff --git a/lib/modele/user.dart b/lib/modele/user.dart index 79f68e4..c0126ce 100644 --- a/lib/modele/user.dart +++ b/lib/modele/user.dart @@ -11,7 +11,7 @@ class User extends ChangeNotifier { User(); - User.create(String username, String email, String token); + User.create(this.username, this.email, this.token); void addActivity(ActivityOfUser activity) { listActivity.add(activity); diff --git a/lib/modele/utile/list_activity/list_activity_utile.dart b/lib/modele/utile/list_activity/list_activity_utile.dart index 4b06c67..dd79aa0 100644 --- a/lib/modele/utile/list_activity/list_activity_utile.dart +++ b/lib/modele/utile/list_activity/list_activity_utile.dart @@ -74,9 +74,10 @@ class ListActivityUtile { element["filename"].toString())); // Save to local db - if (!kIsWeb) + if (!kIsWeb) { localDB.addActivity(element["uuid"], element["filename"], element["category"], jsonEncode(element["info"])); + } } return const Tuple2(true, "Yeah"); }