@@ -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,32 @@ 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) {
100
+ if (Platform .isAndroid) {
90
101
WidgetController widgetController =
91
102
Get .put (WidgetController ());
92
- widgetController.fetchAllData ();
103
+ widgetController.fetchAllData ();
93
104
94
- widgetController.update ();
95
- }
105
+ widgetController.update ();
106
+ }
96
107
});
97
108
}
98
109
@@ -518,7 +529,7 @@ class HomeController extends GetxController {
518
529
519
530
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;
@@ -717,4 +728,60 @@ class HomeController extends GetxController {
717
728
Widget showDialog = taskchampion.value ? AddTaskToTaskcBottomSheet (homeController: this ) : AddTaskBottomSheet (homeController: this );
718
729
Get .dialog (showDialog);
719
730
}
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
+ }
720
787
}
0 commit comments