protected void AddEntry(ChatEntry entry) { ExecuteOnUIThread.Invoke(() => { ChatEntries.Add(entry); if (ChatEntries.Count > MaxEntries) { ChatEntries.RemoveAt(0); } }); }
async void UpdateChatEntriesCommandExcecuted() { var chats = await _syncServer.GetChatsAsync(_walletManager.Wallet.Address); if (chats != null) { for (var i = ChatEntries.Count - 1; i >= 0; i--) { var chat = ChatEntries[i]; var stillExist = false; foreach (var chat2 in chats) { stillExist = (chat.ID == chat2.ID); if (stillExist) { break; } } if (!stillExist) { var updateTopic = $"{AppConstants.FCM.Topics.Update}_{(chat.Type == ChatType.Normal ? chat.ChatPartner.TronAddress : chat.GroupInfo.TronAddress)}"; _fcm.Unsubscribe(updateTopic); await _database.Chats.DeleteByChatID(chat.ID); ChatEntries.RemoveAt(i); } } foreach (var chat in chats) { var alreadyExist = false; if (chat.LastMessage != null) { if (chat.Type == ChatType.Normal) { chat.LastMessage.Decrypt(_walletManager.Wallet, chat.ChatPartner.PublicKey); } else if (chat.Type == ChatType.Group) { var privKey = chat.GroupInfo.IsPublic ? chat.GroupInfo.PrivateKey : _walletManager.Wallet.Decrypt(chat.GroupInfo.PrivateKey, chat.GroupInfo.PublicKey); chat.LastMessage.Decrypt(privKey, chat.LastMessage.Sender.PublicKey); } } var dbLastReadMessageID = await _database.LastReadMessageIDs.GetByChatID(chat.ID); chat.UpdateUnreadMessageCount(dbLastReadMessageID != null ? dbLastReadMessageID.LastReadID : 0); for (var i = 0; i < ChatEntries.Count; i++) { if (chat.ID == ChatEntries[i].ID) { ChatEntries.RemoveAt(i); ChatEntries.Insert(i, chat); alreadyExist = true; } } if (!alreadyExist) { AreChatsEmpty = false; ChatEntries.Insert(0, chat); } var updateTopic = $"{AppConstants.FCM.Topics.Update}_{(chat.Type == ChatType.Normal ? chat.ChatPartner.TronAddress : chat.GroupInfo.TronAddress)}"; if (!_fcm.SubscribedTopics.Contains(updateTopic)) { _fcm.Subscribe(updateTopic); } if (chat.Type == ChatType.Group) { var msgTopic = $"{AppConstants.FCM.Topics.Group}_{chat.GroupInfo.TronAddress}"; if (!_fcm.SubscribedTopics.Contains(msgTopic)) { _fcm.Subscribe(msgTopic); } } } ChatEntries.Sort(false); } }