diff --git a/frontend/lib/services/task_service.dart b/frontend/lib/services/task_service.dart index 7fab9084..2fe77dcc 100644 --- a/frontend/lib/services/task_service.dart +++ b/frontend/lib/services/task_service.dart @@ -1,3 +1,4 @@ +import 'package:auto_gpt_flutter_client/models/task.dart'; import 'package:auto_gpt_flutter_client/models/task_request_body.dart'; import 'package:auto_gpt_flutter_client/models/task_response.dart'; import 'package:auto_gpt_flutter_client/utils/rest_api_utility.dart'; @@ -22,21 +23,40 @@ class TaskService { } } - /// Lists all tasks. + /// Fetches a single page of tasks. /// - /// [currentPage] and [pageSize] are optional pagination parameters. - /// - Future listAllTasks( + /// [currentPage] and [pageSize] are pagination parameters. + Future fetchTasksPage( {int currentPage = 1, int pageSize = 10}) async { try { final response = await api .get('agent/tasks?current_page=$currentPage&page_size=$pageSize'); return TaskResponse.fromJson(response); } catch (e) { - throw Exception('Failed to list all tasks: $e'); + throw Exception('Failed to fetch a page of tasks: $e'); } } + /// Fetches all tasks across all pages. + // TODO: Temporaily make page size 10000 until pagination is fixed + Future> fetchAllTasks({int pageSize = 10000}) async { + int currentPage = 1; + List allTasks = []; + + while (true) { + final response = + await fetchTasksPage(currentPage: currentPage, pageSize: pageSize); + allTasks.addAll(response.tasks); + + if (response.tasks.length < pageSize) { + // No more tasks to fetch + break; + } + currentPage++; + } + return allTasks; + } + /// Gets details about a specific task. /// /// [taskId] is the ID of the task. diff --git a/frontend/lib/viewmodels/task_viewmodel.dart b/frontend/lib/viewmodels/task_viewmodel.dart index bd351104..d00934f1 100644 --- a/frontend/lib/viewmodels/task_viewmodel.dart +++ b/frontend/lib/viewmodels/task_viewmodel.dart @@ -52,8 +52,7 @@ class TaskViewModel with ChangeNotifier { /// Fetches tasks from the data source. Future fetchTasks() async { try { - final TaskResponse tasksResponse = await _taskService.listAllTasks(); - final tasksFromApi = tasksResponse.tasks; + final tasksFromApi = await _taskService.fetchAllTasks(); _tasks = tasksFromApi .where((task) => !_taskService.isTaskDeleted(task.id)) .toList();