Example #1
0
        public static List <DtoOutMessageDetails> getMessageDetailsFromMessagesListByIdChatRoom(int idUser, int idChatRoom)
        {
            if (_chatMembersRepository.FindBy(x => x.IdChat == idChatRoom && x.ObjectChat.IsDeleted == false && x.ObjectUser.IsDeleted == false && x.ObjectUser.Id == idUser).FirstOrDefault() == null)
            {
                return(null);
            }
            List <Message>              messages     = getAllMessagesByIdChatRoom(idUser, idChatRoom);
            List <SeenMessage>          seenMessages = new List <SeenMessage>();
            List <DtoOutMessageDetails> result       = new List <DtoOutMessageDetails>();
            List <Message>              messagestmp  = new List <Message>();

            foreach (Message item in messages)
            {
                SeenMessage message = _seenMessagesRepository.FindBy(x => x.IsDeleted == false && x.IdMessage == item.Id).FirstOrDefault();
                if (message == null)
                {
                    messagestmp.Add(item);
                }
                else
                {
                    seenMessages.Add(message);
                }
            }
            foreach (SeenMessage item in seenMessages)
            {
                result.Add(new DtoOutMessageDetails(item));
            }
            foreach (Message item in messagestmp)
            {
                result.Add(new DtoOutMessageDetails(item));
            }

            return(result);
        }
Example #2
0
        public static List <DtoOutMessageDetails> getMessageDetailsFromMessagesList(int idUser)
        {
            List <Message>              messages     = getAllMessages(idUser);
            List <SeenMessage>          seenMessages = new List <SeenMessage>();
            List <DtoOutMessageDetails> result       = new List <DtoOutMessageDetails>();
            List <Message>              messagestmp  = new List <Message>();

            foreach (Message item in messages)
            {
                SeenMessage message = _seenMessagesRepository.FindBy(x => x.IsDeleted == false && x.IdMessage == item.Id).FirstOrDefault();
                if (message == null)
                {
                    messagestmp.Add(item);
                }
                else
                {
                    seenMessages.Add(message);
                }
            }
            foreach (SeenMessage item in seenMessages)
            {
                result.Add(new DtoOutMessageDetails(item));
            }
            foreach (Message item in messagestmp)
            {
                result.Add(new DtoOutMessageDetails(item));
            }
            return(result);
        }
Example #3
0
 public DtoOutMessageDetails(SeenMessage seenMessage)
 {
     this.Id         = seenMessage.ObjectMessage.Id;
     this.IdUser     = seenMessage.ObjectMessage.IdUser;
     this.IdChatRoom = seenMessage.ObjectMessage.IdChatRoom;
     this.Text       = seenMessage.ObjectMessage.Text;
     this.SendTime   = seenMessage.ObjectMessage.SendTime;
     this.File       = seenMessage.ObjectMessage.File;
     this.IdSeenUser = seenMessage.IdUser;
     this.SeenTime   = seenMessage.SeenTime;
 }
Example #4
0
        /// <summary>
        /// Receives the Seen message
        /// </summary>
        /// <param name="message">The message.</param>
        private void Execute(SeenMessage message)
        {
            if (message.ErrorMessage != null)
            {
                Log(LogLevel.Warning, message.ErrorMessage);
                return;
            }

            if (message.ClientDatabaseIds.Count == 1 &&
                message.ClientDatabaseIds.Contains(Self.ClientDatabaseId))
            {
                return;
            }

            for (int index = 0; index < message.ClientDatabaseIds.Count; index++)
            {
                var clientDatabaseId = message.ClientDatabaseIds[index];
                var client           = Repository.Client.GetClientDataBaseInfo(clientDatabaseId);
                if (client != null)
                {
                    var lastSeen = Repository.Client.GetLastSeen(clientDatabaseId);
                    var context  = new MessageContext
                    {
                        Index            = index + 1,
                        ClientDatabaseId = client.DatabaseId,
                        ClientNickname   = client.NickName,
                        ClientLastLogin  = client.LastConnected.ToLocalTime().ToString(Repository.Static.DateTimeFormat),
                        ClientLastSeen   = lastSeen != default(DateTime) && lastSeen > DateTime.MinValue
                                                               ? lastSeen.ToLocalTime().ToString(Repository.Static.DateTimeFormat)
                                                               : client.LastConnected.ToLocalTime().ToString(Repository.Static.DateTimeFormat)
                    };

                    QueryRunner.SendTextMessage(Repository.Settings.Control.Seen.Target,
                                                Repository.Settings.Control.Seen.TargetId > 0 ? Repository.Settings.Control.Seen.TargetId : message.SenderClientId,
                                                Repository.Settings.Control.Seen.TextMessage.ToMessage(context));
                }
            }

            var senderClientEntry = Repository.Client.GetClientInfo(message.SenderClientId);

            Log(Repository.Settings.Control.Seen,
                string.Format("Client '{1}'(id:{2}) used {0} for clients '{3}'.", Repository.Settings.Control.Seen.Command,
                              senderClientEntry.Nickname, senderClientEntry.DatabaseId,
                              string.Join("', '", message.ClientDatabaseIds.ConvertAll(i => i.ToString(CultureInfo.InvariantCulture)).ToArray())));
        }
Example #5
0
        public IDtoOutObjects Seen(DtoInSeenMessage dtoInSeenMessage)
        {
            DtoOutError error = new DtoOutError();

            if (TokenTools.Authentication(dtoInSeenMessage.Token, dtoInSeenMessage.DeviceName))
            {
                SeenMessage seenMessage = new SeenMessage();
                seenMessage.SeenTime = System.DateTime.Now;
                Message message = _messagesRepository.FindBy(x => x.Id == dtoInSeenMessage.IdMessage && x.IsDeleted == false).FirstOrDefault();
                if (message == null)
                {
                    error.Exception = new MessageWithThisIdDoesNotExistsException();
                    error.Message   = "Message with this id {" + dtoInSeenMessage.IdMessage + "} does not exists";
                    return(error);
                }
                if (!ChatRoomTools.getListIdChatRoomFromUser(TokenTools.getUserFromToken(dtoInSeenMessage.Token).Id).Contains(message.IdChatRoom))
                {
                    error.Exception = new MessageIsNotInYourListOfChatRooms();
                    error.Message   = "Message is not in your list of chatRooms";
                    return(error);
                }
                seenMessage.IdMessage = dtoInSeenMessage.IdMessage;
                seenMessage.IdUser    = TokenTools.getUserFromToken(dtoInSeenMessage.Token).Id;
                SeenMessage result = _seenMessagesRepository.Add(seenMessage);

                var               config            = new MapperConfiguration(cfg => { cfg.CreateMap <SeenMessage, DtoOutSeenMessage>(); });
                IMapper           mapper            = config.CreateMapper();
                DtoOutSeenMessage dtoOutSeenMessage = new DtoOutSeenMessage();
                mapper.Map(result, dtoOutSeenMessage);
                return(dtoOutSeenMessage);
            }
            else
            {
                NotAuthenticatedException ex = new NotAuthenticatedException();
                error.Exception = ex;
                return(error);
            }
        }
        /// <summary>
        /// Receives the Seen message
        /// </summary>
        /// <param name="message">The message.</param>
        private void Execute(SeenMessage message)
        {
            if (message.ErrorMessage != null)
            {
                Log(LogLevel.Warning, message.ErrorMessage);
                return;
            }

            if (message.ClientDatabaseIds.Count == 1 &&
                message.ClientDatabaseIds.Contains(Self.ClientDatabaseId))
                return;

            for (int index = 0; index < message.ClientDatabaseIds.Count; index++)
            {
                var clientDatabaseId = message.ClientDatabaseIds[index];
                var client = Repository.Client.GetClientDataBaseInfo(clientDatabaseId);
                if (client != null)
                {
                    var lastSeen = Repository.Client.GetLastSeen(clientDatabaseId);
                    var context = new MessageContext
                                      {
                                          Index = index + 1,
                                          ClientDatabaseId = client.DatabaseId,
                                          ClientNickname = client.NickName,
                                          ClientLastLogin = client.LastConnected.ToLocalTime().ToString(Repository.Static.DateTimeFormat),
                                          ClientLastSeen = lastSeen != default(DateTime) && lastSeen > DateTime.MinValue
                                                               ? lastSeen.ToLocalTime().ToString(Repository.Static.DateTimeFormat)
                                                               : client.LastConnected.ToLocalTime().ToString(Repository.Static.DateTimeFormat)
                                      };

                    QueryRunner.SendTextMessage(Repository.Settings.Control.Seen.Target,
                                                Repository.Settings.Control.Seen.TargetId > 0 ? Repository.Settings.Control.Seen.TargetId : message.SenderClientId,
                                                Repository.Settings.Control.Seen.TextMessage.ToMessage(context));
                }
            }

            var senderClientEntry = Repository.Client.GetClientInfo(message.SenderClientId);
            Log(Repository.Settings.Control.Seen,
                string.Format("Client '{1}'(id:{2}) used {0} for clients '{3}'.", Repository.Settings.Control.Seen.Command,
                              senderClientEntry.Nickname, senderClientEntry.DatabaseId,
                              string.Join("', '", message.ClientDatabaseIds.ConvertAll(i => i.ToString(CultureInfo.InvariantCulture)).ToArray())));
        }