Exemplo n.º 1
0
        async Task CargarMensajes(int skipIndex, int takeIndex, bool isRefreshing = false)
        {
            if (!NoHayNadaMasParaCargar)
            {
                ChatsMensajesDTO chatMensaje = new ChatsMensajesDTO
                {
                    CodigoChatEnvia    = Chat.Consecutivo,
                    CodigoChatRecibe   = Chat.CodigoChatRecibe,
                    SkipIndexBase      = skipIndex,
                    TakeIndexBase      = takeIndex,
                    ZonaHorariaGMTBase = _dateTimeHelper.DifferenceBetweenGMTAndLocalTimeZone
                };

                if (isRefreshing && Mensajes != null)
                {
                    chatMensaje.FechaFiltroBase = Mensajes.Max(x => x.ChatMensaje.FechaMensaje);
                }

                if (IsNotConnected)
                {
                    return;
                }
                List <ChatsMensajesDTO> listaMensajes = await _chatsServices.ListarChatsMensajes(chatMensaje);

                if (listaMensajes != null)
                {
                    if (listaMensajes.Count > 0)
                    {
                        using (await _lockeable.LockAsync())
                        {
                            if (isRefreshing)
                            {
                                if (Mensajes == null)
                                {
                                    Mensajes = new ObservableRangeCollection <ChatMensajesModel>(ChatMensajesModel.CrearListaMensajes(listaMensajes, Chat.CodigoChatRecibe));
                                }
                                else
                                {
                                    List <ChatMensajesModel> listaMensajesParaInsertar = ChatMensajesModel.CrearListaMensajes(listaMensajes, Chat.CodigoChatRecibe);

                                    foreach (ChatMensajesModel mensaje in listaMensajesParaInsertar)
                                    {
                                        Mensajes.Insert(0, mensaje);
                                    }
                                }
                            }
                            else
                            {
                                listaMensajes.Reverse();

                                if (Mensajes == null)
                                {
                                    Mensajes = new ObservableRangeCollection <ChatMensajesModel>(ChatMensajesModel.CrearListaMensajes(listaMensajes, Chat.CodigoChatRecibe));
                                }
                                else
                                {
                                    Mensajes.AddRange(ChatMensajesModel.CrearListaMensajes(listaMensajes, Chat.CodigoChatRecibe));
                                }
                            }
                        }
                    }
                    else
                    {
                        NoHayNadaMasParaCargar = listaMensajes.Count <= 0;
                    }
                }
            }
        }