public void DoUpdate() { ClearDataGrid(Viewer.DataGridView_Update); if (!TryGetOutlookWrapper(out var ol)) { throw new NullReferenceException("Cant get outlook."); } var extractor = new ResignInfoExtractor(); var emailList = ol.GetItemInCurrentSelectedFolder("Vo Ya Phuong Khanh", "Luu Nhat Hong"); //test //var resignList = new List<Resignation>(); //int notResignCount = 0; //int resignCount = 0; foreach (var mail in emailList) { //null = cant parse info //false = no info table found -> not resign letter var result = extractor.ExtractResignForm(mail.HTMLBody, out var resign, out var errorMess); if (result == ParseResult.Parsed_Info_Error) { //error //notResignCount++; Viewer.AddRecordToUpdateGrid(mail.Subject, mail.ReceivedTime, errorMess, Code.E, GetAttentionColor); continue; } if (result == ParseResult.OK) { //ok //resignList.Add(resign); resign.ReceiveDate = mail.ReceivedTime; var dbResult = Adapter.UpsertRecordIfNewer(resign, out var dbError); switch (dbResult) { case DbResult.Insert: Viewer.AddRecordToUpdateGrid(mail.Subject, mail.ReceivedTime, AddToDbSuccessful, Code.I, InfoColor); break; case DbResult.Update: Viewer.AddRecordToUpdateGrid(mail.Subject, mail.ReceivedTime, UpdateToDbSuccessful, Code.I, InfoColor); break; case DbResult.Older: Viewer.AddRecordToUpdateGrid(mail.Subject, mail.ReceivedTime, AddToDbOlderResignInfo, Code.I, InfoColor); break; case DbResult.Erorr: Viewer.AddRecordToUpdateGrid(mail.Subject, mail.ReceivedTime, AddToDbFail + dbError, Code.E, GetAttentionColor); break; default: throw new InvalidProgramException(); } //resignCount++; } if (result == ParseResult.Not_Resign_Email) { //notResignCount++; Viewer.AddRecordToUpdateGrid(mail.Subject, mail.ReceivedTime, errorMess, Code.I, InfoColor); //not resign email } } }
public void DoUpdate(IEnumerable <MimeMessage> emailList) { var extractor = new ResignInfoExtractor(); _logger.Log($"Parsing - total emails: {emailList.Count()}"); foreach (var email in emailList) { var extractResult = extractor.ExtractResignForm(email.HtmlBody, out var resign, out var errorMess); if (extractResult == ParseResult.Parsed_Info_Error) { //error _logger.Log($"Parsing - {email.Subject}: form error -> {errorMess}"); UpdateResults.Add(MakeRow(email.Subject, email.Date.DateTime.ToString(DateStringFormat), string.Empty, errorMess, Code.E.ToString())); //next email continue; } if (extractResult == ParseResult.OK) { resign.ReceiveDate = email.Date.DateTime; var dbResult = Adapter.UpsertRecordIfNewer(resign, out var dbError); switch (dbResult) { case DbResult.Insert: Logic.IgnoreList.Add(resign); UpdateResults.Add(MakeRow(email.Subject, email.Date.DateTime.ToString(DateStringFormat), resign.ResignDay.ToString(DateStringFormat), dbResult.ToString(), Code.I.ToString())); break; case DbResult.Update: Logic.IgnoreList.Add(resign); UpdateResults.Add(MakeRow(email.Subject, email.Date.DateTime.ToString(DateStringFormat), resign.ResignDay.ToString(DateStringFormat), dbResult.ToString(), Code.I.ToString())); break; case DbResult.Older: UpdateResults.Add(MakeRow(email.Subject, email.Date.DateTime.ToString(DateStringFormat), string.Empty, dbResult.ToString(), Code.I.ToString())); break; case DbResult.Erorr: //never seen this happens UpdateResults.Add(MakeRow(email.Subject, email.Date.DateTime.ToString(DateStringFormat), string.Empty, dbError, Code.E.ToString())); break; default: throw new InvalidProgramException(); } _logger.Log($"Parsing - {email.Subject}: OK -> DB: {dbError}"); } if (extractResult == ParseResult.Not_Resign_Email) { _logger.Log($"Parsing - {email.Subject}: probly not resign email"); UpdateResults.Add(MakeRow(email.Subject, email.Date.DateTime.ToString(DateStringFormat), string.Empty, errorMess, Code.I.ToString())); } } //sort base on error mess UpdateResults.Sort((item1, item2) => string.Compare(item1.Last(), item2.Last(), StringComparison.Ordinal)); }