示例#1
0
 protected void AddEntry(ChatEntry entry)
 {
     ExecuteOnUIThread.Invoke(() =>
     {
         ChatEntries.Add(entry);
         if (ChatEntries.Count > MaxEntries)
         {
             ChatEntries.RemoveAt(0);
         }
     });
 }
示例#2
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);
            }
        }