@@ -27,12 +27,15 @@ import 'package:taskwarrior/app/tour/home_page_tour.dart';
27
27
import 'package:taskwarrior/app/utils/constants/taskwarrior_colors.dart' ;
28
28
import 'package:taskwarrior/app/utils/language/supported_language.dart' ;
29
29
import 'package:taskwarrior/app/utils/taskchampion/credentials_storage.dart' ;
30
+ import 'package:taskwarrior/app/utils/taskchampion/websocket.dart' ;
30
31
import 'package:taskwarrior/app/utils/taskfunctions/comparator.dart' ;
31
32
import 'package:taskwarrior/app/utils/taskfunctions/projects.dart' ;
32
33
import 'package:taskwarrior/app/utils/taskfunctions/query.dart' ;
33
34
import 'package:taskwarrior/app/utils/taskfunctions/tags.dart' ;
34
35
import 'package:taskwarrior/app/utils/app_settings/app_settings.dart' ;
35
36
import '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' ;
36
39
37
40
class HomeController extends GetxController {
38
41
final SplashController splashController = Get .find <SplashController >();
@@ -55,6 +58,7 @@ class HomeController extends GetxController {
55
58
final ScrollController scrollController = ScrollController ();
56
59
final RxBool showbtn = false .obs;
57
60
late TaskDatabase taskdb;
61
+ WebSocketChannel ? wsChannel;
58
62
var tasks = < Tasks > [].obs;
59
63
60
64
@override
@@ -74,25 +78,31 @@ class HomeController extends GetxController {
74
78
taskdb.open ();
75
79
getUniqueProjects ();
76
80
_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
+ });
77
88
if (Platform .isAndroid) {
78
89
handleHomeWidgetClicked ();
79
90
}
80
91
fetchTasksFromDB ();
81
- everAll ([
92
+ everAll ([
82
93
pendingFilter,
83
94
waitingFilter,
84
95
projectFilter,
85
96
tagUnion,
86
97
selectedSort,
87
98
selectedTags,
88
99
], (_) {
89
- if (Platform .isAndroid) {
90
- WidgetController widgetController =
91
- Get .put (WidgetController ());
92
- widgetController.fetchAllData ();
100
+ if (Platform .isAndroid) {
101
+ WidgetController widgetController = Get .put (WidgetController ());
102
+ widgetController.fetchAllData ();
93
103
94
- widgetController.update ();
95
- }
104
+ widgetController.update ();
105
+ }
96
106
});
97
107
}
98
108
@@ -128,6 +138,10 @@ class HomeController extends GetxController {
128
138
Future <void > _loadTaskChampion () async {
129
139
final SharedPreferences prefs = await SharedPreferences .getInstance ();
130
140
taskchampion.value = prefs.getBool ('taskchampion' ) ?? false ;
141
+ if (taskchampion.value) {
142
+ initCCSyncUpdatesWs ();
143
+ debugPrint ('Task Champion is enabled' );
144
+ }
131
145
}
132
146
133
147
void addListenerToScrollController () {
@@ -508,17 +522,14 @@ class HomeController extends GetxController {
508
522
final projectcontroller = TextEditingController ();
509
523
var due = Rxn <DateTime >();
510
524
RxString dueString = '' .obs;
511
- final priorityList = ['L' ,'X' ,'M' ,'H' ];
525
+ final priorityList = ['L' , 'X' , 'M' , 'H' ];
512
526
final priorityColors = [
513
527
TaskWarriorColors .green,
514
528
TaskWarriorColors .grey,
515
529
TaskWarriorColors .yellow,
516
530
TaskWarriorColors .red,
517
-
518
-
519
-
520
531
];
521
- RxString priority = 'X ' .obs;
532
+ RxString priority = 'None ' .obs;
522
533
523
534
final tagcontroller = TextEditingController ();
524
535
RxList <String > tags = < String > [].obs;
@@ -582,10 +593,9 @@ class HomeController extends GetxController {
582
593
void initLanguageAndDarkMode () {
583
594
isDarkModeOn.value = AppSettings .isDarkMode;
584
595
selectedLanguage.value = AppSettings .selectedLanguage;
585
- HomeWidget .saveWidgetData ("themeMode" , AppSettings .isDarkMode ? "dark" : "light" );
586
- HomeWidget .updateWidget (
587
- androidName: "TaskWarriorWidgetProvider"
588
- );
596
+ HomeWidget .saveWidgetData (
597
+ "themeMode" , AppSettings .isDarkMode ? "dark" : "light" );
598
+ HomeWidget .updateWidget (androidName: "TaskWarriorWidgetProvider" );
589
599
// print("called and value is${isDarkModeOn.value}");
590
600
}
591
601
@@ -679,6 +689,7 @@ class HomeController extends GetxController {
679
689
},
680
690
);
681
691
}
692
+
682
693
late RxString uuid = "" .obs;
683
694
late RxBool isHomeWidgetTaskTapped = false .obs;
684
695
@@ -693,7 +704,7 @@ class HomeController extends GetxController {
693
704
Get .toNamed (Routes .DETAIL_ROUTE , arguments: ["uuid" , uuid.value]);
694
705
});
695
706
}
696
- }else if (uri.host == "addclicked" ){
707
+ } else if (uri.host == "addclicked" ) {
697
708
showAddDialogAfterWidgetClick ();
698
709
}
699
710
}
@@ -706,15 +717,73 @@ class HomeController extends GetxController {
706
717
}
707
718
debugPrint ('uuid is $uuid ' );
708
719
Get .toNamed (Routes .DETAIL_ROUTE , arguments: ["uuid" , uuid.value]);
709
- }else if (uri.host == "addclicked" ){
720
+ } else if (uri.host == "addclicked" ) {
710
721
showAddDialogAfterWidgetClick ();
711
722
}
712
723
}
713
-
714
724
});
715
725
}
726
+
716
727
void showAddDialogAfterWidgetClick () {
717
- Widget showDialog = taskchampion.value ? AddTaskToTaskcBottomSheet (homeController: this ) : AddTaskBottomSheet (homeController: this );
728
+ Widget showDialog = taskchampion.value
729
+ ? AddTaskToTaskcBottomSheet (homeController: this )
730
+ : AddTaskBottomSheet (homeController: this );
718
731
Get .dialog (showDialog);
719
732
}
733
+
734
+ Future <WebSocketChannel > initCCSyncUpdatesWs () async {
735
+ Map <String , String > successMessages = {
736
+ "Add Task" : "Task added successfully" ,
737
+ "Edit Task" : "Task edited successfully" ,
738
+ "Complete Task" : "Task completed successfully" ,
739
+ "Delete Task" : "Task deleted successfully" ,
740
+ };
741
+ Map <String , String > failureMessages = {
742
+ "Add Task" : "Task addition failed" ,
743
+ "Edit Task" : "Task edit failed" ,
744
+ "Complete Task" : "Task completion failed" ,
745
+ "Delete Task" : "Task deletion failed" ,
746
+ };
747
+ String ? clientId = await CredentialsStorage .getClientId ();
748
+ return listenForTaskUpdates (getWsUrl (baseUrl, clientId),
749
+ (TaskUpdate update) {
750
+ debugPrint ("Success: ${update .job } ${successMessages [update .job ]!}" );
751
+ if (successMessages.containsKey (update.job)) {
752
+ ScaffoldMessenger .of (Get .context! ).showSnackBar (SnackBar (
753
+ content: Text (
754
+ '${successMessages [update .job ]}' ,
755
+ style: TextStyle (
756
+ color: AppSettings .isDarkMode
757
+ ? TaskWarriorColors .kprimaryTextColor
758
+ : TaskWarriorColors .kLightPrimaryTextColor,
759
+ ),
760
+ ),
761
+ backgroundColor: AppSettings .isDarkMode
762
+ ? TaskWarriorColors .ksecondaryBackgroundColor
763
+ : TaskWarriorColors .kLightSecondaryBackgroundColor,
764
+ duration: const Duration (seconds: 2 )));
765
+ }
766
+ }, (TaskUpdate update) {
767
+ ScaffoldMessenger .of (Get .context! ).showSnackBar (SnackBar (
768
+ content: Text (
769
+ '${failureMessages [update .job ]}' ,
770
+ style: TextStyle (
771
+ color: AppSettings .isDarkMode
772
+ ? TaskWarriorColors .kprimaryTextColor
773
+ : TaskWarriorColors .kLightPrimaryTextColor,
774
+ ),
775
+ ),
776
+ backgroundColor: AppSettings .isDarkMode
777
+ ? TaskWarriorColors .ksecondaryBackgroundColor
778
+ : TaskWarriorColors .kLightSecondaryBackgroundColor,
779
+ duration: const Duration (seconds: 2 )));
780
+ });
781
+ }
782
+
783
+ @override
784
+ void onClose () {
785
+ super .onClose ();
786
+ taskdb.close ();
787
+ if (wsChannel != null ) wsChannel? .sink.close ();
788
+ }
720
789
}
0 commit comments