public void FetchUnseenMessages(List<string> seenUids, ObservableCollection<MessageEntity> allEmails)
        {
            try
            {
                string message = string.Format("Fetching new message...");
                // Fetch all the current uids seen
                var uids = pop3Client.GetMessageUids();

                // Create a list we can return with all new messages
                List<Message> newMessages = new List<Message>();

                // All the new messages not seen by the POP3 client
                for (int messageIndex = 0; messageIndex < uids.Count; messageIndex++)
                {
                    if (messageIndex > 10)
                        break;

                    string currentUidOnServer = uids[messageIndex];
                    if (!seenUids.Contains(currentUidOnServer))
                    {
                        // We have not seen this message before.
                        // Download it and add this new uid to seen uids

                        // the uids list is in messageNumber order - meaning that the first
                        // uid in the list has messageNumber of 1, and the second has
                        // messageNumber 2. Therefore we can fetch the message using
                        // i + 1 since messageNumber should be in range [1, messageCount]
                        Message unseenMessage = pop3Client.GetMessage(messageIndex + 1);

                        var mailMessage = unseenMessage.ToMailMessage();

                        string messageText = string.Format("Found unread messae with subject: {0}", mailMessage.Subject);
                        LogHelper.WriteMessage(messageText);

                        var newMail = new MessageEntity();
                        newMail.Number = messageIndex;

                        newMail.Body = mailMessage.Body;
                        //TODO: Test data
                        if (messageIndex % 2 == 0)
                        {
                            newMail.Subject = mailMessage.Subject;
                            newMail.OrderDetails = FillOrderDetails(mailMessage.Body);
                        }
                        else
                        {
                            newMail.Subject = mailMessage.Subject.Replace("70567", "80588");
                            newMail.Body = mailMessage.Body.Replace("70567", "80588");
                            newMail.OrderDetails = FillOrderDetails(mailMessage.Body.Replace("70567", "80588"));
                        }

                        newMail.DateSent = unseenMessage.Headers.DateSent;

                        CheckForSimilarity(allEmails, newMail);

                        allEmails.Add(newMail);

                        // Add the message to the new messages
                        newMessages.Add(unseenMessage);

                        // Add the uid to the seen uids, as it has now been seen
                        seenUids.Add(currentUidOnServer);

                        if (File.Exists(EmailServerSettingViewModel.CurrentServerSettings.AlarmFilePath))
                        {
                            mediaPlayer.Open(new Uri(EmailServerSettingViewModel.CurrentServerSettings.AlarmFilePath));
                            mediaPlayer.Play();
                        }
                    }
                }

                foreach (MessageEntity messageEntity in allEmails)
                {
                    messageEntity.RecordCompareTimer.Start();
                }
                // Return our new found messages
            }
            catch (Exception exception)
            {
                LogHelper.WriteError("FetchUnseenMessages",exception);
                throw exception;
            }
        }
 private void CheckForSimilarity(IEnumerable<MessageEntity> allEmails, MessageEntity newMail)
 {
     try
     {
         LogHelper.WriteMessage("Checking messages for similarity...");
         var data = allEmails.Where(x => x.OrderDetails.AccountNumber == newMail.OrderDetails.AccountNumber);
         foreach (MessageEntity messageEntity in data)
         {
             if (messageEntity.Subject.Contains("Test message"))
                 continue;
             LogHelper.WriteMessage(string.Format("Similar account found. Marking accounts as Compared: {0}.", messageEntity.OrderDetails.AccountNumber.ToString()));
             messageEntity.Status = MessageStatus.Comapred;
         }
         data = allEmails.Where(x => x.OrderDetails.AccountNumber != newMail.OrderDetails.AccountNumber);
         foreach (MessageEntity messageEntity in data)
         {
             if (messageEntity.Subject.Contains("Test message"))
                 continue;
             LogHelper.WriteMessage(string.Format("Marking accounts as Different: {0}.", messageEntity.OrderDetails.AccountNumber.ToString()));
             messageEntity.Status = MessageStatus.Different;
         }
     }
     catch (Exception exception)
     {
         LogHelper.WriteError("CheckForSimilarity", exception);
         throw exception;
     }
 }