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; } }