Skip to content

Commit 33fa43d

Browse files
committed
integrated rust functions
1 parent 20a0443 commit 33fa43d

File tree

14 files changed

+667
-144
lines changed

14 files changed

+667
-144
lines changed

lib/app/modules/home/controllers/home_controller.dart

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ import 'package:taskwarrior/app/utils/taskfunctions/projects.dart';
3232
import 'package:taskwarrior/app/utils/taskfunctions/query.dart';
3333
import 'package:taskwarrior/app/utils/taskfunctions/tags.dart';
3434
import 'package:taskwarrior/app/utils/app_settings/app_settings.dart';
35+
import 'package:taskwarrior/app/v3/champion/Replica.dart';
36+
import 'package:taskwarrior/app/v3/champion/models/task_for_replica.dart';
3537
import 'package:taskwarrior/app/v3/db/task_database.dart';
3638
import 'package:taskwarrior/app/v3/db/update.dart';
3739
import 'package:taskwarrior/app/v3/models/task.dart';
@@ -65,6 +67,7 @@ class HomeController extends GetxController {
6567
final RxBool showbtn = false.obs;
6668
late TaskDatabase taskdb;
6769
var tasks = <TaskForC>[].obs;
70+
var tasksFromReplica = <TaskForReplica>[].obs;
6871
final RxBool isRefreshing = false.obs;
6972

7073
@override
@@ -114,19 +117,6 @@ class HomeController extends GetxController {
114117
widgetController.updateWidget();
115118
}
116119
});
117-
tryRust();
118-
}
119-
120-
Future<void> tryRust() async {
121-
Directory? someDir = await getDownloadsDirectory();
122-
123-
addTask(taskdbDirPath: someDir != null ? someDir.path : "", map: {
124-
'description': "some task from bridge 2",
125-
"uuid": "270750a0-1801-4a24-8b29-a7aaf62fc74d"
126-
});
127-
128-
debugPrint(await getAllTasksJson(
129-
taskdbDirPath: someDir != null ? someDir.path : ""));
130120
}
131121

132122
Future<List<String>> getUniqueProjects() async {
@@ -153,6 +143,16 @@ class HomeController extends GetxController {
153143
}
154144

155145
Future<void> fetchTasksFromDB() async {
146+
debugPrint("Fetching tasks from DB ${taskReplica.value}");
147+
await _loadTaskChampion();
148+
if (taskReplica.value) {
149+
tasksFromReplica.value = await Replica.getAllTasksFromReplica();
150+
debugPrint("Tasks from Replica: ${tasks.length}");
151+
return;
152+
}
153+
if (taskchampion.value == false) {
154+
return;
155+
}
156156
TaskDatabase taskDatabase = TaskDatabase();
157157
await taskDatabase.open();
158158
List<TaskForC> fetchedTasks = await taskDatabase.fetchTasksFromDatabase();
@@ -162,6 +162,13 @@ class HomeController extends GetxController {
162162
Future<void> _loadTaskChampion() async {
163163
final SharedPreferences prefs = await SharedPreferences.getInstance();
164164
taskchampion.value = prefs.getBool('settings_taskc') ?? false;
165+
taskReplica.value = prefs.getBool('settings_taskr_repl') ?? false;
166+
}
167+
168+
Future<void> refreshReplicaTasks() async {
169+
if (!taskReplica.value) return;
170+
tasksFromReplica.value = await Replica.getAllTasksFromReplica();
171+
debugPrint("Tasks from Replica: ${tasks.length}");
165172
}
166173

167174
void addListenerToScrollController() {
@@ -353,6 +360,10 @@ class HomeController extends GetxController {
353360
_refreshTasks();
354361
}
355362

363+
Future<void> syncReplica() async {
364+
await Replica.sync();
365+
}
366+
356367
Future<void> synchronize(BuildContext context, bool isDialogNeeded) async {
357368
try {
358369
final connectivityResult = await Connectivity().checkConnectivity();
@@ -529,6 +540,7 @@ class HomeController extends GetxController {
529540
RxBool delaytask = false.obs;
530541
RxBool change24hr = false.obs;
531542
RxBool taskchampion = false.obs;
543+
RxBool taskReplica = false.obs;
532544

533545
// dialogue box
534546
final formKey = GlobalKey<FormState>();

lib/app/modules/home/views/add_task_bottom_sheet_new.dart

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import 'dart:collection';
12
import 'dart:io';
23

34
import 'package:flutter/material.dart';
@@ -72,6 +73,7 @@ class AddTaskBottomSheet extends StatelessWidget {
7273
if (forTaskC) {
7374
onSaveButtonClickedTaskC(context);
7475
} else if (forReplica) {
76+
debugPrint("Saving to Replica");
7577
onSaveButtonClickedForReplica(context);
7678
} else {
7779
onSaveButtonClicked(context);
@@ -442,22 +444,16 @@ class AddTaskBottomSheet extends StatelessWidget {
442444
void onSaveButtonClickedForReplica(BuildContext context) async {
443445
if (homeController.formKey.currentState!.validate()) {
444446
try {
445-
var task = taskParser(homeController.namecontroller.text)
446-
.rebuild((b) =>
447-
b..due = getDueDate(homeController.selectedDates)?.toUtc())
448-
.rebuild((p) => p..priority = homeController.priority.value)
449-
.rebuild((t) => t..project = homeController.projectcontroller.text)
450-
.rebuild((t) =>
451-
t..wait = getWaitDate(homeController.selectedDates)?.toUtc())
452-
.rebuild((t) =>
453-
t..until = getUntilDate(homeController.selectedDates)?.toUtc())
454-
.rebuild((t) => t
455-
..scheduled =
456-
getSchedDate(homeController.selectedDates)?.toUtc());
457-
if (homeController.tags.isNotEmpty) {
458-
task = task.rebuild((t) => t..tags.replace(homeController.tags));
459-
}
460-
await Replica.addTaskToReplica(task);
447+
await Replica.addTaskToReplica(HashMap<String, dynamic>.from({
448+
"description": homeController.namecontroller.text,
449+
"due": getDueDate(homeController.selectedDates)?.toUtc(),
450+
"priority": homeController.priority.value,
451+
"project": homeController.projectcontroller.text != ""
452+
? homeController.projectcontroller.text
453+
: null,
454+
"wait": getWaitDate(homeController.selectedDates)?.toUtc(),
455+
"tags": homeController.tags,
456+
}));
461457
homeController.namecontroller.text = '';
462458
homeController.projectcontroller.text = '';
463459
homeController.dueString.value = "";
@@ -473,7 +469,6 @@ class AddTaskBottomSheet extends StatelessWidget {
473469
}
474470

475471
homeController.update();
476-
477472
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
478473
content: Text(
479474
SentenceManager(
@@ -500,6 +495,7 @@ class AddTaskBottomSheet extends StatelessWidget {
500495
if (value) {
501496
storageWidget.synchronize(context, true);
502497
}
498+
await storageWidget.refreshReplicaTasks();
503499
} on FormatException catch (e) {
504500
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
505501
content: Text(

lib/app/modules/home/views/home_page_app_bar.dart

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ class HomePageAppBar extends StatelessWidget implements PreferredSizeWidget {
7272
.sentences
7373
.homePageSetup,
7474
onPressed: () {
75-
if (controller.taskchampion.value) {
75+
if (controller.taskchampion.value ||
76+
controller.taskReplica.value) {
7677
Get.toNamed(Routes.MANAGE_TASK_CHAMPION_CREDS);
7778
} else {
7879
Get.toNamed(Routes.MANAGE_TASK_SERVER);
@@ -124,10 +125,32 @@ class HomePageAppBar extends StatelessWidget implements PreferredSizeWidget {
124125
Builder(
125126
builder: (context) => Obx(() => IconButton(
126127
key: controller.refreshKey,
127-
icon: Icon(Icons.refresh, color: TaskWarriorColors.white),
128+
icon: !controller.isRefreshing.value
129+
? Icon(Icons.refresh, color: TaskWarriorColors.white)
130+
: Icon(Icons.autorenew, color: TaskWarriorColors.white),
128131
onPressed: controller.isRefreshing.value
129132
? null
130133
: () async {
134+
if (controller.taskReplica.value) {
135+
var c = await CredentialsStorage.getClientId();
136+
var e =
137+
await CredentialsStorage.getEncryptionSecret();
138+
if (c == null || e == null) {
139+
_showResultSnackBar(
140+
context,
141+
SentenceManager(
142+
currentLanguage:
143+
controller.selectedLanguage.value)
144+
.sentences
145+
.homePageTaskWarriorNotConfigured,
146+
true);
147+
return;
148+
}
149+
controller.isRefreshing.value = true;
150+
await controller.refreshReplicaTasks();
151+
controller.isRefreshing.value = false;
152+
}
153+
131154
if (controller.taskchampion.value) {
132155
var c = await CredentialsStorage.getClientId();
133156
var e =

lib/app/modules/home/views/home_page_body.dart

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'package:double_back_to_close_app/double_back_to_close_app.dart';
22
import 'package:flutter/material.dart';
33
import 'package:get/get.dart';
44
import 'package:taskwarrior/app/modules/home/views/show_tasks.dart';
5+
import 'package:taskwarrior/app/modules/home/views/show_tasks_replica.dart';
56
import 'package:taskwarrior/app/modules/home/views/tasks_builder.dart';
67
import 'package:taskwarrior/app/utils/constants/taskwarrior_colors.dart';
78
import 'package:taskwarrior/app/utils/themes/theme_extension.dart';
@@ -16,7 +17,8 @@ class HomePageBody extends StatelessWidget {
1617
Widget build(BuildContext context) {
1718
controller.initInAppTour();
1819
controller.showInAppTour(context);
19-
TaskwarriorColorTheme tColors = Theme.of(context).extension<TaskwarriorColorTheme>()!;
20+
TaskwarriorColorTheme tColors =
21+
Theme.of(context).extension<TaskwarriorColorTheme>()!;
2022
return DoubleBackToCloseApp(
2123
snackBar: SnackBar(
2224
content: Text(SentenceManager(
@@ -93,7 +95,8 @@ class HomePageBody extends StatelessWidget {
9395
),
9496
),
9597
Visibility(
96-
visible: !controller.taskchampion.value,
98+
visible: !controller.taskchampion.value &&
99+
!controller.taskReplica.value,
97100
child: Expanded(
98101
child: Scrollbar(
99102
child: Obx(
@@ -121,6 +124,17 @@ class HomePageBody extends StatelessWidget {
121124
selectedSort: controller.selectedSort.value,
122125
project: controller.projectFilter.value,
123126
),
127+
))),
128+
Visibility(
129+
visible: controller.taskReplica.value,
130+
child: Expanded(
131+
child: Scrollbar(
132+
child: TaskReplicaViewBuilder(
133+
replicaTasks: controller.tasksFromReplica,
134+
pendingFilter: controller.pendingFilter.value,
135+
selectedSort: controller.selectedSort.value,
136+
project: controller.projectFilter.value,
137+
),
124138
)))
125139
],
126140
),

lib/app/modules/home/views/home_page_floating_action_button.dart

Lines changed: 20 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -27,44 +27,27 @@ class HomePageFloatingActionButton extends StatelessWidget {
2727
color: tColors.secondaryBackgroundColor,
2828
),
2929
),
30-
onPressed: () => (controller.taskchampion.value)
31-
? (showModalBottomSheet(
32-
backgroundColor: tColors.dialogBackgroundColor,
33-
context: context,
34-
isScrollControlled: true,
35-
shape: const RoundedRectangleBorder(
36-
borderRadius: BorderRadius.only(
37-
topLeft: Radius.circular(0),
38-
topRight: Radius.circular(0),
39-
),
30+
onPressed: () => (showModalBottomSheet(
31+
backgroundColor: tColors.dialogBackgroundColor,
32+
context: context,
33+
isScrollControlled: true,
34+
shape: const RoundedRectangleBorder(
35+
borderRadius: BorderRadius.only(
36+
topLeft: Radius.circular(0),
37+
topRight: Radius.circular(0),
4038
),
41-
builder: (context) => AddTaskBottomSheet(
42-
homeController: controller,
43-
forTaskC: true,
44-
),
45-
).then((value) {
46-
if (controller.isSyncNeeded.value && value != "cancel") {
47-
controller.isNeededtoSyncOnStart(context);
48-
}
49-
}))
50-
: (showModalBottomSheet(
51-
backgroundColor: tColors.dialogBackgroundColor,
52-
context: context,
53-
isScrollControlled: true,
54-
shape: const RoundedRectangleBorder(
55-
borderRadius: BorderRadius.only(
56-
topLeft: Radius.circular(0),
57-
topRight: Radius.circular(0),
58-
),
59-
),
60-
builder: (context) => AddTaskBottomSheet(
61-
homeController: controller,
62-
),
63-
).then((value) {
64-
if (controller.isSyncNeeded.value && value != "cancel") {
65-
controller.isNeededtoSyncOnStart(context);
66-
}
67-
}))
39+
),
40+
builder: (context) => AddTaskBottomSheet(
41+
homeController: controller,
42+
forTaskC: controller.taskchampion.value,
43+
forReplica: controller.taskReplica.value,
44+
),
45+
).then((value) {
46+
if (controller.isSyncNeeded.value && value != "cancel") {
47+
controller.isNeededtoSyncOnStart(context);
48+
}
49+
}))
50+
6851
// .then((value) {
6952
// // print(value);
7053

0 commit comments

Comments
 (0)