@@ -275,17 +275,19 @@ class DatabaseService {
275275 /// ///////////////////////////
276276
277277 Future <List <MessageModel >> getAllMessagesLocal (
278- String cid, DateTime ? ltDate) async {
278+ String cid, DateTime ? ltDate, int ? limit ) async {
279279 final query = store!
280280 .box <MessageModel >()
281281 .query (MessageModel_ .cid
282282 .equals (cid)
283283 .and (MessageModel_ .createdAt.lessThanDate (ltDate ?? DateTime .now ()))
284+ .and (MessageModel_ .isTempReplied.isNull ())
284285 .and (MessageModel_ .rawStatus
285286 .notEquals (ChatMessageStatus .draft.name) //hide draft messages
286287 .or (MessageModel_ .rawStatus.isNull ())))
287288 .order (MessageModel_ .createdAt, flags: Order .descending)
288- .build ();
289+ .build ()
290+ ..limit = limit ?? 0 ;
289291 final results = await query.findAsync ();
290292 query.close ();
291293 return results;
@@ -295,20 +297,32 @@ class DatabaseService {
295297 [int violationId = 0 ]) async {
296298 final query = store!
297299 .box <MessageModel >()
298- .query (MessageModel_ .id
299- . oneOf (items.map ((element) => element.id! ).toList ()))
300+ .query (
301+ MessageModel_ .id. oneOf (items.map ((element) => element.id).toList ()))
300302 .build ();
301303
302304 final messagesInDb = await query.findAsync ();
303305 query.close ();
304306
305307 var messagesInDbMap = {for (var v in messagesInDb) v.id: v};
306- for (var message in items) {
308+
309+ Map <String , MessageModel > messagesMap = {};
310+
311+ for (var message in items.reversed) {
307312 final messageInDb = messagesInDbMap[message.id];
308313 if (messageInDb != null ) {
309314 assignMessage (message, messageInDb);
310315 }
316+ messagesMap[message.id] = message;
317+
318+ if (message.repliedMessageId != null && message.replyMessage == null ) {
319+ var replyMessage = messagesMap[message.repliedMessageId];
320+ if (replyMessage != null ) {
321+ message.replyMessage = replyMessage;
322+ }
323+ }
311324 }
325+
312326 try {
313327 await store! .box <MessageModel >().putManyAsync (items, mode: PutMode .put);
314328 } on UniqueViolationException catch (e) {
@@ -379,14 +393,27 @@ class DatabaseService {
379393 if (msgInDb != null ) {
380394 assignMessage (item, msgInDb);
381395 }
396+ // TODO delete after check replyMessage functionality
397+ // if (item.replyMessage != null && item.replyMessage!.bid == null) {
398+ // final query = store!
399+ // .box<MessageModel>()
400+ // .query(MessageModel_.id.equals(item.replyMessage!.id))
401+ // .build();
402+ // final replyMsgInDb = await query.findFirstAsync();
403+ // query.close();
404+ // print('updateMessageLocal replyMsgInDb= $replyMsgInDb');
405+ // item.replyMessage = replyMsgInDb?.replyMessage;
406+ // }
382407 }
408+
383409 return await store!
384410 .box <MessageModel >()
385411 .putAndGetAsync (item, mode: PutMode .put);
386412 }
387413
388414 Future <void > assignMessage (MessageModel msg, MessageModel msgInDb) async {
389415 msg.bid = msgInDb.bid;
416+ msg.replyMessage = msgInDb.replyMessage;
390417 if (msg.attachments.isNotEmpty) {
391418 msg.attachments.clear ();
392419 }
0 commit comments