Client/lib/model/chatList/chatProps.dart

64 lines
1.8 KiB
Dart

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<ApiResponse?> 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<SettingsProvider>(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;
}