Exemple #1
0
        private async void OnNewMessageReceived(Message message)
        {
            // var forwardedMessages = message.ForwardedMessages?.ToArray() ?? new Message[] { };
            var attachments = message.Attachments?.ToArray() ?? new Attachment[] { };

            // var replyMessage = message.ReplyMessage;
            // var actionObject = message.Action;

            using (var db = new CacheDbContext())
            {
                if (message.FromId == null || message.PeerId == null)
                {
                    return;
                }
                string readableName;
                var    foundPeerByFromId = await db.VkPeers.FindAsync(message.FromId);

                if (foundPeerByFromId != null)
                {
                    readableName = foundPeerByFromId.ReadableName;
                }
                else
                {
                    var peer = (await VkUtils.GetAndCacheNewPeers(new[] { (long)message.FromId })).First();
                    readableName = message.FromId > 0
                        ? ((User)peer).FirstName + " " + ((User)peer).LastName
                        : ((Group)peer).Name;
                    foundPeerByFromId = await db.VkPeers.FindAsync(message.FromId);
                }
                var foundPeerByPeerId = await db.VkPeers.FindAsync(message.PeerId);

                var indexToUpdate = 0;
                ChatsListItemData itemToUpdate = null;
                for (var i = 0; i < _viewModel.ChatsList.Count; i++)
                {
                    var item = _viewModel.ChatsList[i];
                    if (item.PeerId != message.PeerId)
                    {
                        continue;
                    }
                    indexToUpdate = i;
                    itemToUpdate  = item;
                    (await db.VkPeers.FindAsync(item.PeerId)).LastMessage = message.Text;
                    break;
                }

                _viewModel.ChatsList.RemoveAt(indexToUpdate);
                _viewModel.ChatsList.Insert(0, new ChatsListItemData
                {
                    Avatar     = itemToUpdate?.Avatar,
                    Message    = message.Text,
                    Name       = itemToUpdate?.Name,
                    PeerId     = message.PeerId ?? 0,
                    IsThisUser = itemToUpdate?.IsThisUser ?? false
                });

                await db.VkMessages.AddAsync(new VkMessage
                {
                    ConversationMessageId = message.ConversationMessageId ?? 0,
                    Text        = message.Text,
                    FromId      = message.FromId ?? 0,
                    PeerId      = message.PeerId ?? 0,
                    VkPeer      = foundPeerByPeerId,
                    ReceiveTime = DateTime.Now
                });

                await db.SaveChangesAsync();

                _viewModel.MessageDict[(long)message.PeerId].Add(new ChatsListItemData
                {
                    Name       = readableName,
                    Message    = message.Text,
                    IsThisUser = message.FromId == db.SessionInfo.First().UserId
                });
                foreach (var attachment in attachments)
                {
                    if (attachment.Type == typeof(Photo))
                    {
                        await ViewAttachmentInWindow(attachment);
                    }
                }
            }
        }
Exemple #2
0
 private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
 {
     VkUtils.SendMessage(_viewModel.SelectedPeerId, MessageTextBox.Text);
 }