Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,12 @@ android {
productFlavors {
production {
dimension "default"
applicationId "com.ccextractor.taskwarrior"
applicationId "com.ccextractor.taskwarriorflutter"
signingConfig keystoreProperties.isEmpty() ? signingConfigs.debug : signingConfigs.production
}
nightly {
dimension "default"
applicationId "com.ccextractor.taskwarrior.nightly"
applicationId "com.ccextractor.taskwarriorflutter.nightly"
versionNameSuffix "-nightly"
signingConfig nightlyKeystoreProperties.isEmpty() ? signingConfigs.debug : signingConfigs.nightly
}
Expand Down
2 changes: 1 addition & 1 deletion android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
</intent-filter>
</activity>

<receiver android:name="TaskWarriorWidgetProvider"
<receiver android:name=".TaskWarriorWidgetProvider"
android:exported="true">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
Expand Down
Binary file not shown.
Binary file not shown.
10 changes: 5 additions & 5 deletions lib/app/modules/about/views/about_page_app_bar.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,17 @@ import 'package:taskwarrior/app/utils/language/sentence_manager.dart';

class AboutPageAppBar extends StatelessWidget implements PreferredSizeWidget {
final AboutController aboutController;
const AboutPageAppBar({required this.aboutController,super.key});
const AboutPageAppBar({required this.aboutController, super.key});

@override
Widget build(BuildContext context) {
return AppBar(
centerTitle: true,
backgroundColor: TaskWarriorColors.kprimaryBackgroundColor,
title: Text(
SentenceManager(
currentLanguage: aboutController.selectedLanguage.value)
.sentences
.aboutPageAppBarTitle,
SentenceManager(currentLanguage: aboutController.selectedLanguage.value)
.sentences
.aboutPageAppBarTitle,
// style: GoogleFonts.poppins(color: TaskWarriorColors.white),
style: TextStyle(
fontFamily: FontFamily.poppins,
Expand All @@ -31,6 +30,7 @@ class AboutPageAppBar extends StatelessWidget implements PreferredSizeWidget {
child: Icon(
Icons.chevron_left,
color: TaskWarriorColors.white,
size: 35,
),
),
);
Expand Down
52 changes: 52 additions & 0 deletions lib/app/modules/home/controllers/home_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:home_widget/home_widget.dart';
import 'package:loggy/loggy.dart';
import 'package:path_provider/path_provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:taskwarrior/app/models/filters.dart';

Expand All @@ -31,10 +32,13 @@ import 'package:taskwarrior/app/utils/taskfunctions/projects.dart';
import 'package:taskwarrior/app/utils/taskfunctions/query.dart';
import 'package:taskwarrior/app/utils/taskfunctions/tags.dart';
import 'package:taskwarrior/app/utils/app_settings/app_settings.dart';
import 'package:taskwarrior/app/v3/champion/Replica.dart';
import 'package:taskwarrior/app/v3/champion/models/task_for_replica.dart';
import 'package:taskwarrior/app/v3/db/task_database.dart';
import 'package:taskwarrior/app/v3/db/update.dart';
import 'package:taskwarrior/app/v3/models/task.dart';
import 'package:taskwarrior/app/v3/net/fetch.dart';
import 'package:taskwarrior/rust_bridge/api.dart';
import 'package:textfield_tags/textfield_tags.dart';
import 'package:taskwarrior/app/utils/themes/theme_extension.dart';
import 'package:tutorial_coach_mark/tutorial_coach_mark.dart';
Expand Down Expand Up @@ -63,6 +67,7 @@ class HomeController extends GetxController {
final RxBool showbtn = false.obs;
late TaskDatabase taskdb;
var tasks = <TaskForC>[].obs;
var tasksFromReplica = <TaskForReplica>[].obs;
final RxBool isRefreshing = false.obs;

@override
Expand Down Expand Up @@ -101,6 +106,31 @@ class HomeController extends GetxController {
widgetController.update();
}
});
ever(splashController.currentProfile, (_) {
if (splashController.getMode(splashController.currentProfile.value) !=
"TW3") {
refreshTaskWithNewProfile();
}
if (Platform.isAndroid) {
WidgetController widgetController = Get.put(WidgetController());
widgetController.fetchAllData();
widgetController.updateWidget();
}
});
tryRust();
}

Future<void> tryRust() async {
Directory? someDir = await getDownloadsDirectory();

addTask(taskdbDirPath: someDir != null ? someDir.path : "", map: {
'description': "some task from bridge 2",
"uuid": "270750a0-1801-4a24-8b29-a7aaf62fc74d",
"tags": "t1 t2 t3"
});

debugPrint(
"tryRustHere: ${await getAllTasksJson(taskdbDirPath: someDir != null ? someDir.path : "")}");
}

Future<List<String>> getUniqueProjects() async {
Expand All @@ -127,6 +157,16 @@ class HomeController extends GetxController {
}

Future<void> fetchTasksFromDB() async {
debugPrint("Fetching tasks from DB ${taskReplica.value}");
await _loadTaskChampion();
if (taskReplica.value) {
tasksFromReplica.value = await Replica.getAllTasksFromReplica();
debugPrint("Tasks from Replica: ${tasks.length}");
return;
}
if (taskchampion.value == false) {
return;
}
TaskDatabase taskDatabase = TaskDatabase();
await taskDatabase.open();
List<TaskForC> fetchedTasks = await taskDatabase.fetchTasksFromDatabase();
Expand All @@ -136,6 +176,13 @@ class HomeController extends GetxController {
Future<void> _loadTaskChampion() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
taskchampion.value = prefs.getBool('settings_taskc') ?? false;
taskReplica.value = prefs.getBool('settings_taskr_repl') ?? false;
}

Future<void> refreshReplicaTasks() async {
if (!taskReplica.value) return;
tasksFromReplica.value = await Replica.getAllTasksFromReplica();
debugPrint("Tasks from Replica: ${tasks.length}");
}

void addListenerToScrollController() {
Expand Down Expand Up @@ -327,6 +374,10 @@ class HomeController extends GetxController {
_refreshTasks();
}

Future<void> syncReplica() async {
await Replica.sync();
}

Future<void> synchronize(BuildContext context, bool isDialogNeeded) async {
try {
final connectivityResult = await Connectivity().checkConnectivity();
Expand Down Expand Up @@ -503,6 +554,7 @@ class HomeController extends GetxController {
RxBool delaytask = false.obs;
RxBool change24hr = false.obs;
RxBool taskchampion = false.obs;
RxBool taskReplica = false.obs;

// dialogue box
final formKey = GlobalKey<FormState>();
Expand Down
85 changes: 83 additions & 2 deletions lib/app/modules/home/views/add_task_bottom_sheet_new.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'dart:collection';
import 'dart:io';

import 'package:flutter/material.dart';
Expand All @@ -16,13 +17,18 @@ import 'package:taskwarrior/app/utils/taskfunctions/add_task_dialog_utils.dart';
import 'package:taskwarrior/app/utils/taskfunctions/tags.dart';
import 'package:taskwarrior/app/utils/taskfunctions/taskparser.dart';
import 'package:taskwarrior/app/utils/themes/theme_extension.dart';
import 'package:taskwarrior/app/v3/champion/Replica.dart';
import 'package:taskwarrior/app/v3/models/task.dart';

class AddTaskBottomSheet extends StatelessWidget {
final HomeController homeController;
final bool forTaskC;
final bool forReplica;
const AddTaskBottomSheet(
{required this.homeController, super.key, this.forTaskC = false});
{required this.homeController,
super.key,
this.forTaskC = false,
this.forReplica = false});

@override
Widget build(BuildContext context) {
Expand Down Expand Up @@ -66,6 +72,9 @@ class AddTaskBottomSheet extends StatelessWidget {
onPressed: () {
if (forTaskC) {
onSaveButtonClickedTaskC(context);
} else if (forReplica) {
debugPrint("Saving to Replica");
onSaveButtonClickedForReplica(context);
} else {
onSaveButtonClicked(context);
}
Expand Down Expand Up @@ -354,7 +363,6 @@ class AddTaskBottomSheet extends StatelessWidget {
}

void onSaveButtonClicked(BuildContext context) async {
// print(homeController.formKey.currentState);
if (homeController.formKey.currentState!.validate()) {
try {
var task = taskParser(homeController.namecontroller.text)
Expand Down Expand Up @@ -432,4 +440,77 @@ class AddTaskBottomSheet extends StatelessWidget {
}
}
}

void onSaveButtonClickedForReplica(BuildContext context) async {
if (homeController.formKey.currentState!.validate()) {
try {
await Replica.addTaskToReplica(HashMap<String, dynamic>.from({
"description": homeController.namecontroller.text,
"due": getDueDate(homeController.selectedDates)?.toUtc(),
"priority": homeController.priority.value,
"project": homeController.projectcontroller.text != ""
? homeController.projectcontroller.text
: null,
"wait": getWaitDate(homeController.selectedDates)?.toUtc(),
"tags": homeController.tags,
}));
homeController.namecontroller.text = '';
homeController.projectcontroller.text = '';
homeController.dueString.value = "";
homeController.priority.value = 'X';
homeController.tagcontroller.text = '';
homeController.tags.value = [];
homeController.update();
Get.back();
if (Platform.isAndroid) {
WidgetController widgetController = Get.put(WidgetController());
widgetController.fetchAllData();
widgetController.update();
}

homeController.update();
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text(
SentenceManager(
currentLanguage: homeController.selectedLanguage.value)
.sentences
.addTaskTaskAddedSuccessfully,
style: TextStyle(
color: AppSettings.isDarkMode
? TaskWarriorColors.kprimaryTextColor
: TaskWarriorColors.kLightPrimaryTextColor,
),
),
backgroundColor: AppSettings.isDarkMode
? TaskWarriorColors.ksecondaryBackgroundColor
: TaskWarriorColors.kLightSecondaryBackgroundColor,
duration: const Duration(seconds: 2)));

final SharedPreferences prefs = await SharedPreferences.getInstance();
bool? value;
value = prefs.getBool('sync-OnTaskCreate') ?? false;
// late InheritedStorage storageWidget;
// storageWidget = StorageWidget.of(context);
var storageWidget = Get.find<HomeController>();
if (value) {
storageWidget.synchronize(context, true);
}
await storageWidget.refreshReplicaTasks();
} on FormatException catch (e) {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text(
e.message,
style: TextStyle(
color: AppSettings.isDarkMode
? TaskWarriorColors.kprimaryTextColor
: TaskWarriorColors.kLightPrimaryTextColor,
),
),
backgroundColor: AppSettings.isDarkMode
? TaskWarriorColors.ksecondaryBackgroundColor
: TaskWarriorColors.kLightSecondaryBackgroundColor,
duration: const Duration(seconds: 2)));
}
}
}
}
27 changes: 25 additions & 2 deletions lib/app/modules/home/views/home_page_app_bar.dart
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,8 @@ class HomePageAppBar extends StatelessWidget implements PreferredSizeWidget {
.sentences
.homePageSetup,
onPressed: () {
if (controller.taskchampion.value) {
if (controller.taskchampion.value ||
controller.taskReplica.value) {
Get.toNamed(Routes.MANAGE_TASK_CHAMPION_CREDS);
} else {
Get.toNamed(Routes.MANAGE_TASK_SERVER);
Expand Down Expand Up @@ -124,10 +125,32 @@ class HomePageAppBar extends StatelessWidget implements PreferredSizeWidget {
Builder(
builder: (context) => Obx(() => IconButton(
key: controller.refreshKey,
icon: Icon(Icons.refresh, color: TaskWarriorColors.white),
icon: !controller.isRefreshing.value
? Icon(Icons.refresh, color: TaskWarriorColors.white)
: Icon(Icons.autorenew, color: TaskWarriorColors.white),
onPressed: controller.isRefreshing.value
? null
: () async {
if (controller.taskReplica.value) {
var c = await CredentialsStorage.getClientId();
var e =
await CredentialsStorage.getEncryptionSecret();
if (c == null || e == null) {
_showResultSnackBar(
context,
SentenceManager(
currentLanguage:
controller.selectedLanguage.value)
.sentences
.homePageTaskWarriorNotConfigured,
true);
return;
}
controller.isRefreshing.value = true;
await controller.refreshReplicaTasks();
controller.isRefreshing.value = false;
}

if (controller.taskchampion.value) {
var c = await CredentialsStorage.getClientId();
var e =
Expand Down
18 changes: 16 additions & 2 deletions lib/app/modules/home/views/home_page_body.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'package:double_back_to_close_app/double_back_to_close_app.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:taskwarrior/app/modules/home/views/show_tasks.dart';
import 'package:taskwarrior/app/modules/home/views/show_tasks_replica.dart';
import 'package:taskwarrior/app/modules/home/views/tasks_builder.dart';
import 'package:taskwarrior/app/utils/constants/taskwarrior_colors.dart';
import 'package:taskwarrior/app/utils/themes/theme_extension.dart';
Expand All @@ -16,7 +17,8 @@ class HomePageBody extends StatelessWidget {
Widget build(BuildContext context) {
controller.initInAppTour();
controller.showInAppTour(context);
TaskwarriorColorTheme tColors = Theme.of(context).extension<TaskwarriorColorTheme>()!;
TaskwarriorColorTheme tColors =
Theme.of(context).extension<TaskwarriorColorTheme>()!;
return DoubleBackToCloseApp(
snackBar: SnackBar(
content: Text(SentenceManager(
Expand Down Expand Up @@ -93,7 +95,8 @@ class HomePageBody extends StatelessWidget {
),
),
Visibility(
visible: !controller.taskchampion.value,
visible: !controller.taskchampion.value &&
!controller.taskReplica.value,
child: Expanded(
child: Scrollbar(
child: Obx(
Expand Down Expand Up @@ -121,6 +124,17 @@ class HomePageBody extends StatelessWidget {
selectedSort: controller.selectedSort.value,
project: controller.projectFilter.value,
),
))),
Visibility(
visible: controller.taskReplica.value,
child: Expanded(
child: Scrollbar(
child: TaskReplicaViewBuilder(
replicaTasks: controller.tasksFromReplica,
pendingFilter: controller.pendingFilter.value,
selectedSort: controller.selectedSort.value,
project: controller.projectFilter.value,
),
)))
],
),
Expand Down
Loading