Skip to content

Commit de9b0ce

Browse files
authored
TW3 Support application
* delete profile tile added patch 1 * changed taskchampion setting to be profile dependant * navigate back icon size increased * menubar language fix This fixes the menubars reactivity with language and profile change * change in bottom sheet color #191919 it's the color * added save creds language fix * language fix on profile page * logs option language adaptation * fix: deleted tasks project surfing fixed * fix: theme color fixes for snackbar at Show Task of TC * added preview for hindi and marathi * TW2 and widget bug of reactivity fixed with new build script * fix: profile change of TW2 made reactive * moved option of delete all tasks to settings page * profile page update 2 * ccsync intr: database ensureDatabaseIsOpen() fixed for null check on null object * added rustLib for taskchampion client * rustlib integrated * integrated rust functions * due date update failure fixed * tags error from rustlib fixed also other refactorization in dart codebase reflected * complete integration with local rust Replica * supporting task on create sync for Replica * export feature for Replica Task * reflect task list when profile is changed to taskReplica * taskc reports error fixed * app widget will reflect TW3 tasks * reports for Replica added * [R->r]eplica.dart * try another java distro
1 parent faafadd commit de9b0ce

File tree

65 files changed

+9133
-558
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+9133
-558
lines changed

.github/workflows/flutterci.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@ jobs:
1515
- uses: actions/checkout@v2
1616

1717
# Step 2: Setup Java with version 12.x
18-
- uses: actions/setup-java@v1
18+
- uses: actions/setup-java@v4
1919
with:
20+
distribution: "temurin"
2021
java-version: "17.x"
2122

2223
# Step 3: Setup Flutter with version 3.7.11

android/app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,12 +78,12 @@ android {
7878
productFlavors {
7979
production {
8080
dimension "default"
81-
applicationId "com.ccextractor.taskwarrior"
81+
applicationId "com.ccextractor.taskwarriorflutter"
8282
signingConfig keystoreProperties.isEmpty() ? signingConfigs.debug : signingConfigs.production
8383
}
8484
nightly {
8585
dimension "default"
86-
applicationId "com.ccextractor.taskwarrior.nightly"
86+
applicationId "com.ccextractor.taskwarriorflutter.nightly"
8787
versionNameSuffix "-nightly"
8888
signingConfig nightlyKeystoreProperties.isEmpty() ? signingConfigs.debug : signingConfigs.nightly
8989
}
Binary file not shown.
27.8 MB
Binary file not shown.

lib/app/modules/about/views/about_page_app_bar.dart

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,17 @@ import 'package:taskwarrior/app/utils/language/sentence_manager.dart';
66

77
class AboutPageAppBar extends StatelessWidget implements PreferredSizeWidget {
88
final AboutController aboutController;
9-
const AboutPageAppBar({required this.aboutController,super.key});
9+
const AboutPageAppBar({required this.aboutController, super.key});
1010

1111
@override
1212
Widget build(BuildContext context) {
1313
return AppBar(
1414
centerTitle: true,
1515
backgroundColor: TaskWarriorColors.kprimaryBackgroundColor,
1616
title: Text(
17-
SentenceManager(
18-
currentLanguage: aboutController.selectedLanguage.value)
19-
.sentences
20-
.aboutPageAppBarTitle,
17+
SentenceManager(currentLanguage: aboutController.selectedLanguage.value)
18+
.sentences
19+
.aboutPageAppBarTitle,
2120
// style: GoogleFonts.poppins(color: TaskWarriorColors.white),
2221
style: TextStyle(
2322
fontFamily: FontFamily.poppins,
@@ -31,6 +30,7 @@ class AboutPageAppBar extends StatelessWidget implements PreferredSizeWidget {
3130
child: Icon(
3231
Icons.chevron_left,
3332
color: TaskWarriorColors.white,
33+
size: 35,
3434
),
3535
),
3636
);

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

Lines changed: 66 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'package:flutter/material.dart';
88
import 'package:get/get.dart';
99
import 'package:home_widget/home_widget.dart';
1010
import 'package:loggy/loggy.dart';
11+
import 'package:path_provider/path_provider.dart';
1112
import 'package:shared_preferences/shared_preferences.dart';
1213
import 'package:taskwarrior/app/models/filters.dart';
1314

@@ -31,10 +32,13 @@ import 'package:taskwarrior/app/utils/taskfunctions/projects.dart';
3132
import 'package:taskwarrior/app/utils/taskfunctions/query.dart';
3233
import 'package:taskwarrior/app/utils/taskfunctions/tags.dart';
3334
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';
3437
import 'package:taskwarrior/app/v3/db/task_database.dart';
3538
import 'package:taskwarrior/app/v3/db/update.dart';
3639
import 'package:taskwarrior/app/v3/models/task.dart';
3740
import 'package:taskwarrior/app/v3/net/fetch.dart';
41+
import 'package:taskwarrior/rust_bridge/api.dart';
3842
import 'package:textfield_tags/textfield_tags.dart';
3943
import 'package:taskwarrior/app/utils/themes/theme_extension.dart';
4044
import 'package:tutorial_coach_mark/tutorial_coach_mark.dart';
@@ -63,6 +67,7 @@ class HomeController extends GetxController {
6367
final RxBool showbtn = false.obs;
6468
late TaskDatabase taskdb;
6569
var tasks = <TaskForC>[].obs;
70+
var tasksFromReplica = <TaskForReplica>[].obs;
6671
final RxBool isRefreshing = false.obs;
6772

6873
@override
@@ -86,13 +91,18 @@ class HomeController extends GetxController {
8691
handleHomeWidgetClicked();
8792
}
8893
fetchTasksFromDB();
94+
ever(taskReplica, (_) {
95+
if (taskReplica.value) refreshReplicaTaskList();
96+
});
8997
everAll([
9098
pendingFilter,
9199
waitingFilter,
92100
projectFilter,
93101
tagUnion,
94102
selectedSort,
95103
selectedTags,
104+
tasks,
105+
tasksFromReplica
96106
], (_) {
97107
if (Platform.isAndroid) {
98108
WidgetController widgetController = Get.put(WidgetController());
@@ -101,9 +111,27 @@ class HomeController extends GetxController {
101111
widgetController.update();
102112
}
103113
});
114+
ever(splashController.currentProfile, (_) {
115+
if (splashController.getMode(splashController.currentProfile.value) !=
116+
"TW3") {
117+
refreshTaskWithNewProfile();
118+
}
119+
if (Platform.isAndroid) {
120+
WidgetController widgetController = Get.put(WidgetController());
121+
widgetController.fetchAllData();
122+
widgetController.updateWidget();
123+
}
124+
});
104125
}
105126

106127
Future<List<String>> getUniqueProjects() async {
128+
if (taskReplica.value) {
129+
return tasksFromReplica
130+
.where((task) => task.project != null)
131+
.map((task) => task.project!)
132+
.toSet()
133+
.toList();
134+
}
107135
var taskDatabase = TaskDatabase();
108136
List<String> uniqueProjects = await taskDatabase.fetchUniqueProjects();
109137
debugPrint('Unique projects: $uniqueProjects');
@@ -116,6 +144,12 @@ class HomeController extends GetxController {
116144
debugPrint('Deleted all tasks from db');
117145
}
118146

147+
Future<void> refreshReplicaTaskList() async {
148+
if (!taskReplica.value) return;
149+
tasksFromReplica.value = await Replica.getAllTasksFromReplica();
150+
debugPrint("Tasks from Replica: ${tasks.length}");
151+
}
152+
119153
Future<void> refreshTasks(String clientId, String encryptionSecret) async {
120154
TaskDatabase taskDatabase = TaskDatabase();
121155
await taskDatabase.open();
@@ -127,6 +161,16 @@ class HomeController extends GetxController {
127161
}
128162

129163
Future<void> fetchTasksFromDB() async {
164+
debugPrint("Fetching tasks from DB ${taskReplica.value}");
165+
await _loadTaskChampion();
166+
if (taskReplica.value) {
167+
tasksFromReplica.value = await Replica.getAllTasksFromReplica();
168+
debugPrint("Tasks from Replica: ${tasks.length}");
169+
return;
170+
}
171+
if (taskchampion.value == false) {
172+
return;
173+
}
130174
TaskDatabase taskDatabase = TaskDatabase();
131175
await taskDatabase.open();
132176
List<TaskForC> fetchedTasks = await taskDatabase.fetchTasksFromDatabase();
@@ -136,6 +180,14 @@ class HomeController extends GetxController {
136180
Future<void> _loadTaskChampion() async {
137181
final SharedPreferences prefs = await SharedPreferences.getInstance();
138182
taskchampion.value = prefs.getBool('settings_taskc') ?? false;
183+
taskReplica.value = prefs.getBool('settings_taskr_repl') ?? false;
184+
}
185+
186+
Future<void> refreshReplicaTasks() async {
187+
if (!taskReplica.value) return;
188+
await Replica.sync();
189+
tasksFromReplica.value = await Replica.getAllTasksFromReplica();
190+
debugPrint("Tasks from Replica: ${tasks.length}");
139191
}
140192

141193
void addListenerToScrollController() {
@@ -327,6 +379,10 @@ class HomeController extends GetxController {
327379
_refreshTasks();
328380
}
329381

382+
Future<void> syncReplica() async {
383+
await Replica.sync();
384+
}
385+
330386
Future<void> synchronize(BuildContext context, bool isDialogNeeded) async {
331387
try {
332388
final connectivityResult = await Connectivity().checkConnectivity();
@@ -503,6 +559,7 @@ class HomeController extends GetxController {
503559
RxBool delaytask = false.obs;
504560
RxBool change24hr = false.obs;
505561
RxBool taskchampion = false.obs;
562+
RxBool taskReplica = false.obs;
506563

507564
// dialogue box
508565
final formKey = GlobalKey<FormState>();
@@ -713,7 +770,9 @@ class HomeController extends GetxController {
713770
Uri? uri = await HomeWidget.initiallyLaunchedFromHomeWidget();
714771
if (uri != null) {
715772
if (uri.host == "cardclicked") {
716-
if (uri.queryParameters["uuid"] != null) {
773+
if (uri.queryParameters["uuid"] != null &&
774+
!taskchampion.value &&
775+
!taskReplica.value) {
717776
uuid.value = uri.queryParameters["uuid"] as String;
718777
isHomeWidgetTaskTapped.value = true;
719778
Future.delayed(Duration.zero, () {
@@ -727,12 +786,15 @@ class HomeController extends GetxController {
727786
HomeWidget.widgetClicked.listen((uri) async {
728787
if (uri != null) {
729788
if (uri.host == "cardclicked") {
730-
if (uri.queryParameters["uuid"] != null) {
789+
if (uri.queryParameters["uuid"] != null &&
790+
!taskchampion.value &&
791+
!taskReplica.value) {
731792
uuid.value = uri.queryParameters["uuid"] as String;
732793
isHomeWidgetTaskTapped.value = true;
794+
795+
debugPrint('uuid is $uuid');
796+
Get.toNamed(Routes.DETAIL_ROUTE, arguments: ["uuid", uuid.value]);
733797
}
734-
debugPrint('uuid is $uuid');
735-
Get.toNamed(Routes.DETAIL_ROUTE, arguments: ["uuid", uuid.value]);
736798
} else if (uri.host == "addclicked") {
737799
showAddDialogAfterWidgetClick();
738800
}

lib/app/modules/home/controllers/widget.controller.dart

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@ class WidgetController extends GetxController {
4343
await updateWidget();
4444
}
4545

46-
Future<void> sendData() async {
47-
final HomeController taskController = Get.find<HomeController>();
46+
List<Map<String, dynamic>> getTW2Tasks(HomeController taskController) {
4847
int lengthBeforeFilters = allData.length;
4948
List<Task> tasks = allData;
5049
debugPrint(
@@ -140,6 +139,43 @@ class WidgetController extends GetxController {
140139
"uuid": "NO_TASK"
141140
});
142141
}
142+
return l;
143+
}
144+
145+
Future<void> sendData() async {
146+
final HomeController taskController = Get.find<HomeController>();
147+
List<Map<String, dynamic>> l;
148+
if (!taskController.taskchampion.value &&
149+
!taskController.taskReplica.value) {
150+
l = getTW2Tasks(taskController);
151+
} else if (taskController.taskchampion.value) {
152+
var tasks = taskController.tasks;
153+
l = [];
154+
if (tasks.isNotEmpty) {
155+
for (var task in tasks) {
156+
if (task.status == 'deleted') continue;
157+
l.add({
158+
"description": task.description,
159+
"urgency": 'urgencyLevel : 0',
160+
"uuid": task.uuid,
161+
"priority": task.priority ?? "N"
162+
});
163+
}
164+
}
165+
} else {
166+
l = [];
167+
var tasks = taskController.tasksFromReplica;
168+
if (tasks.isNotEmpty) {
169+
for (var task in tasks) {
170+
l.add({
171+
"description": task.description,
172+
"urgency": 'urgencyLevel : 0',
173+
"uuid": task.uuid,
174+
"priority": task.priority ?? "N"
175+
});
176+
}
177+
}
178+
}
143179
await HomeWidget.saveWidgetData("tasks", jsonEncode(l));
144180
}
145181

0 commit comments

Comments
 (0)