BinaryStudio.ClientManager.DomainModel.Input.MailMessagePersister.Convert C# (CSharp) Method

Convert() public method

Converts Input.MailMessage to Entities.MailMessage. If sender or receivers isn't exist then they will be added to repository If email forwarded then sender will be taken from body MailMessageParserThunderbird
public Convert ( MailMessage mailMessage ) : Entities.MailMessage
mailMessage MailMessage Input.MailMessage type of message
return Entities.MailMessage
        public Entities.MailMessage Convert(MailMessage mailMessage)
        {
            // If mail message is forwarded then Receiver will be person who forward mail and Sender taken from body
            if (isForwardedMailMessage(mailMessage))
            {
                var parser = mailMessageParserFactory.GetMailMessageParser(mailMessage.UserAgent);
                mailMessage.Subject = parser.GetSubject(mailMessage.Subject);
                mailMessage.Receivers = new List<MailAddress>{mailMessage.Sender};
                mailMessage.Sender = parser.GetSender(mailMessage);
                mailMessage.Body = parser.GetBody(mailMessage);
            }

            var returnMessage = new Entities.MailMessage
            {
                Body = mailMessage.Body,
                Date = mailMessage.Date,
                Subject = mailMessage.Subject,
                Receivers = new List<Person>()
            };

            //find a Sender in Repository
            var sender = repository.Query<Person>().FirstOrDefault(x => x.Email == mailMessage.Sender.Address);

            returnMessage.Sender = sender ?? AddNewPersonToRepository(mailMessage.Sender, mailMessage.Date);

            //find Receivers in repository
            foreach (var receiver in mailMessage.Receivers)
            {
                var currentReceiver = repository.Query<Person>().FirstOrDefault(x => x.Email == receiver.Address);

                returnMessage.Receivers.Add(currentReceiver ?? AddNewPersonToRepository(receiver, mailMessage.Date));
            }

            return returnMessage;
        }