From bc211827ad4c58153a29cf199b767369d8a77cc9 Mon Sep 17 00:00:00 2001 From: hunteraraujo Date: Sun, 3 Sep 2023 20:35:39 -0700 Subject: [PATCH] Add local persistence for deleted tasks - Extended TaskService to manage a list of deleted tasks using shared_preferences. - Modified TaskViewModel to filter out tasks that have been marked as deleted locally. - Loaded the list of deleted tasks during app initialization in main.dart. --- gui/lib/main.dart | 1 + gui/lib/services/task_service.dart | 19 +++++++++++++++++++ gui/lib/viewmodels/task_viewmodel.dart | 14 ++++++++------ 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/gui/lib/main.dart b/gui/lib/main.dart index e6bde44b..bcce311d 100644 --- a/gui/lib/main.dart +++ b/gui/lib/main.dart @@ -42,6 +42,7 @@ class MyApp extends StatelessWidget { // Fetch services from providers final chatService = Provider.of(context, listen: false); final taskService = Provider.of(context, listen: false); + taskService.loadDeletedTasks(); return MaterialApp( title: 'AutoGPT Flutter Client', diff --git a/gui/lib/services/task_service.dart b/gui/lib/services/task_service.dart index 30ba4094..bdc11119 100644 --- a/gui/lib/services/task_service.dart +++ b/gui/lib/services/task_service.dart @@ -1,10 +1,12 @@ 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'; +import 'package:shared_preferences/shared_preferences.dart'; /// Service class for performing task-related operations. class TaskService { final RestApiUtility api; + List _deletedTaskIds = []; TaskService(this.api); @@ -59,4 +61,21 @@ class TaskService { throw Exception('Failed to list task artifacts: $e'); } } + + Future loadDeletedTasks() async { + _deletedTaskIds = + (await SharedPreferences.getInstance()).getStringList('deletedTasks') ?? + []; + print("Deleted tasks fetched successfully!"); + } + + void saveDeletedTask(String taskId) { + _deletedTaskIds.add(taskId); + SharedPreferences.getInstance() + .then((prefs) => prefs.setStringList('deletedTasks', _deletedTaskIds)); + } + + bool isTaskDeleted(String taskId) { + return _deletedTaskIds.contains(taskId); + } } diff --git a/gui/lib/viewmodels/task_viewmodel.dart b/gui/lib/viewmodels/task_viewmodel.dart index d4085d87..4b9517b9 100644 --- a/gui/lib/viewmodels/task_viewmodel.dart +++ b/gui/lib/viewmodels/task_viewmodel.dart @@ -35,19 +35,21 @@ class TaskViewModel with ChangeNotifier { } /// Deletes a task. - void deleteTask(String id) async { - // TODO: Protocol doesn't support deleting tasks, we need to manually manage this list - - // Update local tasks list and notify listeners - _tasks.removeWhere((task) => task.id == id); + void deleteTask(String taskId) { + _taskService.saveDeletedTask(taskId); + tasks.removeWhere((task) => task.id == taskId); notifyListeners(); + print("Tasks deleted successfully!"); } /// Fetches tasks from the data source. void fetchTasks() async { try { final TaskResponse tasksResponse = await _taskService.listAllTasks(); - _tasks = tasksResponse.tasks; + final tasksFromApi = tasksResponse.tasks; + _tasks = tasksFromApi + .where((task) => !_taskService.isTaskDeleted(task.id)) + .toList(); notifyListeners(); print("Tasks fetched successfully!");