Exemple #1
0
        private void OnChatRemoved(string chatId)
        {
            ModifyChatsSafely(() =>
            {
                var chatSummary = ChatsCollection.FirstOrDefault(x => x.ChatId == chatId);
                if (chatSummary != null)
                {
                    ChatsCollection.Remove(chatSummary);
                }
            });

            _messagesCache.RemoveMessagesAsync(chatId).FireAndForget();
        }
Exemple #2
0
 private bool TryAddChat(ChatSummaryModel chatSummary)
 {
     return(ModifyChatsSafely(() =>
     {
         if (chatSummary == null || ChatsCollection.Any(x => x.ChatId == chatSummary.Id))
         {
             return false;
         }
         var viewModel = _viewModelFactoryService.ResolveViewModel <ChatSummaryViewModel, ChatSummaryModel>(chatSummary);
         ChatsCollection.Insert(0, viewModel);
         ChatsCollection.Sort((x, y) => y.LastUpdateDate.CompareTo(x.LastUpdateDate));
         return true;
     }));
 }
Exemple #3
0
        private void OnChatUpdated(ChatSummaryModel updatedChatSummary)
        {
            if (updatedChatSummary == null)
            {
                return;
            }

            ModifyChatsSafely(() =>
            {
                var chatSummary = ChatsCollection.FirstOrDefault(x => x.ChatId == updatedChatSummary.Id);
                if (chatSummary != null)
                {
                    chatSummary.UpdateModel(updatedChatSummary);
                }
            });
        }
Exemple #4
0
        private async Task UpdateChatsListWithLoader(Task <IList <ChatSummaryModel> > loader)
        {
            var result = await loader.ConfigureAwait(false);

            if (result != null)
            {
                var orderedChats = result
                                   .Select(_viewModelFactoryService.ResolveViewModel <ChatSummaryViewModel, ChatSummaryModel>)
                                   .OrderByDescending(x => x.LastUpdateDate)
                                   .ToList();

                ModifyChatsSafely(() =>
                {
                    ChatsCollection.ReplaceRange(orderedChats);
                });
            }
        }
Exemple #5
0
        public async Task <ChatSummaryViewModel> FindOrCreateDirectChatAsync(string memberId)
        {
            var directChatWithMember = ChatsCollection.FirstOrDefault(x =>
                                                                      x.Parameter.Type == ChannelType.Direct &&
                                                                      x.Parameter.DirectMember.Id == memberId);

            if (directChatWithMember != null)
            {
                return(directChatWithMember);
            }

            var directChatModel = await _chatService.CreateDirectChatAsync(memberId).ConfigureAwait(false);

            if (directChatModel == null)
            {
                return(null);
            }

            var directChatViewModel = _viewModelFactoryService.ResolveViewModel <ChatSummaryViewModel, ChatSummaryModel>(directChatModel);

            return(directChatViewModel);
        }
Exemple #6
0
        private void FindChatForUpdateLastMessage(ChatMessageModel messageModel)
        {
            ModifyChatsSafely(() =>
            {
                var chatViewModel = GetChatById(messageModel.ChannelId);

                if (chatViewModel != null)
                {
                    chatViewModel.UpdateLastMessage(messageModel);

                    if (messageModel.IsMine)
                    {
                        chatViewModel.UnreadMessageCount = 0;
                    }
                    else
                    {
                        chatViewModel.UnreadMessageCount++;
                    }
                }
                ChatsCollection.Sort((x, y) => y.LastUpdateDate.CompareTo(x.LastUpdateDate));
            });
        }
Exemple #7
0
 public ChatSummaryViewModel GetChatById(string chatId)
 {
     return(ChatsCollection.FirstOrDefault(x => x.ChatId == chatId));
 }
Exemple #8
0
        private Task UpdateMessagesCacheAsync()
        {
            var chatsIds = ChatsCollection.Select(x => x.ChatId).ToList();

            return(_messagesCache.PerformFullUpdate(chatsIds));
        }