Example #1
0
        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);
 }