import 'dart:async'; import 'dart:developer'; import 'package:vikunja_app/api/client.dart'; import 'package:vikunja_app/api/response.dart'; import 'package:vikunja_app/api/service.dart'; import 'package:vikunja_app/models/task.dart'; import 'package:vikunja_app/service/services.dart'; class TaskAPIService extends APIService implements TaskService { TaskAPIService(Client client) : super(client); @override Future add(int projectId, Task task) { return client .put('/projects/$projectId/tasks', body: task.toJSON()) .then((response) { if (response == null) return null; return Task.fromJson(response.body); }); } @override Future get(int listId) { return client.get('/project/$listId/tasks').then((response) { if (response == null) return null; return Task.fromJson(response.body); }); } @override Future delete(int taskId) { return client.delete('/tasks/$taskId'); } @override Future update(Task task) { return client .post('/tasks/${task.id}', body: task.toJSON()) .then((response) { if (response == null) return null; return Task.fromJson(response.body); }); } @override Future?> getAll() { return client.get('/tasks/all').then((response) { int page_n = 0; if (response == null) return null; if (response.headers["x-pagination-total-pages"] != null) { page_n = int.parse(response.headers["x-pagination-total-pages"]!); } else { return Future.value(response.body); } List> futureList = []; List taskList = []; for (int i = 0; i < page_n; i++) { Map> paramMap = { "page": [i.toString()] }; futureList.add(client.get('/tasks/all', paramMap).then((pageResponse) { convertList(pageResponse?.body, (result) { taskList.add(Task.fromJson(result)); }); })); } return Future.wait(futureList).then((value) { return taskList; }); }); } @override Future getAllByProject(int projectId, [Map>? queryParameters]) { return client .get('/projects/$projectId/tasks', queryParameters) .then((response) { return response != null ? new Response( convertList(response.body, (result) => Task.fromJson(result)), response.statusCode, response.headers) : null; }); } @override Future?> getByOptions(TaskServiceOptions options) { Map> optionsMap = options.getOptions(); //optionString = "?sort_by[]=due_date&sort_by[]=id&order_by[]=asc&order_by[]=desc&filter_by[]=done&filter_value[]=false&filter_comparator[]=equals&filter_concat=and&filter_include_nulls=false&page=1"; //print(optionString); return client.get('/tasks/all', optionsMap).then((response) { if (response == null) return null; return convertList(response.body, (result) => Task.fromJson(result)); }); } @override // TODO: implement maxPages int get maxPages => maxPages; }