Пример #1
0
 /// <summary> Метод удаления чата </summary>
 private void DeleteChat()
 {
     if (DataSourceChat.DeleteModelChat(CurrentModelChat))
     {
         CurrentListModelChat.Remove(CurrentModelChat);
     }
 }
Пример #2
0
        /// <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);
        }
Пример #3
0
        ///// <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);
        }
Пример #4
0
        /// <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;
                }
            }
        }
Пример #5
0
        /// <summary> Обработчик изменения статусов контактов </summary>
        private void OnListModelContactStatusChanged(object sender, List <PackageModelContactStatus> packageModelContactStatuses)
        {
            Action action = () => DataSourceChat.RefreshModelContactChatStatus(CurrentListModelChat.ToList());

            CurrentDispatcher.BeginInvoke(action);
        }