import 'dart:async'; import 'dart:developer'; import 'package:vikunja_app/api/response.dart'; import 'package:vikunja_app/models/label.dart'; import 'package:vikunja_app/models/labelTask.dart'; import 'package:vikunja_app/models/list.dart'; import 'package:vikunja_app/models/namespace.dart'; import 'package:vikunja_app/models/task.dart'; import 'package:vikunja_app/models/user.dart'; enum TaskServiceOptionSortBy {id, title, description, done, done_at, due_date, created_by_id, list_id, repeat_after, priority, start_date, end_date, hex_color, percent_done, uid, created, updated} enum TaskServiceOptionOrderBy {asc,desc} enum TaskServiceOptionFilterBy {done, due_date} enum TaskServiceOptionFilterValue {enum_true,enum_false} enum TaskServiceOptionFilterComparator {equals, greater, greater_equals, less, less_equals, like, enum_in} enum TaskServiceOptionFilterConcat {and, or} class TaskServiceOption { String name; dynamic value; dynamic defValue; TaskServiceOption( this.name, this.value ); String handleValue(dynamic input) { if(input is String) return input; return input.toString().split('.').last.replaceAll('enum_', ''); } dynamic getValue() { if(value is List) return value.map((elem) => handleValue(elem)).toList(); else return handleValue(value); } } class TaskServiceOptions { List options = [ TaskServiceOption("sort_by",[TaskServiceOptionSortBy.due_date, TaskServiceOptionSortBy.id]), TaskServiceOption("order_by", TaskServiceOptionOrderBy.asc), TaskServiceOption("filter_by", [TaskServiceOptionFilterBy.done, TaskServiceOptionFilterBy.due_date]), TaskServiceOption("filter_value", [TaskServiceOptionFilterValue.enum_false, '0001-01-02T00:00:00.000Z']), TaskServiceOption("filter_comparator", [TaskServiceOptionFilterComparator.equals,TaskServiceOptionFilterComparator.greater]), TaskServiceOption("filter_concat", TaskServiceOptionFilterConcat.and), ]; void setOption(TaskServiceOption option, dynamic value) { options.firstWhere((element) => element.name == option.name).value = value; } String getOptions() { String result = ''; for(TaskServiceOption option in options) { dynamic value = option.getValue(); if (value is List) { for (dynamic value_entry in value) { result += '&' + option.name + '[]=' + value_entry; } } else { result += '&' + option.name + '=' + value; } } if(result.startsWith('&')) result.substring(1); return result; } } abstract class NamespaceService { Future> getAll(); Future get(int namespaceId); Future create(Namespace ns); Future update(Namespace ns); Future delete(int namespaceId); } abstract class ListService { Future> getAll(); Future get(int listId); Future> getByNamespace(int namespaceId); Future create(int namespaceId, TaskList tl); Future update(TaskList tl); Future delete(int listId); Future getDisplayDoneTasks(int listId); void setDisplayDoneTasks(int listId, String value); Future getDefaultList(); void setDefaultList(int listId); } abstract class TaskService { Future get(int taskId); Future update(Task task); Future delete(int taskId); Future add(int listId, Task task); Future> getAll(); Future getAllByList(int listId, [Map> queryParameters]); Future> getByOptions(TaskServiceOptions options); int get maxPages; } abstract class UserService { Future login(String username, password); Future register(String username, email, password); Future getCurrentUser(); } abstract class LabelService { Future> getAll({String query}); Future