Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
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
44 changes: 44 additions & 0 deletions hook/build.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import 'dart:io';
import 'package:native_assets_cli/native_assets_cli.dart';
import 'package:native_assets_cli/code_assets.dart';

void main(List<String> args) async {
await build(args, (input, output) async {
// Check if code assets are supported/requested
// Note: hook/build.dart is only called if the package has native assets.

final targetOS = input.config.code.targetOS;
if (targetOS != OS.linux) return;

final rustDir = input.packageRoot.resolve('rust/');

// 1. Run cargo build --release
final result = await Process.run(
'cargo',
['build', '--release'],
workingDirectory: rustDir.toFilePath(),
);

if (result.exitCode != 0) {
stdout.write(result.stdout);
stderr.write(result.stderr);
throw Exception('Rust build failed');
}

// 2. Locate the library
final libName = 'libtc_helper.so';
final libPath = rustDir.resolve('target/release/$libName');

if (!await File.fromUri(libPath).exists()) {
throw Exception('Built library not found at $libPath');
}

// 3. Add the asset to the output
output.assets.code.add(CodeAsset(
package: input.packageName,
name: 'main.dart',
linkMode: DynamicLoadingBundled(),
file: libPath,
));
});
}
55 changes: 25 additions & 30 deletions lib/app/modules/home/controllers/home_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -671,7 +671,7 @@ class HomeController extends GetxController {
}

void changeInDirectory() {
print("directory change to ${splashController.baseDirectory.value.path}");
debugPrint("directory change to ${splashController.baseDirectory.value.path}");
storage = Storage(
Directory(
'${splashController.baseDirectory.value.path}/profiles/${splashController.currentProfile.value}',
Expand All @@ -692,12 +692,13 @@ class HomeController extends GetxController {
void initLanguageAndDarkMode() {
isDarkModeOn.value = AppSettings.isDarkMode;
selectedLanguage.value = AppSettings.selectedLanguage;
HomeWidget.saveWidgetData(
"themeMode", AppSettings.isDarkMode ? "dark" : "light");
HomeWidget.updateWidget(
androidName: "TaskWarriorWidgetProvider",
iOSName: "TaskWarriorWidgets");
// print("called and value is${isDarkModeOn.value}");
if (Platform.isAndroid || Platform.isIOS) {
HomeWidget.saveWidgetData(
"themeMode", AppSettings.isDarkMode ? "dark" : "light");
HomeWidget.updateWidget(
androidName: "TaskWarriorWidgetProvider",
iOSName: "TaskWarriorWidgets");
}
}

final addKey = GlobalKey();
Expand Down Expand Up @@ -731,17 +732,14 @@ class HomeController extends GetxController {
Future.delayed(
const Duration(milliseconds: 500),
() {
SaveTourStatus.getInAppTourStatus().then((value) => {
if (value == false)
{
tutorialCoachMark.show(context: context),
}
else
{
// ignore: avoid_print
debugPrint('User has seen this page'),
// User has seen this page
}
SaveTourStatus.getInAppTourStatus().then((value) {
if (value == false) {
tutorialCoachMark.show(context: context);
} else {
// ignore: avoid_print
debugPrint('User has seen this page');
// User has seen this page
}
});
},
);
Expand Down Expand Up @@ -776,16 +774,13 @@ class HomeController extends GetxController {
Future.delayed(
const Duration(milliseconds: 500),
() {
SaveTourStatus.getFilterTourStatus().then((value) => {
if (value == false)
{
tutorialCoachMark.show(context: context),
}
else
{
// ignore: avoid_print
print('User has seen this page'),
}
SaveTourStatus.getFilterTourStatus().then((value) {
if (value == false) {
tutorialCoachMark.show(context: context);
} else {
// ignore: avoid_print
debugPrint('User has seen this page');
}
});
},
);
Expand All @@ -808,8 +803,8 @@ class HomeController extends GetxController {

void showTaskSwipeTutorial(BuildContext context) {
SaveTourStatus.getTaskSwipeTutorialStatus().then((value) {
print("value is $value");
print("tasks is ${tasks.isNotEmpty}");
debugPrint("value is $value");
debugPrint("tasks is ${tasks.isNotEmpty}");
if (value == false) {
initTaskSwipeTutorial();
tutorialCoachMark.show(context: context);
Expand Down
16 changes: 10 additions & 6 deletions lib/app/modules/home/controllers/widget.controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -176,15 +176,19 @@ class WidgetController extends GetxController {
}
}
}
await HomeWidget.saveWidgetData("tasks", jsonEncode(l));
if (Platform.isAndroid || Platform.isIOS) {
await HomeWidget.saveWidgetData("tasks", jsonEncode(l));
}
}

Future updateWidget() async {
try {
return HomeWidget.updateWidget(
name: 'TaskWarriorWidgetProvider', iOSName: 'TaskWarriorWidgets');
} on PlatformException catch (exception) {
debugPrint('Error Updating Widget. $exception');
if (Platform.isAndroid || Platform.isIOS) {
try {
return HomeWidget.updateWidget(
name: 'TaskWarriorWidgetProvider', iOSName: 'TaskWarriorWidgets');
} on PlatformException catch (exception) {
debugPrint('Error Updating Widget. $exception');
}
}
}
}
2 changes: 1 addition & 1 deletion lib/app/modules/splash/controllers/splash_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import 'package:shared_preferences/shared_preferences.dart';
import 'package:taskwarrior/app/models/storage.dart';
import 'package:taskwarrior/app/modules/home/controllers/home_controller.dart';
import 'package:taskwarrior/app/routes/app_pages.dart';
import 'package:taskwarrior/app/utils/taskchampion/credentials_storage.dart';
import 'package:taskwarrior/app/utils/taskfunctions/profiles.dart';
import 'package:taskwarrior/app/v3/models/task.dart';

Expand Down Expand Up @@ -139,6 +138,7 @@ class SplashController extends GetxController {
}

Future<void> checkForUpdate() async {
if (!Platform.isAndroid) return;
try {
AppUpdateInfo updateInfo = await InAppUpdate.checkForUpdate();
if (updateInfo.updateAvailability == UpdateAvailability.updateAvailable) {
Expand Down
5 changes: 4 additions & 1 deletion lib/app/utils/app_settings/app_settings.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'dart:io';
import 'package:get/get.dart';
import 'package:home_widget/home_widget.dart';
import 'package:shared_preferences/shared_preferences.dart';
Expand All @@ -14,7 +15,9 @@ class AppSettings {
static final RxBool use24HourFormatRx = false.obs;

static Future init() async {
await HomeWidget.setAppGroupId("group.taskwarrior");
if (Platform.isIOS){
await HomeWidget.setAppGroupId("group.taskwarrior");
}
await SelectedTheme.init();
await SelectedLanguage.init();
await SaveTourStatus.init();
Expand Down
2 changes: 1 addition & 1 deletion lib/app/v3/db/task_database.dart
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,7 @@ class TaskDatabase {
final List<
Map<String,
dynamic>> result = await taskDatabase._database!.rawQuery(
'SELECT DISTINCT project FROM Tasks WHERE project IS NOT NULL AND status IS NOT "deleted"');
"SELECT DISTINCT project FROM Tasks WHERE project IS NOT NULL AND status IS NOT 'deleted'");

return result.map((row) => row['project'] as String).toList();
}
Expand Down
15 changes: 11 additions & 4 deletions lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
import 'dart:ffi';
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/foundation.dart' show kIsWeb;
import 'package:flutter/material.dart';
import 'package:get/get.dart';
// 1. Add this import
import 'package:app_links/app_links.dart';
import 'package:taskwarrior/app/services/deep_link_service.dart';

import 'package:taskwarrior/app/utils/app_settings/app_settings.dart';
import 'package:taskwarrior/app/utils/debug_logger/log_databse_helper.dart';
import 'package:taskwarrior/app/utils/themes/dark_theme.dart';
import 'package:taskwarrior/app/utils/themes/light_theme.dart';
import 'package:taskwarrior/rust_bridge/frb_generated.dart';
import 'package:sqflite_common_ffi/sqflite_ffi.dart'; // Add this

import 'app/routes/app_pages.dart';

LogDatabaseHelper _logDatabaseHelper = LogDatabaseHelper();
Expand All @@ -23,12 +22,20 @@ DynamicLibrary loadNativeLibrary() {
return DynamicLibrary.open('libtc_helper.so');
} else if (Platform.isMacOS) {
return DynamicLibrary.open('tc_helper.framework/tc_helper');
}else if (Platform.isLinux) { // Add this block
return DynamicLibrary.open('libtc_helper.so');
}
throw UnsupportedError(
'Platform ${Platform.operatingSystem} is not supported');
}

void main() async {
if (Platform.isLinux) {
// Initialize sqflite for Linux
sqfliteFfiInit();
databaseFactory = databaseFactoryFfi;
}

debugPrint = (String? message, {int? wrapWidth}) {
if (message != null) {
debugPrintSynchronously(message, wrapWidth: wrapWidth);
Expand Down
4 changes: 4 additions & 0 deletions linux/flutter/generated_plugin_registrant.cc
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

#include <file_selector_linux/file_selector_plugin.h>
#include <flutter_timezone/flutter_timezone_plugin.h>
#include <gtk/gtk_plugin.h>
#include <url_launcher_linux/url_launcher_plugin.h>

void fl_register_plugins(FlPluginRegistry* registry) {
Expand All @@ -17,6 +18,9 @@ void fl_register_plugins(FlPluginRegistry* registry) {
g_autoptr(FlPluginRegistrar) flutter_timezone_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "FlutterTimezonePlugin");
flutter_timezone_plugin_register_with_registrar(flutter_timezone_registrar);
g_autoptr(FlPluginRegistrar) gtk_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "GtkPlugin");
gtk_plugin_register_with_registrar(gtk_registrar);
g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin");
url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);
Expand Down
1 change: 1 addition & 0 deletions linux/flutter/generated_plugins.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
list(APPEND FLUTTER_PLUGIN_LIST
file_selector_linux
flutter_timezone
gtk
url_launcher_linux
)

Expand Down
2 changes: 2 additions & 0 deletions macos/Flutter/GeneratedPluginRegistrant.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import FlutterMacOS
import Foundation

import app_links
import connectivity_plus
import file_picker
import file_picker_writable
Expand All @@ -18,6 +19,7 @@ import sqflite_darwin
import url_launcher_macos

func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
AppLinksMacosPlugin.register(with: registry.registrar(forPlugin: "AppLinksMacosPlugin"))
ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin"))
FilePickerPlugin.register(with: registry.registrar(forPlugin: "FilePickerPlugin"))
FilePickerWritablePlugin.register(with: registry.registrar(forPlugin: "FilePickerWritablePlugin"))
Expand Down
Loading