import '../../about/external/data/GroupMessage.dart'; import '../../about/external/initial/GroupMessageRequest.dart'; import '../../about/external/initial/IdRequest.dart'; import '../../utils/ObjectConvertors.dart'; import '../parent/ParentViewModel.dart'; import 'ConnectGroupChat.dart'; class ViewGroupChat extends ParentViewModel { ConnectGroupChat connection; ViewGroupChat(super.context, this.connection); void loadMessages(String groupId) async { if (!await hasNetwork(() => loadMessages(groupId))) return; showLoading("Opening the chat"); try { final response = await getDataManager().getGroupMessages(IdRequest(id: groupId)); closeLoading(); connection.onMessagesLoaded(getGroupMessageList(response.data)); } catch (e) { handleError(e, () => loadMessages(groupId), () => dismissError(), "Retry"); } } /// The background refresh while the chat is open. Silent either way — a /// missed poll is picked up by the next one. void refresh(String groupId) async { try { final response = await getDataManager().getGroupMessages(IdRequest(id: groupId)); connection.onMessagesLoaded(getGroupMessageList(response.data)); } catch (e) { // Next tick tries again. } } void send(GroupMessageRequest request) async { try { final response = await getDataManager().sendGroupMessage(request); connection.onMessageSent(GroupMessage.fromJson(response.data)); } catch (e) { connection.onSendFailed(request.body); handleError(e, () => send(request), () => dismissError(), "Retry"); } } }