From bdd00683cd25415b20806bf8542cb2ded5f9610e Mon Sep 17 00:00:00 2001 From: Inex Code Date: Mon, 29 Jan 2024 20:14:12 +0400 Subject: [PATCH] refactor: Optimistic state update when removing all finished jobs --- .../bloc/server_jobs/server_jobs_bloc.dart | 11 +-------- .../get_it/api_connection_repository.dart | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/lib/logic/bloc/server_jobs/server_jobs_bloc.dart b/lib/logic/bloc/server_jobs/server_jobs_bloc.dart index bf428d23..0104f3e5 100644 --- a/lib/logic/bloc/server_jobs/server_jobs_bloc.dart +++ b/lib/logic/bloc/server_jobs/server_jobs_bloc.dart @@ -61,16 +61,7 @@ class ServerJobsBloc extends Bloc { final RemoveAllFinishedJobs event, final Emitter emit, ) async { - final List finishedJobs = state.serverJobList - .where( - (final ServerJob job) => - job.status == JobStatusEnum.finished || - job.status == JobStatusEnum.error, - ) - .toList(); - for (final ServerJob job in finishedJobs) { - await getIt().removeServerJob(job.uid); - } + await getIt().removeAllFinishedServerJobs(); } @override diff --git a/lib/logic/get_it/api_connection_repository.dart b/lib/logic/get_it/api_connection_repository.dart index 8503acbc..8a64b09d 100644 --- a/lib/logic/get_it/api_connection_repository.dart +++ b/lib/logic/get_it/api_connection_repository.dart @@ -42,6 +42,29 @@ class ApiConnectionRepository { _dataStream.add(_apiData); } + Future removeAllFinishedServerJobs() async { + final List finishedJobs = _apiData.serverJobs.data + ?.where( + (final ServerJob element) => + element.status == JobStatusEnum.finished || + element.status == JobStatusEnum.error, + ) + .toList() ?? + []; + // Optimistically remove the jobs from the list + _apiData.serverJobs.data?.removeWhere( + (final ServerJob element) => + element.status == JobStatusEnum.finished || + element.status == JobStatusEnum.error, + ); + _dataStream.add(_apiData); + + await Future.forEach( + finishedJobs, + (final ServerJob job) async => removeServerJob(job.uid), + ); + } + void dispose() { _dataStream.close(); _connectionStatusStream.close();