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); } } } }
private void ButtonBase_OnClick(object sender, RoutedEventArgs e) { VkUtils.SendMessage(_viewModel.SelectedPeerId, MessageTextBox.Text); }