diff --git a/lib/Activities.dart b/lib/Activities.dart index 12561d0..635fcd0 100644 --- a/lib/Activities.dart +++ b/lib/Activities.dart @@ -36,7 +36,7 @@ class _ActivitiesState extends State { // TODO: implement initState super.initState(); _focus.addListener(_onFocusChange); - UpdateList(); + //UpdateList(); //init(context); } diff --git a/lib/Categories.dart b/lib/Categories.dart index 1228447..b2b56da 100644 --- a/lib/Categories.dart +++ b/lib/Categories.dart @@ -19,7 +19,7 @@ class _CategoriesState extends State { // TODO: implement initState super.initState(); //init(context); - UpdateList(); + // UpdateList(); } @override void dispose() { diff --git a/lib/Data.dart b/lib/Data.dart index 58748ad..81faf76 100644 --- a/lib/Data.dart +++ b/lib/Data.dart @@ -1,5 +1,6 @@ import 'dart:async'; import 'dart:convert'; +import 'dart:io'; import 'package:intl/intl.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -137,6 +138,9 @@ class Settings{ }else{ var uuid = Uuid(); String _uuid = uuid.v4(); + if(Platform.isAndroid){ + + } await prefs.setString('uuid',_uuid); return Future.value(_uuid); } diff --git a/lib/Tasks.dart b/lib/Tasks.dart index bfb1ad6..1812647 100644 --- a/lib/Tasks.dart +++ b/lib/Tasks.dart @@ -15,7 +15,7 @@ class _TasksState extends State { void initState() { // TODO: implement initState super.initState(); - UpdateList(); + // UpdateList(); // init(context); } diff --git a/lib/User.dart b/lib/User.dart index fdca202..ea12c62 100644 --- a/lib/User.dart +++ b/lib/User.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'dart:io'; -import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:flutter/cupertino.dart'; import 'package:intl/intl.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -32,7 +31,7 @@ List projects = []; bool offline = true; bool registered = false; -StreamController refreshStream = StreamController(); +StreamController refreshStream = StreamController.broadcast(); Future login(String _username, String password) async { final prefs = await SharedPreferences.getInstance(); @@ -64,28 +63,68 @@ Future initUserData() async { } await refreshUserData(); + BuildBridgeToServer(); print('Initializing UserData...'); if (cacheEnabled) { - if (Platform.isAndroid || Platform.isIOS) { - Connectivity().onConnectivityChanged.listen((result) { - offline = (result == ConnectivityResult.none); - if (!offline) { - UserOperations.executeQueries(); - refreshUserData(); - } - }); - } + // if (Platform.isAndroid || Platform.isIOS) { + // Connectivity().onConnectivityChanged.listen((result) { + // offline = (result == ConnectivityResult.none); + // if (!offline) { + // UserOperations.executeQueries(); + // refreshUserData(); + // } + // }); + // } } } +Future BuildBridgeToServer() async{ + final prefs = await SharedPreferences.getInstance(); + + while(true){ + + try { + http.Response response = (await http.post(Uri.parse('http://161.97.127.136/task_tracker/bridge.php'), + body: {"username": username})); + + print("bridge retreive (try): ${response.body}"); + List data = response.body.split(","); + print('Update :\nactivities_rev=${data[0]} tasks_rev=${data[1]} cats_rev=${data[2]} projects_rev=${data[3]}'); + + if(prefs.containsKey('rev')){ + if(prefs.getString('rev') == response.body){ + print('We are on the same page'); + }else{ + print('Gotta update'); + await refreshUserData(); + prefs.setString('rev',response.body); + } + }else{ + prefs.setString('rev', response.body); + await refreshUserData(); + } + }catch(e){ + print("Error with bridge : $e"); + } + + await Future.delayed(Duration(seconds: 5)); + } +} +bool m_refreshing = false; Future refreshUserData() async { + print('refreshing user data'); + if(m_refreshing){ + print('Called while refreshing. Return');return; + } + m_refreshing=true; refreshStream.add(true); await updateCatsList(); await updateTasksList(); await updateActList(); await updateProjectsList(); refreshStream.add(false); + m_refreshing=false; if (cacheEnabled) { NotificationManager.RescheduleNotifications(); } @@ -710,7 +749,7 @@ class UserOperations { Category.colProductive: productive }; await cacheDb.insert('Categories', data); - await refreshUserData(); + // await refreshUserData(); } else { try { http.Response queryResponse = (await http.post(Uri.parse('http://161.97.127.136/task_tracker/add_category.php'), body: queryBody)); @@ -749,7 +788,7 @@ class UserOperations { //update Cache Map data = {TaskType.colId: username + name, Category.colName: name, Category.colCatId: username + category}; await cacheDb.insert('TaskTypes', data); - await refreshUserData(); + //await refreshUserData(); } else { try { http.Response queryResponse = (await http.post(Uri.parse('http://161.97.127.136/task_tracker/add_taskType.php'), body: queryBody)); @@ -805,7 +844,7 @@ class UserOperations { Activity.colMetadata: metadata }; await cacheDb.insert('Activities', data); - await refreshUserData(); + // await refreshUserData(); } else { try { http.Response queryResponse = (await http.post(Uri.parse('http://161.97.127.136/task_tracker/add_activity.php'), body: queryBody)); @@ -859,7 +898,7 @@ class UserOperations { // Map data = {Activity.colType: username + type, Activity.colStartTime: dFormat.format(sTime), Activity.colEndTime: dFormat.format(eTime), Activity.colMetadata: metadata}; // String updateActQuery = "UPDATE Activities SET ${Activity.colType}="; // await cacheDb.insert('Activities', data); - await refreshUserData(); + // await refreshUserData(); } else { // queries.add(Queries('edit_activity', jsonEncode(queryBody))); try { @@ -899,7 +938,7 @@ class UserOperations { //update Cache Map data = {Project.colName: username+name, Project.colCat: category, Project.colSteps: jsonEncode(steps), Project.colDeadline: deadline.toString()}; await cacheDb.insert('Projects', data); - await refreshUserData(); + //await refreshUserData(); } else { try { http.Response queryResponse = (await http.post(Uri.parse('http://161.97.127.136/task_tracker/add_project.php'), body: queryBody)); @@ -935,7 +974,7 @@ class UserOperations { }; await cacheDb.rawDelete("DELETE FROM TaskTypes WHERE id='${username + name}'"); - await refreshUserData(); + // await refreshUserData(); //Add to server and refresh Cache } else { try { @@ -972,7 +1011,7 @@ class UserOperations { Category.colName: name, }; await cacheDb.rawDelete("DELETE FROM Categories WHERE ${Category.colCatId}='${username + name}'"); - await refreshUserData(); + //await refreshUserData(); //Add to server and refresh Cache } else { try { @@ -1011,7 +1050,7 @@ class UserOperations { print("delteQuery : $deleteQuery"); await cacheDb.rawDelete(deleteQuery); - await refreshUserData(); + // await refreshUserData(); //Add to server and refresh Cache } else { try { @@ -1060,8 +1099,9 @@ class UserOperations { print("Error while query $e"); } } - await refreshUserData(); + //await refreshUserData(); } else { + await refreshUserData(); print('Trying to execute queries in no cahce mode, We dont do that here'); } } diff --git a/lib/main.dart b/lib/main.dart index 6a994eb..be517a2 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -21,7 +21,6 @@ import 'Tasks.dart'; import 'Activities.dart'; import 'User.dart' as User; import 'package:syncfusion_flutter_charts/charts.dart'; -import 'package:connectivity_plus/connectivity_plus.dart'; import 'Dialogs.dart'; final GlobalKey navigatorKey = new GlobalKey(); showAlertDialog(BuildContext context, String title, String message) { @@ -148,6 +147,7 @@ class MyHomePage extends StatefulWidget { class _MyHomePageState extends State { var connectivitySub; + var refreshSub; @override void initState() { @@ -157,28 +157,33 @@ class _MyHomePageState extends State { super.initState(); print("Initializing refresh stream on main dart"); - connectivitySub=Connectivity().onConnectivityChanged.listen((result) { - if (this.mounted) { - setState(() {}); + // connectivitySub=Connectivity().onConnectivityChanged.listen((result) { + // if (this.mounted) { + // setState(() {}); + // } + // }); + refreshSub = User.refreshStream.stream.listen((event) { + if(event==false){ + //Update done, Lets go update data + LoadStats(); } }); LoadStats(); // User.progressDialog=progressDialog; } - var refreshSub; void init(BuildContext context) async{ await Future.delayed(Duration(seconds: 1)); refreshSub = User.refreshStream.stream.listen((value) { print("Streaming refresh : $value"); if(value){ - Dialogs.waiting("Syncing..."); + // Dialogs.waiting("Syncing..."); print("Opening progress dialog"); }else{ - Dialogs.hide(); + // Dialogs.hide(); print("Closing progress dialog"); } }); - await User.refreshUserData(); + //await User.refreshUserData(); } DateTime? lastProductive = null; @@ -187,6 +192,7 @@ class _MyHomePageState extends State { // TODO: implement dispose super.dispose(); connectivitySub?.cancel(); + refreshSub?.closeSteam(); } void LoadStats() async { // return; @@ -348,7 +354,7 @@ class _MyHomePageState extends State { return Scaffold( floatingActionButton: FloatingActionButton.extended( onPressed: () { - Navigator.of(context).push(MaterialPageRoute(builder: (context) => NewActivity())).then((value) => {User.refreshUserData().then((va) => LoadStats())}); + Navigator.of(context).push(MaterialPageRoute(builder: (context) => NewActivity())); }, label: Text("New Activity"), icon: Icon(Icons.add)), @@ -369,7 +375,7 @@ class _MyHomePageState extends State { : InkWell( onTap: () { setState(() async { - await User.refreshUserData(); + //await User.refreshUserData(); LoadStats(); }); }, diff --git a/pubspec.lock b/pubspec.lock index 359d34d..5a761c3 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -50,48 +50,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.15.0" - connectivity_plus: - dependency: "direct main" - description: - name: connectivity_plus - url: "https://pub.dartlang.org" - source: hosted - version: "2.2.1" - connectivity_plus_linux: - dependency: transitive - description: - name: connectivity_plus_linux - url: "https://pub.dartlang.org" - source: hosted - version: "1.3.0" - connectivity_plus_macos: - dependency: transitive - description: - name: connectivity_plus_macos - url: "https://pub.dartlang.org" - source: hosted - version: "1.2.1" - connectivity_plus_platform_interface: - dependency: transitive - description: - name: connectivity_plus_platform_interface - url: "https://pub.dartlang.org" - source: hosted - version: "1.2.0" - connectivity_plus_web: - dependency: transitive - description: - name: connectivity_plus_web - url: "https://pub.dartlang.org" - source: hosted - version: "1.2.0" - connectivity_plus_windows: - dependency: transitive - description: - name: connectivity_plus_windows - url: "https://pub.dartlang.org" - source: hosted - version: "1.2.0" crypto: dependency: transitive description: @@ -310,13 +268,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.0" - nm: - dependency: transitive - description: - name: nm - url: "https://pub.dartlang.org" - source: hosted - version: "0.5.0" path: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index e90002d..31c5bae 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -32,7 +32,6 @@ dependencies: flutter_switch: ^0.3.2 sqflite_common_ffi: ^2.1.0+2 - connectivity_plus: ^2.2.1 flutter_spinkit: ^5.1.0 flutter_local_notifications: ^9.3.3 rxdart: ^0.27.1 diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 8083d74..8b6d468 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -6,9 +6,6 @@ #include "generated_plugin_registrant.h" -#include void RegisterPlugins(flutter::PluginRegistry* registry) { - ConnectivityPlusWindowsPluginRegisterWithRegistrar( - registry->GetRegistrarForPlugin("ConnectivityPlusWindowsPlugin")); } diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index ba4a217..4d10c25 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -3,7 +3,6 @@ # list(APPEND FLUTTER_PLUGIN_LIST - connectivity_plus_windows ) set(PLUGIN_BUNDLED_LIBRARIES)