Skip to content

Commit

Permalink
fix show messages after join
Browse files Browse the repository at this point in the history
  • Loading branch information
flowbehappy committed Jul 27, 2023
1 parent 2c25656 commit bdf43cd
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 21 deletions.
7 changes: 6 additions & 1 deletion lib/controller/chat_room.dart
Original file line number Diff line number Diff line change
Expand Up @@ -83,14 +83,19 @@ class ChatRoomController extends GetxController {
return;
}

// Download history messages
final messages = await ChatRoomRepository()
.getNewMessagesByChatRoomUuidRemote(joinRoom, null);
await ChatRoomRepository().addMessageLocal(joinRoom, messages);

var message = Message(
uuid: uuid.v1(),
message: "[New user joined!]",
userName: "New chater",
createTime: DateTime.now().toUtc(),
source: MessageSource.user);

await ChatRoomRepository().addMessage(joinRoom, message);
await ChatRoomRepository().addMessage(joinRoom, [message]);

roomList.add(joinRoom);
currentRoomIndex.value = IntegerWrapper(roomList.length - 1);
Expand Down
43 changes: 25 additions & 18 deletions lib/repository/chat_room.dart
Original file line number Diff line number Diff line change
Expand Up @@ -575,7 +575,8 @@ class ChatRoomRepository {
}

Future<List<Message>> getNewMessagesByChatRoomUuidRemote(
ChatRoom room, DateTime? from) async {
ChatRoom room, DateTime? from,
{int limit = 500}) async {
final conn = ensureConnection(room.connectionToken);
final db =
await getRemoteDb(conn, false /* isHost should always be false */);
Expand All @@ -590,13 +591,13 @@ class ChatRoomRepository {
var sql;
try {
sql =
"SELECT * FROM moyubie.`msg_${room.uuid}` $whereClause ORDER BY $_columnMessageCreateTime ASC;";
"SELECT * FROM moyubie.`msg_${room.uuid}` $whereClause ORDER BY $_columnMessageCreateTime desc limit $limit;";
res = await db.execute(sql);
} catch (e) {
print("catch error: $sql, error: ${e.toString()}");
return Future(() => []);
}
return List<Message>.from(res.rows.map((e) {
var list = List<Message>.from(res.rows.map((e) {
var maps = e.assoc();
return Message(
uuid: maps[_columnMessageUuid]!,
Expand All @@ -609,13 +610,14 @@ class ChatRoomRepository {
ask_ai: maps[_columnAskAI] == "1",
);
}).toList());
return list.reversed.toList();
}

Future<void> addMessage(ChatRoom room, Message message) async {
await addMessageLocal(room, [message]);
Future<void> addMessage(ChatRoom room, List<Message> messages) async {
await addMessageLocal(room, messages);

// Don't wait for remote message finish adding to TiDB.
addMessageRemote(room, message);
addMessageRemote(room, messages);
}

Future<void> addMessageLocal(ChatRoom room, List<Message> messages) async {
Expand All @@ -628,9 +630,10 @@ class ChatRoomRepository {
batch.commit();
}

Future<String?> addMessageRemote(ChatRoom room, Message message) async {
Future<String?> addMessageRemote(
ChatRoom room, List<Message> messages) async {
try {
await _insertMessageRemote(room, message);
await _insertMessageRemote(room, messages);
} catch (e) {
if (e is MySQLServerException) {
if (e.errorCode == 1146) {
Expand All @@ -640,7 +643,7 @@ class ChatRoomRepository {
// Add chat room again.
final newRoom = rooms.first;
await addChatRoom(newRoom);
await _insertMessageRemote(newRoom, message);
await _insertMessageRemote(newRoom, messages);
} else {
// If it is not, then too weird. I give up!
}
Expand All @@ -656,21 +659,25 @@ class ChatRoomRepository {
return null;
}

Future<void> _insertMessageRemote(ChatRoom room, Message message) async {
Future<void> _insertMessageRemote(
ChatRoom room, List<Message> messages) async {
final conn = ensureConnection(room.connectionToken);
final remoteDB = await getRemoteDb(conn, false);
if (remoteDB != null) {
// Must use SQL with param
await remoteDB.execute('''INSERT IGNORE INTO moyubie.`msg_${room.uuid}`
// TODO This mysql client does not support batch?
for (final m in messages) {
await remoteDB.execute('''INSERT IGNORE INTO moyubie.`msg_${room.uuid}`
($_columnMessageUuid, $_columnMessageUserName, $_columnMessageCreateTime, $_columnMessageMessage, $_columnMessageSource, $_columnAskAI) VALUES
(:uuid, :user, :createTime, :message, :source, :askAI)''', {
"uuid": message.uuid,
"user": message.userName,
"createTime": message.createTime.toString(),
"message": message.message,
"source": message.source.name,
"askAI": message.ask_ai ? 1 : 0
});
"uuid": m.uuid,
"user": m.userName,
"createTime": m.createTime.toString(),
"message": m.message,
"source": m.source.name,
"askAI": m.ask_ai ? 1 : 0
});
}
}
}
}
2 changes: 0 additions & 2 deletions lib/repository/message.dart
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,6 @@ class MessageRepository {
ValueChanged<Message> onResponse,
ValueChanged<Message> onError,
ValueChanged<Message> onSuccess) async {
// List<Message> messages =
// await ChatRoomRepository().getMessagesByChatRoomUUid(chatRoomUuid);
_getResponseFromLLM(chatRoomUuid, userName, question, convContext,
onResponse, onError, onSuccess);
}
Expand Down

0 comments on commit bdf43cd

Please sign in to comment.