示例#1
0
        ///// <summary> Обработчик изменения модели внутри логики C++ </summary>
        //public void DoCallback(object sender, DoCallbackArgs e)
        //{
        //if (e.ModelName == "ChatMessages")
        //{
        //    var listIdExisMessage = e.EntityIds.Where(obj => ListModelChatMessage.Any(message => message.Id == obj)).ToArray();

        //    if (listIdExisMessage.Length > 0)
        //    {
        //        Action action = () => RefreshExistingModelChatMessage(listIdExisMessage);

        //        CurrentDispatcher.BeginInvoke(action);
        //    }

        //    var listIdNewMessage = e.EntityIds.Where(obj => !ListModelChatMessage.Any(message => message.Id == obj)).ToArray();

        //    if (listIdNewMessage.Length > 0)
        //    {
        //        Action action = () => AddNewModelChatMessage(listIdNewMessage);

        //        CurrentDispatcher.BeginInvoke(action);
        //    }
        //    OnPropertyChanged("ListModelChatMessage");
        //}

        //if (e.ModelName == "ContactsPresence")
        //{
        //    Action action = () => DataSourceContact.RefreshModelContactStatus(GetAllSendersAndUserFromChat());

        //    CurrentDispatcher.BeginInvoke(action);
        //}

        //if (e.ModelName == "ContactSubscriptions")
        //{
        //    ChangedListModelContactSubscription(e.EntityIds);
        //    //OnPropertyChanged("ListModelConctactChatMembers");
        //}

        //if (e.ModelName == "UserSettingsChanged")
        //{
        //    OnPropertyChanged("FontSize");
        //}

        //RefreshListModelContactStatus();
        //}

        //после удаления и редактирования сообщения на другом устройстве колбеки долбят постоянно
        //при удалении воткнут кастыль, при редактировании нельзя воткнуть т.к. сообщение может быть еще раз отредактированно
        /// <summary> Обновление существующих сообщений </summary>
        private void RefreshExistingModelChatMessage(List <ModelChatMessage> listModelChatMessages)
        {
            var listEditModelChatMessage = new List <ModelChatMessage>();

            var listDeleteModelChatMessage = new List <ModelChatMessage>();

            var listServeredModelChatMessage = new List <ModelChatMessage>();

            foreach (var modelChatMessage in listModelChatMessages)
            {
                //ListModelChatMessage

                //var isRefreshMessage = true;

                if (modelChatMessage.ModelEnumChatMessageTypeObj.Code == 0 && modelChatMessage.Changed)
                {
                    listEditModelChatMessage.Add(modelChatMessage);

                    //isRefreshMessage = false;
                }

                if (modelChatMessage.ModelEnumChatMessageTypeObj.Code == 5)
                {
                    if (_listModelChatMessage.First(obj => obj.Id == modelChatMessage.Id).ModelEnumChatMessageTypeObj.Code != 5)
                    {
                        listDeleteModelChatMessage.Add(modelChatMessage);

                        //isRefreshMessage = false;
                    }
                }

                var oldMessage = ListModelChatMessage.FirstOrDefault(obj => obj.Id == modelChatMessage.Id);

                if (oldMessage.Servered != modelChatMessage.Servered)
                {
                    listServeredModelChatMessage.Add(modelChatMessage);
                }
            }

            if (listEditModelChatMessage.Count > 0)
            {
                OnEventViewModel("EditMessage", listEditModelChatMessage);
            }

            if (listDeleteModelChatMessage.Count > 0)
            {
                OnEventViewModel("DeleteMessage", listDeleteModelChatMessage);
            }

            if (listServeredModelChatMessage.Count > 0)
            {
                OnEventViewModel("ServeredMessage", listServeredModelChatMessage);
            }
        }
示例#2
0
        /// <summary> Получить еще старых сообщений </summary>
        public bool GetMoreOldMessage()
        {
            var lastMessage = ListModelChatMessage.First();

            var listOldMessage = DataSourceChat.GetPagedOldModelChatMessage(lastMessage);

            if (listOldMessage.Count == 0)
            {
                return(false);
            }

            CurrentListOldMessage = listOldMessage;

            ListModelChatMessage.InsertRange(0, CurrentListOldMessage);

            return(true);
        }
示例#3
0
        /// <summary> Метод отправки сообщения </summary>
        private void SendModelMessage()
        {
            CurrentModelChatMessage.Sender   = DataSourceContact.ModelContactIam;
            CurrentModelChatMessage.SendTime = DateTime.Now;
            CurrentModelChatMessage.ModelEnumChatMessageTypeObj = ModelEnumChatMessageType.GetModelEnum(0); // простое тесктовое сообщение
            CurrentModelChatMessage.IdChat = CurrentModelChat.Id;

            if (CurrentModelChat.IsP2P)
            {
                CurrentModelChatMessage.ModelEnumChatMessageSecurityLevelObj = ModelEnumChatMessageSecurityLevel.GetModelEnum(1); //сообщения зашифрованые
            }
            else
            {
                CurrentModelChatMessage.ModelEnumChatMessageSecurityLevelObj = ModelEnumChatMessageSecurityLevel.GetModelEnum(0); //сообщения не зашифрованые
            }

            if (_currentListQuotedMessage.Count != 0)
            {
                if (_currentListQuotedMessage.Count == 1 && JustAnswerCurrentMessage && String.IsNullOrWhiteSpace(_currentListQuotedMessage.First().StringContent))
                {
                    JustAnswerCurrentMessage = false;
                }

                DataSourceChat.QuoteAndSendMessages(CurrentModelChatMessage, _currentListQuotedMessage, JustAnswerCurrentMessage);

                _currentListQuotedMessage.Clear();
                CurrentModelChatMessage = new ModelChatMessage();
            }
            else
            {
                if (DataSourceChat.SendModelChatMessage(CurrentModelChatMessage))
                {
                    OnEventViewModel("SendModelMessage", CurrentModelChatMessage);

                    ListModelChatMessage.Add(CurrentModelChatMessage);

                    CurrentModelChatMessage = new ModelChatMessage();
                }
            }

            if (CurrentModelChat.DraftMessage != null)
            {
                CurrentModelChat.DraftMessage = null;
            }
        }
示例#4
0
        /// <summary> Метод прочтения сообщений </summary>
        public void MarkReadModelMessage()
        {
            if (ListModelChatMessage.Count == 0)
            {
                return;
            }

            if (DataSourceChat.MarkReadModelChatMessage(ListModelChatMessage.Last()))
            {
                foreach (var i in ListModelChatMessage)
                {
                    i.Readed = true;
                }

                if (CurrentModelChat.LastMessage != null)
                {
                    CurrentModelChat.LastMessage.Readed = true;
                }

                //кастыль, т.к.пока СВ сказал что мы всегда помечаем все сообщения как прочитанные
                CurrentModelChat.NewMessagesCount = 0;
            }
        }
示例#5
0
        /// <summary> Добавление новых сообщений </summary>
        private void AddNewModelChatMessage(List <ModelChatMessage> listModelChatMessages)
        {
            //var listNewModelChatMessage = DataSourceChat.GetModelChatMessageById(entityIds).Where(obj => obj.IdChat == CurrentModelChat.Id).ToList();
            //нужно вернуть TSAPOV
            //foreach (var i in listNewModelChatMessage)
            //{
            //    var modelContact = CurrentModelChat.ListModelContact.FirstOrDefault(obj => obj.Id == i.Sender.Id);

            //    if (modelContact != null) i.Sender = modelContact;
            //}

            //var listNewModelChatMessage = DataSourceChat.GetModelChatMessageById(entityIds).Where(obj => obj.IdChat == CurrentModelChat.Id).ToList();

            foreach (var i in listModelChatMessages)
            {
                var modelContact = CurrentModelChat.ListModelContact.FirstOrDefault(obj => obj.DodicallId == i?.Sender?.DodicallId);

                if (modelContact != null)
                {
                    i.Sender = modelContact;
                }
            }

            if (!CurrentModelChat.IsP2P)
            {
                //_dataSourceContact.RefreshModelContactStatus(listNewModelChatMessage.Select(obj => obj?.Sender).ToList());
                //_dataSourceContact.RefreshModelContactStatus(CurrentModelChat.ListModelContact);
                DataSourceContact.RefreshModelContactStatus(GetAllSendersAndUserFromChat());
            }

            ListModelChatMessage.AddRange(listModelChatMessages);

            OnEventViewModel("NewMessage", listModelChatMessages);

            //MarkReadModelMessage(); // СВ сказал что при любой активности в чате все сообщения считаем прочитанными
        }
示例#6
0
 /// <summary> Сортировка сообщений внутри чата </summary>
 private void SortCurrentListModelChatMessage()
 {
     //ListModelChatMessage.Sort((modelMessage1, modelMessage2) => modelMessage1.SendTime.CompareTo(modelMessage2.SendTime));
     ListModelChatMessage.Sort((modelMessage1, modelMessage2) => modelMessage1.Rownum.CompareTo(modelMessage2.Rownum));
 }
示例#7
0
        /// <summary> Обработчик изменения сообщений чата </summary>
        private void OnListModelChatMessageChanged(object sender, List <ModelChatMessage> listModelChatMessages)
        {
            var listSingleModelChatMessages = new List <ModelChatMessage>();

            listSingleModelChatMessages = listModelChatMessages.Where(obj => !listSingleModelChatMessages.Any(message => message.Id == obj.Id)).ToList();

            var listExistMessage = listSingleModelChatMessages.Where(obj => obj.IdChat == CurrentModelChat.Id && ListModelChatMessage.Any(message => message.Id == obj.Id)).ToList();

            if (listExistMessage.Count > 0)
            {
                Action action = () => RefreshExistingModelChatMessage(listExistMessage);

                CurrentDispatcher.BeginInvoke(action);
            }

            var listNewMessage = listSingleModelChatMessages.Where(obj => obj.IdChat == CurrentModelChat.Id && !ListModelChatMessage.Any(message => message.Id == obj.Id)).ToList();

            if (listNewMessage.Count > 0)
            {
                Action action = () => AddNewModelChatMessage(listNewMessage);

                CurrentDispatcher.BeginInvoke(action);
            }

            OnPropertyChanged("ListModelChatMessage");
        }