aboutsummaryrefslogtreecommitdiff
path: root/frontend/lib/services/task_service.dart
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/lib/services/task_service.dart')
-rw-r--r--frontend/lib/services/task_service.dart101
1 files changed, 101 insertions, 0 deletions
diff --git a/frontend/lib/services/task_service.dart b/frontend/lib/services/task_service.dart
new file mode 100644
index 000000000..bb5583486
--- /dev/null
+++ b/frontend/lib/services/task_service.dart
@@ -0,0 +1,101 @@
+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/services/shared_preferences_service.dart';
+import 'package:auto_gpt_flutter_client/utils/rest_api_utility.dart';
+
+/// Service class for performing task-related operations.
+class TaskService {
+ final RestApiUtility api;
+ final SharedPreferencesService prefsService;
+ List<String> _deletedTaskIds = [];
+
+ TaskService(this.api, this.prefsService);
+
+ /// Creates a new task.
+ ///
+ /// [taskRequestBody] is a Map representing the request body for creating a task.
+ Future<Map<String, dynamic>> createTask(
+ TaskRequestBody taskRequestBody) async {
+ try {
+ return await api.post('agent/tasks', taskRequestBody.toJson());
+ } catch (e) {
+ // TODO: We are bubbling up the full response. Revisit this.
+ rethrow;
+ }
+ }
+
+ /// Fetches a single page of tasks.
+ ///
+ /// [currentPage] and [pageSize] are pagination parameters.
+ Future<TaskResponse> 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 fetch a page of tasks: $e');
+ }
+ }
+
+ /// Fetches all tasks across all pages.
+ // TODO: Temporaily make page size 10000 until pagination is fixed
+ Future<List<Task>> fetchAllTasks({int pageSize = 10000}) async {
+ int currentPage = 1;
+ List<Task> 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.
+ Future<Map<String, dynamic>> getTaskDetails(String taskId) async {
+ try {
+ return await api.get('agent/tasks/$taskId');
+ } catch (e) {
+ throw Exception('Failed to get task details: $e');
+ }
+ }
+
+ /// Lists all artifacts for a specific task.
+ ///
+ /// [taskId] is the ID of the task.
+ /// [currentPage] and [pageSize] are optional pagination parameters.
+ Future<Map<String, dynamic>> listTaskArtifacts(String taskId,
+ {int currentPage = 1, int pageSize = 10}) async {
+ try {
+ return await api.get(
+ 'agent/tasks/$taskId/artifacts?current_page=$currentPage&page_size=$pageSize');
+ } catch (e) {
+ throw Exception('Failed to list task artifacts: $e');
+ }
+ }
+
+ Future<void> loadDeletedTasks() async {
+ _deletedTaskIds = await prefsService.getStringList('deletedTasks') ?? [];
+ print("Deleted tasks fetched successfully!");
+ }
+
+ void saveDeletedTask(String taskId) {
+ _deletedTaskIds.add(taskId);
+ prefsService.setStringList('deletedTasks', _deletedTaskIds);
+ print("Task $taskId deleted successfully!");
+ }
+
+ bool isTaskDeleted(String taskId) {
+ return _deletedTaskIds.contains(taskId);
+ }
+}