import 'package:flutter/cupertino.dart'; import 'package:provider/provider.dart'; import '../../api/apiResponse.dart'; import '../../api/marianumcloud/talk/chat/getChatCache.dart'; import '../../api/marianumcloud/talk/chat/getChatResponse.dart'; import '../../storage/base/settingsProvider.dart'; import '../dataHolder.dart'; class ChatProps extends DataHolder { String _queryToken = ''; DateTime _lastTokenSet = DateTime.now(); int? _referenceMessageId; GetChatResponse? _getChatResponse; GetChatResponse get getChatResponse => _getChatResponse!; int? get getReferenceMessageId => _referenceMessageId; set unsafeInternalSetReferenceMessageId(int? reference) => _referenceMessageId = reference; @override List properties() => [_getChatResponse]; @override void run() { notifyListeners(); if(_queryToken.isEmpty) return; var requestStart = DateTime.now(); GetChatCache( chatToken: _queryToken, onUpdate: (GetChatResponse data) { if(_lastTokenSet.isAfter(requestStart)) return; // Another request was faster _getChatResponse = data; notifyListeners(); } ); } void setReferenceMessageId(int? messageId, BuildContext context, String sendToToken) { Future.microtask(() { _referenceMessageId = messageId; notifyListeners(); var settings = Provider.of(context, listen: false); if(messageId != null) { settings.val(write: true).talkSettings.draftReplies[sendToToken] = messageId; } else { settings.val(write: true).talkSettings.draftReplies.removeWhere((key, value) => key == sendToToken); } }); } void setQueryToken(String token) { _queryToken = token; _getChatResponse = null; _lastTokenSet = DateTime.now(); run(); } String currentToken() => _queryToken; }