diff --git a/lib/api/task_implementation.dart b/lib/api/task_implementation.dart index b916a12..786364d 100644 --- a/lib/api/task_implementation.dart +++ b/lib/api/task_implementation.dart @@ -92,7 +92,7 @@ class TaskAPIService extends APIService implements TaskService { Future?> getByOptions(TaskServiceOptions options) { String optionString = options.getOptions(); return client - .get('/tasks/all?$optionString') + .get('/tasks/all$optionString') .then((response) { if (response == null) return null; return convertList(response.body, (result) => Task.fromJson(result)); diff --git a/lib/managers/notifications.dart b/lib/managers/notifications.dart index 62f3af1..973ca89 100644 --- a/lib/managers/notifications.dart +++ b/lib/managers/notifications.dart @@ -9,6 +9,8 @@ import 'package:flutter_local_notifications/flutter_local_notifications.dart'as import 'package:rxdart/subjects.dart' as rxSub; import 'package:vikunja_app/service/services.dart'; +import '../models/task.dart'; + class NotificationClass { final int? id; final String? title; @@ -120,30 +122,18 @@ class NotificationClass { } - Future scheduleDueNotifications(TaskService taskService) async { - final tasks = await taskService.getByOptions(new TaskServiceOptions(newOptions: [ - TaskServiceOption("filter_by", [ - TaskServiceOptionFilterBy.done, - TaskServiceOptionFilterBy.due_date - ]), - TaskServiceOption( - "filter_comparator", [ - TaskServiceOptionFilterComparator.equals, - TaskServiceOptionFilterComparator.greater - ]), - TaskServiceOption( - "filter_concat", TaskServiceOptionFilterConcat.and), - TaskServiceOption("filter_value", [ - TaskServiceOptionFilterValue.enum_false, - DateTime.now().toUtc().toIso8601String() - ]), - ])); + Future scheduleDueNotifications(TaskService taskService, + {List? tasks}) async { + if (tasks == null) + tasks = await taskService.getAll(); if (tasks == null) { print("did not receive tasks on notification update"); return; } await notificationsPlugin.cancelAll(); for (final task in tasks) { + if(task.done) + continue; for (final reminder in task.reminderDates) { scheduleNotification( "Reminder", diff --git a/lib/pages/landing_page.dart b/lib/pages/landing_page.dart index 670ac96..ba33f99 100644 --- a/lib/pages/landing_page.dart +++ b/lib/pages/landing_page.dart @@ -224,19 +224,26 @@ class LandingPageState extends State .settingsManager .getLandingPageOnlyDueDateTasks() .then((showOnlyDueDateTasks) { - if (!showOnlyDueDateTasks) { - return VikunjaGlobal.of(context).taskService.getAll().then((value) => _handleTaskList(value)); - } else { - return VikunjaGlobal - .of(context) - .taskService - .getByOptions(TaskServiceOptions()) - .then?>((taskList) => _handleTaskList(taskList)); - } - }); + return VikunjaGlobal + .of(context) + .taskService + .getByOptions(TaskServiceOptions( + newOptions: [ + TaskServiceOption("filter_by", "done"), + TaskServiceOption("filter_value", "false"), + ], + clearOther: true + )) + .then?>((taskList) => _handleTaskList(taskList, showOnlyDueDateTasks)); + + }).onError((error, stackTrace) {print("error");}); } - Future _handleTaskList(List? taskList) { + Future _handleTaskList(List? taskList, bool showOnlyDueDateTasks) { + if(showOnlyDueDateTasks) + taskList?.removeWhere((element) => element.dueDate == null || element.dueDate!.year == 0001); + taskList?.forEach((element) {print(element.dueDate);}); + if (taskList != null && taskList.isEmpty) { setState(() { landingPageStatus = PageStatus.empty; diff --git a/lib/service/services.dart b/lib/service/services.dart index f8b99e5..6c9f81c 100644 --- a/lib/service/services.dart +++ b/lib/service/services.dart @@ -73,9 +73,10 @@ class TaskServiceOption { } } -List defaultOptions = [ +final List defaultOptions = [ TaskServiceOption("sort_by", - [TaskServiceOptionSortBy.due_date, TaskServiceOptionSortBy.id]), + [TaskServiceOptionSortBy.due_date, + TaskServiceOptionSortBy.id]), TaskServiceOption( "order_by", TaskServiceOptionOrderBy.asc), TaskServiceOption("filter_by", [ @@ -84,7 +85,7 @@ List defaultOptions = [ ]), TaskServiceOption("filter_value", [ TaskServiceOptionFilterValue.enum_false, - '0001-01-02T00:00:00.000Z' + '1970-01-01T00:00:00.000Z' ]), TaskServiceOption( "filter_comparator", [ @@ -96,15 +97,20 @@ List defaultOptions = [ ]; class TaskServiceOptions { - List? options; + List options = []; - TaskServiceOptions({List? newOptions}) { - options = [...defaultOptions]; + TaskServiceOptions({List? newOptions, bool clearOther = false}) { + if(!clearOther) + options = new List.from(defaultOptions); if (newOptions != null) { for (TaskServiceOption custom_option in newOptions) { - int index = options!.indexWhere((element) => element.name == custom_option.name); - options!.removeAt(index); - options!.insert(index, custom_option); + int index = options.indexWhere((element) => element.name == custom_option.name); + if(index > -1) { + options.removeAt(index); + } else { + index = options.length; + } + options.insert(index, custom_option); } } } @@ -112,8 +118,8 @@ class TaskServiceOptions { String getOptions() { String result = ''; - if (options == null) return ''; - for (TaskServiceOption option in options!) { + if (options.length == 0) return ''; + for (TaskServiceOption option in options) { dynamic value = option.getValue(); if (value is List) { for (dynamic valueEntry in value) { @@ -124,7 +130,8 @@ class TaskServiceOptions { } } - if (result.startsWith('&')) result.substring(1); + if (result.startsWith('&')) result = result.substring(1); + result = "?" + result; return result; } }