@@ -27,12 +27,15 @@ import 'package:taskwarrior/app/tour/home_page_tour.dart';
2727import 'package:taskwarrior/app/utils/constants/taskwarrior_colors.dart' ;
2828import 'package:taskwarrior/app/utils/language/supported_language.dart' ;
2929import 'package:taskwarrior/app/utils/taskchampion/credentials_storage.dart' ;
30+ import 'package:taskwarrior/app/utils/taskchampion/websocket.dart' ;
3031import 'package:taskwarrior/app/utils/taskfunctions/comparator.dart' ;
3132import 'package:taskwarrior/app/utils/taskfunctions/projects.dart' ;
3233import 'package:taskwarrior/app/utils/taskfunctions/query.dart' ;
3334import 'package:taskwarrior/app/utils/taskfunctions/tags.dart' ;
3435import 'package:taskwarrior/app/utils/app_settings/app_settings.dart' ;
3536import 'package:tutorial_coach_mark/tutorial_coach_mark.dart' ;
37+ import 'package:web_socket_channel/status.dart' ;
38+ import 'package:web_socket_channel/web_socket_channel.dart' ;
3639
3740class HomeController extends GetxController {
3841 final SplashController splashController = Get .find <SplashController >();
@@ -55,6 +58,7 @@ class HomeController extends GetxController {
5558 final ScrollController scrollController = ScrollController ();
5659 final RxBool showbtn = false .obs;
5760 late TaskDatabase taskdb;
61+ WebSocketChannel ? wsChannel;
5862 var tasks = < Tasks > [].obs;
5963
6064 @override
@@ -74,25 +78,32 @@ class HomeController extends GetxController {
7478 taskdb.open ();
7579 getUniqueProjects ();
7680 _loadTaskChampion ();
81+ ever (taskchampion, (bool value) async {
82+ if (value) {
83+ wsChannel = await initCCSyncUpdatesWs ();
84+ } else {
85+ if (wsChannel != null ) wsChannel? .sink.close (goingAway);
86+ }
87+ });
7788 if (Platform .isAndroid) {
7889 handleHomeWidgetClicked ();
7990 }
8091 fetchTasksFromDB ();
81- everAll ([
92+ everAll ([
8293 pendingFilter,
8394 waitingFilter,
8495 projectFilter,
8596 tagUnion,
8697 selectedSort,
8798 selectedTags,
8899 ], (_) {
89- if (Platform .isAndroid) {
100+ if (Platform .isAndroid) {
90101 WidgetController widgetController =
91102 Get .put (WidgetController ());
92- widgetController.fetchAllData ();
103+ widgetController.fetchAllData ();
93104
94- widgetController.update ();
95- }
105+ widgetController.update ();
106+ }
96107 });
97108 }
98109
@@ -518,7 +529,7 @@ class HomeController extends GetxController {
518529
519530
520531 ];
521- RxString priority = 'X ' .obs;
532+ RxString priority = 'None ' .obs;
522533
523534 final tagcontroller = TextEditingController ();
524535 RxList <String > tags = < String > [].obs;
@@ -717,4 +728,60 @@ class HomeController extends GetxController {
717728 Widget showDialog = taskchampion.value ? AddTaskToTaskcBottomSheet (homeController: this ) : AddTaskBottomSheet (homeController: this );
718729 Get .dialog (showDialog);
719730 }
731+
732+ Future <WebSocketChannel > initCCSyncUpdatesWs () async {
733+ Map <String , String > successMessages = {
734+ "Add Task" : "Task added successfully" ,
735+ "Edit Task" : "Task edited successfully" ,
736+ "Complete Task" : "Task completed successfully" ,
737+ "Delete Task" : "Task deleted successfully" ,
738+ };
739+ Map <String , String > failureMessages = {
740+ "Add Task" : "Task addition failed" ,
741+ "Edit Task" : "Task edit failed" ,
742+ "Complete Task" : "Task completion failed" ,
743+ "Delete Task" : "Task deletion failed" ,
744+ };
745+ String ? clientId = await CredentialsStorage .getClientId ();
746+ return listenForTaskUpdates (getWsUrl (baseUrl, clientId),
747+ (TaskUpdate update) {
748+ debugPrint ("Success: ${update .job } ${successMessages [update .job ]!}" );
749+ if (successMessages.containsKey (update.job)) {
750+ ScaffoldMessenger .of (Get .context! ).showSnackBar (SnackBar (
751+ content: Text (
752+ '${successMessages [update .job ]}' ,
753+ style: TextStyle (
754+ color: AppSettings .isDarkMode
755+ ? TaskWarriorColors .kprimaryTextColor
756+ : TaskWarriorColors .kLightPrimaryTextColor,
757+ ),
758+ ),
759+ backgroundColor: AppSettings .isDarkMode
760+ ? TaskWarriorColors .ksecondaryBackgroundColor
761+ : TaskWarriorColors .kLightSecondaryBackgroundColor,
762+ duration: const Duration (seconds: 2 )));
763+ }
764+ }, (TaskUpdate update) {
765+ ScaffoldMessenger .of (Get .context! ).showSnackBar (SnackBar (
766+ content: Text (
767+ '${failureMessages [update .job ]}' ,
768+ style: TextStyle (
769+ color: AppSettings .isDarkMode
770+ ? TaskWarriorColors .kprimaryTextColor
771+ : TaskWarriorColors .kLightPrimaryTextColor,
772+ ),
773+ ),
774+ backgroundColor: AppSettings .isDarkMode
775+ ? TaskWarriorColors .ksecondaryBackgroundColor
776+ : TaskWarriorColors .kLightSecondaryBackgroundColor,
777+ duration: const Duration (seconds: 2 )));
778+ });
779+ }
780+
781+ @override
782+ void onClose () {
783+ super .onClose ();
784+ taskdb.close ();
785+ if (wsChannel != null ) wsChannel? .sink.close ();
786+ }
720787}
0 commit comments