64 lines
1.8 KiB
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;
|
|
}
|