Beispiel #1
0
        private async void OnChatMessage(LongPollChatMessage message)
        {
            if (Messages == null)
            {
                return;
            }

            if (message.Message?.MessageContent == null)
            {
                return;
            }

            bool isChat = Dialog?.Message.ChatId != 0;

            if ((!isChat && (message.Message.MessageContent.UserId == Dialog?.User.Profile.Id)) ||
                (isChat && Dialog?.Message.ChatId == message.Message.MessageContent.ChatId))
            {
                var id = message.Message.MessageContent.Id;
                if (message.Message.MessageContent.IsOut)
                {
                    var existedMessage = Messages.FirstOrDefault(m => m.MessageContent.Id == id);
                    if (existedMessage != null)
                    {
                        return;
                    }
                    else if (_lastSentMessages.Count > 0)
                    {
                        return;
                    }
                }

                _hasUnreadMessages = true;

                message.Message.IsNew = true;
                Messages.Add(message.Message);

                //if there are attachments in message, request message from server with full data
                if (!message.Message.MessageContent.Attachments.IsNullOrEmpty() || message.Message.MessageContent.Geo != null || message.Message.MessageContent.ForwardMessages != null)
                {
                    try
                    {
                        var fullMessage = await ServiceLocator.Vkontakte.Messages.GetById(id);

                        if (fullMessage != null)
                        {
                            var m = Messages.FirstOrDefault(x => x.MessageContent.Id == id);
                            m.MessageContent = fullMessage;
                            Messages[Messages.IndexOf(m)] = m;
                            Debug.WriteLine("Updated");
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Error(ex, "Unable to load full message by id " + id);
                    }
                }
            }
        }
Beispiel #2
0
        private async void OnChatMessage(LongPollChatMessage message)
        {
            if (Dialogs == null)
            {
                Dialogs = new IncrementalLoadingCollection <Dialog>();
            }

            bool isChat = message.Message.MessageContent.ChatId != 0;

            var dialog = Dialogs?.FirstOrDefault(d => !isChat ? d.User?.Profile.Id == message.Message.MessageContent.UserId : d.Message.ChatId == message.Message.MessageContent.ChatId);

            if (dialog != null)
            {
                bool isSelected = _selectedDialog == dialog;
                dialog.Message = message.Message.MessageContent;
                if (isChat)
                {
                    dialog.User = new User(message.Message.Sender);
                }

                var dialogIndex = Dialogs.IndexOf(dialog);
                if (dialogIndex != 0)
                {
                    Dialogs.RemoveAt(dialogIndex);
                    Dialogs.Insert(0, dialog);
                    //Dialogs.Move(dialogIndex, 0); //if it's not top dialog in the list, move it
                }
                else
                {
                    Dialogs[dialogIndex] = dialog; //notifying UI to update whole model (trigger templateselector)
                }
                if (isSelected)
                {
                    SelectedDialog = dialog;
                }
            }
            else
            {
                dialog = new Dialog(message.Message.MessageContent);

                var user = await ServiceLocator.UserService.GetById(message.Message.MessageContent.UserId);

                if (user != null)
                {
                    dialog.User = new User(user);

                    Dialogs.Insert(0, dialog);
                }
            }

            dialog.UnreadCount++;
        }