/// <summary> Метод удаления чата </summary> private void DeleteChat() { if (DataSourceChat.DeleteModelChat(CurrentModelChat)) { CurrentListModelChat.Remove(CurrentModelChat); } }
/// <summary> Получить чат из текушего списка чатов </summary> public ModelChat GetChatFromList(ModelChat modelChat) { var result = new ModelChat(); var modelChatFromList = CurrentListModelChat.FirstOrDefault(obj => obj.Id == modelChat.Id); if (modelChatFromList != null) { result = modelChatFromList; } else { CurrentListModelChat.Add(modelChat); result = modelChat; } return(result); }
///// <summary> Обработчик изменения модели внутри логики C++ </summary> //public void DoCallback(object sender, DoCallbackArgs e) //{ //if (e.ModelName == "Chats") //{ // Action action = () => ChangedListModelChat(e.EntityIds); // CurrentDispatcher.BeginInvoke(action); //} //if (e.ModelName == "ChatMessages") //{ // Action action = () => ChangedListModelChatMessages(e.EntityIds); // CurrentDispatcher.BeginInvoke(action); //} //if (e.ModelName == "ContactsPresence") //{ // CurrentDispatcher.BeginInvoke(new Action(ChangedStatusListModelContact)); //} //} ///// <summary> Обработчик изменения списка чатов внутри логики C++ </summary> //private void ChangedListModelChatMessages(string[] entityIds) //{ // // вот этот код перенести в колбеки в обработку колбека "ChatMessages" // var listChatIds = _dataSourceChat.GetListModelChatByIdMessage(entityIds); // ChangedListModelChat(listChatIds, new List<ModelChat>()); //} /// <summary> Обработчик изменения списка чатов внутри логики C++ </summary> private void ChangedListModelChat(List <ModelChat> listChangedModelChat, List <ModelChat> listDeletedModelChat) { var listModelChatCurrent = CurrentListModelChat.ToList(); // удаление foreach (var i in listDeletedModelChat) { listModelChatCurrent.Remove(listModelChatCurrent.FirstOrDefault(obj => obj.Id == i.Id)); } Action action = () => { // добавление и обновление foreach (var i in listChangedModelChat) { var modelChat = listModelChatCurrent.FirstOrDefault(obj => obj.Id == i.Id); if (modelChat != null) { // изменение (пошел через переприсвоение свойств, а не через удалить и добавить заново, что бы не слетало выделение) modelChat.ListModelContact = ListModelContactSort(i.ListModelContact); modelChat.Active = i.Active; modelChat.LastMessage = i.LastMessage; modelChat.LastModifiedDate = i.LastModifiedDate; modelChat.NewMessagesCount = i.NewMessagesCount; modelChat.Title = i.Title;// LocalizationApp.GetInstance().GetValueByKey(@"ModelChatMessage_Untitled"); modelChat.TotalMessagesCount = i.TotalMessagesCount; } else { listModelChatCurrent.Add(i); } } CurrentListModelChat = new ObservableCollection <ModelChat>(SortCurrentListModelChat(listModelChatCurrent)); DataSourceChat.RefreshModelContactChatStatus(CurrentListModelChat.ToList()); }; CurrentDispatcher.BeginInvoke(action); }
/// <summary> Метод прочтения всех сообщений </summary> private void MarkReadAll() { var listModelChat = CurrentListModelChat.Where(obj => obj.ExistNewMessages).ToArray(); if (!listModelChat.Any()) { return; } foreach (var i in listModelChat) { if (i.LastMessage != null) { DataSourceChat.MarkReadModelChatMessage(i.LastMessage); // кастыль, т.к. из бизнес логики не приходяк колбеки об изменении чатов !!! i.NewMessagesCount = 0; i.LastMessage.Readed = true; } } }
/// <summary> Обработчик изменения статусов контактов </summary> private void OnListModelContactStatusChanged(object sender, List <PackageModelContactStatus> packageModelContactStatuses) { Action action = () => DataSourceChat.RefreshModelContactChatStatus(CurrentListModelChat.ToList()); CurrentDispatcher.BeginInvoke(action); }