private void OnChatRemoved(string chatId) { ModifyChatsSafely(() => { var chatSummary = ChatsCollection.FirstOrDefault(x => x.ChatId == chatId); if (chatSummary != null) { ChatsCollection.Remove(chatSummary); } }); _messagesCache.RemoveMessagesAsync(chatId).FireAndForget(); }
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; })); }
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); } }); }
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); }); } }
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); }
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)); }); }
public ChatSummaryViewModel GetChatById(string chatId) { return(ChatsCollection.FirstOrDefault(x => x.ChatId == chatId)); }
private Task UpdateMessagesCacheAsync() { var chatsIds = ChatsCollection.Select(x => x.ChatId).ToList(); return(_messagesCache.PerformFullUpdate(chatsIds)); }