diff --git a/lib/api/marianumcloud/talk/chat/get_chat_cache.dart b/lib/api/marianumcloud/talk/chat/get_chat_cache.dart index 608da9a..b15a886 100644 --- a/lib/api/marianumcloud/talk/chat/get_chat_cache.dart +++ b/lib/api/marianumcloud/talk/chat/get_chat_cache.dart @@ -5,7 +5,8 @@ import 'get_chat_response.dart'; class GetChatCache extends SimpleCache { GetChatCache({ - required void Function(GetChatResponse) onUpdate, + super.onCacheData, + super.onNetworkData, super.onError, required String chatToken, }) : super( @@ -19,7 +20,6 @@ class GetChatCache extends SimpleCache { ), ).run(), fromJson: GetChatResponse.fromJson, - onUpdate: onUpdate, ) { start('nc-chat-$chatToken'); } diff --git a/lib/state/app/modules/chat/bloc/chat_bloc.dart b/lib/state/app/modules/chat/bloc/chat_bloc.dart index ee1823f..f02b80f 100644 --- a/lib/state/app/modules/chat/bloc/chat_bloc.dart +++ b/lib/state/app/modules/chat/bloc/chat_bloc.dart @@ -1,5 +1,4 @@ import '../../../../../api/errors/error_mapper.dart'; -import '../../../../../api/marianumcloud/talk/chat/get_chat_response.dart'; import '../../../infrastructure/loadable_state/loading_error.dart'; import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc.dart'; import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc_event.dart'; @@ -57,23 +56,35 @@ class ChatBloc extends LoadableHydratedBloc s.copyWith(chatResponse: data))); + }, + onNetworkData: (data) { + if (!stillCurrent()) return; + add(DataGathered((s) => s.copyWith(chatResponse: data))); + }, onError: (e) => capturedError = e, ); } catch (e) { capturedError = e; } - if (_lastTokenSet.isAfter(requestStart)) return; - if ((innerState?.currentToken ?? '') != token) return; + if (!stillCurrent()) return; - if (response != null) { - add(DataGathered((s) => s.copyWith(chatResponse: response))); - } if (capturedError != null) { add(Error(LoadingError( message: errorToUserMessage(capturedError), diff --git a/lib/state/app/modules/chat/data_provider/chat_data_provider.dart b/lib/state/app/modules/chat/data_provider/chat_data_provider.dart index 8271b61..9be4252 100644 --- a/lib/state/app/modules/chat/data_provider/chat_data_provider.dart +++ b/lib/state/app/modules/chat/data_provider/chat_data_provider.dart @@ -2,26 +2,18 @@ import '../../../../../api/marianumcloud/talk/chat/get_chat_cache.dart'; import '../../../../../api/marianumcloud/talk/chat/get_chat_response.dart'; class ChatDataProvider { - Future getChat({ + Future getChat({ required String token, - void Function(GetChatResponse data)? onUpdate, + void Function(GetChatResponse data)? onCacheData, + void Function(GetChatResponse data)? onNetworkData, void Function(Object)? onError, }) async { - GetChatResponse? latest; - Object? capturedError; final cache = GetChatCache( chatToken: token, - onUpdate: (data) { - latest = data; - onUpdate?.call(data); - }, - onError: (e) { - capturedError = e; - onError?.call(e); - }, + onCacheData: onCacheData, + onNetworkData: onNetworkData, + onError: (e) => onError?.call(e), ); await cache.ready; - if (latest != null) return latest!; - throw capturedError ?? Exception('No data and no error from getChat'); } }