rustdesk/lib/models/chat_model.dart

73 lines
1.9 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'dart:convert';
import 'package:dash_chat/dash_chat.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hbb/pages/chat_page.dart';
import 'model.dart';
import 'native_model.dart';
class ChatModel with ChangeNotifier {
// -1作为客户端模式的id客户端模式下此id唯一
// 其它正整数的id来自被控服务器模式下的其他客户端的id每个客户端有不同的id
// 注意 此id和peer_id不同服务端模式下的id等同于conn的顺序累加id
static final clientModeID = -1;
final Map<int, List<ChatMessage>> _messages = Map()..[clientModeID] = [];
final ChatUser me = ChatUser(
uid:"",
name: "me",
customProperties: Map()..["id"] = clientModeID
);
var _currentID = clientModeID;
get messages => _messages;
get currentID => _currentID;
receive(int id, String text) {
if (text.isEmpty) return;
// first message show overlay icon
if (iconOverlayEntry == null) {
showChatIconOverlay();
}
if(!_messages.containsKey(id)){
_messages[id] = [];
}
// TODO peer info
_messages[id]?.add(ChatMessage(
text: text,
user: ChatUser(
name: FFI.ffiModel.pi.username,
uid: FFI.getId(),
)));
_currentID = id;
notifyListeners();
}
send(ChatMessage message) {
if (message.text != null && message.text!.isNotEmpty) {
_messages[_currentID]?.add(message);
if (_currentID == clientModeID) {
PlatformFFI.setByName("chat_client_mode", message.text!);
} else {
final msg = Map()
..["id"] = _currentID
..["text"] = message.text!;
PlatformFFI.setByName("chat_server_mode", jsonEncode(msg));
}
}
notifyListeners();
}
release() {
hideChatIconOverlay();
hideChatWindowOverlay();
_messages.forEach((key, value) => value.clear());
_messages.clear();
notifyListeners();
}
}