public void Execute() { IEnumerable <Message> messages = _gmailClient .GetRecentMessages(); using (Database db = new Database()) { foreach (var message in messages) { ForwardedEmail email = null; try { email = new ForwardedEmail(message); db.ForwardedEmails.Add(email); db.SaveChanges(); if (email.Status == Constants.Error) { throw new ParsingFailedException(email.Subject); } IEmailProcessor emailProcessor = _emailProcessorFactory.GetEmailProcessor(email.Operation); emailProcessor.Process(email, db); email.Status = Constants.Processed; db.SaveChanges(); _logger.Information($"{Constants.Processed} - {{GoodleId}} sucessfully", email.GoodleId); } catch (ParsingFailedException ex) { _logger.Error(ex, "An error occued while parsing subject: {subject}", email.Subject); } catch (RecordSkippedException ex) { email.Status = $"{Constants.Skipped}"; _logger.Warning(ex, $"{Constants.Skipped} - {{message}}", ex.Message); _logger.Verbose("{subject}", email.Subject); } catch (Exception ex) { email.Status = $"{Constants.Error} - {ex.Message}"; _logger.Error(ex, "{message} - {subject}", ex.Message, email.Subject); } finally { try { db.SaveChanges(); } catch { _logger.Error("Could not save to database"); } } } } }
public void Process(ForwardedEmail email, Database db) { CalendarEvent calendarEvent = new CalendarEvent(email); AddToGoogle(calendarEvent); AddToDatabse(db, calendarEvent); }
public void Process(ForwardedEmail email, Database db) { CalendarEvent existingCalendarEvent = db.CalendarEvents .OrderByDescending(x => x.CreatedDate) .FirstOrDefault(x => x.Title == email.Title); if (existingCalendarEvent == null) { return; } existingCalendarEvent.RelatedEmails.Add(email); existingCalendarEvent.Status = Constants.Cancelled; db.SaveChanges(); _calendarClient.CancelEvent(existingCalendarEvent.GoodleId); }
public void Process(ForwardedEmail email, Database db) { CalendarEvent existingCalendarEvent = db.CalendarEvents .OrderByDescending(x => x.CreatedDate) .FirstOrDefault(x => x.Title == email.Title); if (existingCalendarEvent == null) // it doesnt exist in google, create new { try { CalendarEvent newCalendarEvent = new CalendarEvent(email); db.CalendarEvents.Add(newCalendarEvent); _calendarClient.AddEvent(newCalendarEvent); } catch (NoDateFoundException) {} } else { try { //TODO: improve this existingCalendarEvent.EventDate = new CalendarEvent(email).EventDate; existingCalendarEvent.Status = Constants.Active; _calendarClient.ReScheduleEvent(existingCalendarEvent.GoodleId, existingCalendarEvent.EventDate); } catch (NoDateFoundException) { existingCalendarEvent.Status = Constants.Cancelled; _calendarClient.CancelEvent(existingCalendarEvent.GoodleId); } existingCalendarEvent.RelatedEmails.Add(email); } db.SaveChanges(); }
public void Process(ForwardedEmail email, Database db) { throw new RecordSkippedException(email.Operation); }