public Clue Create(ChatConversationModel value) { if (value == null) { throw new ArgumentNullException(nameof(value)); } return(this.Create(EntityType.Discussion, value.Object.Id.UniqueId)); }
public async static Task OnReceiveNewChatMessage(ChatMessage chatMessage) { try { var navigationStack = Shell.Current.Navigation.NavigationStack; if (navigationStack != null && navigationStack.Any()) { var respone = await ApiHelper.Get <ChatConversation>($"api/chat/conversation?conversationid={chatMessage.ConversationId}"); if (respone.IsSuccess) { var chatConversation = respone.Content as ChatConversation; var chatConversationModel = new ChatConversationModel { Id = chatConversation.Id, LatestContent = chatConversation.LatestContent, CreatedOn = chatConversation.CreatedOn, ModifiedOn = chatConversation.ModifiedOn, }; if (chatConversation.User1.Id == UserLogged.Id) { chatConversationModel.Receiver = chatConversation.User2; } else { chatConversationModel.Receiver = chatConversation.User1; } #region Update ChatConversation //Check if conversationPage is opened? var conversationPage = navigationStack.SingleOrDefault(x => x != null && x.GetType() == typeof(ChatConversationPage)); if (conversationPage != null) { var viewModel = conversationPage.BindingContext as ChatConversationViewModel; var conv = viewModel.Data.FirstOrDefault(x => x.Id == chatConversationModel.Id); //Check If Conversation of chatMessage is loaded //if loaded => update view data if (conv != null) { conv.LatestContent = chatConversationModel.LatestContent; conv.ModifiedOn = chatConversationModel.ModifiedOn; } //else add conversation to list else { viewModel.Data.Insert(0, chatConversationModel); } } #endregion #region Update ChatMessage //add message to chatmessagepage if opened var chatMessagePages = navigationStack.Where(x => x != null && x.GetType() == typeof(ChatMessagePage)); if (chatMessagePages != null && chatMessagePages.Any()) { foreach (ChatMessagePage chatMessagePage in chatMessagePages) { var viewModel = chatMessagePage.BindingContext as ChatMessageViewModel; //them vao dau danh sach if ((viewModel.ConversationId == chatConversationModel.Id) || viewModel.Receiver.Id == chatConversationModel.Receiver.Id) { if (viewModel.IsNewConversation) { viewModel.IsNewConversation = false; viewModel.ConversationId = chatConversationModel.Id; await viewModel.Initilize(); } else { viewModel.Data.Insert(0, chatMessage); } } else { //to-do } } } #endregion } } } catch { } }