示例#1
0
 //[FieldSetter(Field.Reminder)]
 private void SetReminder(Event googleItem, Outlook.AppointmentItem outlookItem, Target target)
 {
     if (target == Target.Google)
     {
         if (outlookItem.ReminderSet)
         {
             if (outlookItem.ReminderOverrideDefault)
             {
                 var reminder = new EventReminder
                 {
                     Minutes = outlookItem.ReminderMinutesBeforeStart,
                     Method  = "popup"
                 };
                 googleItem.Reminders.Overrides = new[] { reminder };
             }
             else
             {
                 googleItem.Reminders.Overrides = null;
             }
             googleItem.Reminders.UseDefault = !outlookItem.ReminderOverrideDefault;
         }
         else
         {
             googleItem.Reminders = null;
         }
     }
     else if (googleItem.Reminders == null)
     {
         ((Outlook.AppointmentItem)outlookItem).ReminderSet = false;
     }
     else
     {
         if (googleItem.Reminders.UseDefault.GetValueOrDefault())
         {
             if (this._defaultReminders.Any())
             {
                 ((Outlook.AppointmentItem)outlookItem).ReminderSet                = true;
                 ((Outlook.AppointmentItem)outlookItem).ReminderOverrideDefault    = true;
                 ((Outlook.AppointmentItem)outlookItem).ReminderMinutesBeforeStart = this._defaultReminders.First().Minutes.GetValueOrDefault();
             }
             else
             {
                 ((Outlook.AppointmentItem)outlookItem).ReminderSet = false;
             }
         }
         else
         {
             if (googleItem.Reminders.Overrides != null && googleItem.Reminders.Overrides.Count > 0)
             {
                 ((Outlook.AppointmentItem)outlookItem).ReminderSet                = true;
                 ((Outlook.AppointmentItem)outlookItem).ReminderOverrideDefault    = true;
                 ((Outlook.AppointmentItem)outlookItem).ReminderMinutesBeforeStart = googleItem.Reminders.Overrides.First().Minutes.GetValueOrDefault();
             }
             else
             {
                 ((Outlook.AppointmentItem)outlookItem).ReminderSet = false;
             }
         }
     }
 }
示例#2
0
        public JsonResult GetEvents()
        {
            List <EventReminder> events = new List <EventReminder>();

            using (SqlConnection con = new SqlConnection(Connectionstring))
            {
                string userid = Session["UserID"].ToString();
                con.Open();
                string        query     = "Select * from tblEvents where UserID=" + userid;
                SqlCommand    cmd       = new SqlCommand(query, con);
                SqlDataReader sdr       = cmd.ExecuteReader();
                DataTable     datatable = new DataTable();
                datatable.Load(sdr);
                con.Close();

                foreach (DataRow row in datatable.Rows)
                {
                    EventReminder listevents = new EventReminder();
                    listevents.EventID     = Convert.ToInt32(row.ItemArray[0]);
                    listevents.UserID      = Convert.ToInt32(row.ItemArray[1]);
                    listevents.Subject     = row.ItemArray[2].ToString();
                    listevents.Description = row.ItemArray[3].ToString();
                    listevents.StartDate   = row.ItemArray[4].ToString();
                    listevents.EndDate     = row.ItemArray[5].ToString();
                    events.Add(listevents);
                }
            }
            return(new JsonResult {
                Data = events, JsonRequestBehavior = JsonRequestBehavior.AllowGet
            });
        }
示例#3
0
        public ActionResult Create(EventReminder events)
        {
            string userid = Session["UserID"].ToString();

            eventRepository.AddEditEvent(events, userid);
            return(RedirectToAction("Calenderlist", "Account"));
        }
示例#4
0
        public void ReadXml(XmlReader reader)
        {
            if ((reader.MoveToContent() == XmlNodeType.Element) && (reader.LocalName == "Calendar"))
            {
                Name    = reader["Name"];
                ID      = reader["Url"];
                Enabled = Boolean.Parse(reader["Enabled"]);
                Color   = Color.FromArgb(Int32.Parse(reader["Color"]));

                if (reader.ReadToDescendant("Event"))
                {
                    while ((reader.MoveToContent() == XmlNodeType.Element) && (reader.LocalName == "Event"))
                    {
                        var gvent = new Gvent(this);
                        gvent.ReadXml(reader);
                        Add(gvent);
                    }
                }

                this.DefaultReminders = new List <EventReminder>();
                while ((reader.MoveToContent() == XmlNodeType.Element) && (reader.LocalName == "DefaultReminder"))
                {
                    int           minutes;
                    EventReminder defaultReminder = new EventReminder()
                    {
                        Method  = reader["Method"],
                        Minutes = (Int32.TryParse(reader["Minutes"], out minutes) ? minutes : (int?)null)
                    };
                    this.DefaultReminders.Add(defaultReminder);
                    reader.Read();
                }

                reader.Read();
            }
        }
示例#5
0
        public ActionResult Edit(EventReminder events)
        {
            string userid = Session["UserID"].ToString();

            eventRepository.AddEditEvent(events, userid);
            ViewBag.pageload = "edit";

            return(RedirectToAction("ListEvents", "Account"));
        }
示例#6
0
        public GVentMinder(EventReminder reminder)
        {
            if (reminder == null)
            {
                throw new ArgumentNullException("entry");
            }

            _HowEarly = TimeSpan.FromMinutes((double)reminder.Minutes);
        }
示例#7
0
        public bool Update(EventReminder reminder)
        {
            if (_HowEarly != TimeSpan.FromMinutes((double)reminder.Minutes))
            {
                return(false);
            }

            Processed = true;
            return(true);
        }
示例#8
0
        public string AddEvent(DateTime startDate, DateTime endDate, string summary, string description)
        {
            var service = GetCalendarService();

            Event ev = new Event()
            {
                Summary     = summary,
                Location    = location,
                Description = description,
                Start       = new EventDateTime()
                {
                    DateTime = startDate
                },
                End = new EventDateTime()
                {
                    DateTime = endDate
                },
            };

            ev.Transparency = "transparent";

            EventReminder remPopup = new EventReminder();

            remPopup.Method  = "popup";
            remPopup.Minutes = 15;

            EventReminder remMail = new EventReminder();

            remMail.Method  = "email";
            remMail.Minutes = 15;

            Event.RemindersData rd = new Event.RemindersData();
            rd.UseDefault = false;

            IList <EventReminder> list = new List <EventReminder>();

            list.Add(remPopup);
            list.Add(remMail);

            rd.Overrides = list;
            ev.Reminders = rd;

            var   calendarId     = "primary";
            Event recurringEvent = service.Events.Insert(ev, calendarId).Execute();

            string eidWord = "eid=";
            var    index   = recurringEvent.HtmlLink.IndexOf(eidWord, 0);
            var    eid     = recurringEvent.HtmlLink.Substring(index + eidWord.Length, recurringEvent.HtmlLink.Length - (index + eidWord.Length));

            //var calendarEditLink = string.Format(@"https://calendar.google.com/calendar/u/2/r/eventedit/{0}?sf=true", eid);
            return(eid);
        }
示例#9
0
        /// <summary>
        /// Sets the goolge reminder.
        /// </summary>
        /// <param name="eventItem">The event item.</param>
        private void SetGoogleReminder(Event eventItem)
        {
            eventItem.Reminders.UseDefault = false;
            eventItem.Reminders.Overrides  = eventItem.Reminders.Overrides ?? new List <EventReminder>();

            EventReminder reminder = eventItem.Reminders.Overrides.FirstOrDefault() ?? new EventReminder();

            reminder.Minutes = Math.Min(Minutes, MaxGoogleMinutes);
            reminder.Method  = ReminderMethod.ToString().ToLowerInvariant();

            eventItem.Reminders.Overrides.Clear();
            eventItem.Reminders.Overrides.Add(reminder);
        }
        public static List <EventReminder> GetReminderList()
        {
            var reminder = new EventReminder
            {
                Method  = "popup",
                Minutes = 30
            };
            var reminderList = new List <EventReminder> {
                reminder
            };

            return(reminderList);
        }
示例#11
0
 public ActionResult Edit(EventReminder events)
 {
     using (SqlConnection con = new SqlConnection(Connectionstring))
     {
         string userid = Session["UserID"].ToString();
         con.Open();
         string qry = string.Empty;
         qry = "Update tblEvents set UserID = '" + userid + "', Subject = '" + events.Subject + "', Description = '" + events.Description +
               "', StartDate= '" + events.StartDate + "',EndDate= '" + events.EndDate + "' where EventID=" + events.EventID;
         this.AddUpdateDeleteSQL(qry);
     }
     return(RedirectToAction("ListEvents", "Account"));
 }
示例#12
0
 private void CancelCommandExecuted()
 {
     _eventDataUnit.RevertChanges();
     if (_isEditMode)
     {
         EventReminder.Refresh();
     }
     else
     {
         EventReminder.AssignedToUser = null;
         EventReminder = null;
     }
 }
示例#13
0
        public JsonResult DeleteEvent(int eventID)
        {
            var status = false;

            using (SqlConnection con = new SqlConnection(Connectionstring))
            {
                con.Open();
                EventReminder events = new EventReminder();
                string        qry    = "delete from tblEvents where EventID=" + eventID;
                eventRepository.AddUpdateDeleteSQL(qry);
                status = true;
            }
            return(new JsonResult {
                Data = new { status = status }
            });
        }
示例#14
0
        public ActionResult Create(EventReminder events)
        {
            using (SqlConnection con = new SqlConnection(Connectionstring))
            {
                string userid = Session["UserID"].ToString();
                con.Open();
                string qry       = string.Empty;
                var    startDate = Convert.ToDateTime(events.StartDate);
                var    endDate   = Convert.ToDateTime(events.EndDate);
                qry = "insert into tblEvents(UserID,Subject,Description,StartDate,EndDate)" +
                      " values('" + userid + "','" + events.Subject + "','" + events.Description + "','" + startDate + "','" + endDate + "')";

                this.AddUpdateDeleteSQL(qry);
            }
            return(RedirectToAction("Calenderlist", "Account"));
        }
示例#15
0
        public void AddEditEvent(EventReminder events, string userid)
        {
            string qry       = string.Empty;
            var    startDate = Convert.ToDateTime(events.StartDate);
            var    endDate   = Convert.ToDateTime(events.EndDate);

            if (events.EventID > 0)
            {
                qry = "Update tblEvents set Subject = '" + events.Subject + "', Description = '" + events.Description +
                      "', StartDate= '" + startDate + "',EndDate= '" + endDate + "' where EventID= '" + events.EventID + "' and UserID= " + userid;
            }
            else
            {
                qry = "insert into tblEvents(UserID,Subject,Description,StartDate,EndDate)" +
                      " values('" + userid + "','" + events.Subject + "','" + events.Description + "','" + startDate + "','" + endDate + "')";
            }
            this.AddUpdateDeleteSQL(qry);
        }
示例#16
0
        public JsonResult SaveEvent(EventReminder events)
        {
            var status = false;

            using (SqlConnection con = new SqlConnection(Connectionstring))
            {
                string userid = Session["UserID"].ToString();
                con.Open();
                string qry = string.Empty;
                qry = "Update tblEvents set Subject = '" + events.Subject + "', Description = '" + events.Description +
                      "', StartDate= '" + events.StartDate + "',EndDate= '" + events.EndDate + "' where EventID= '" + events.EventID + "' and UserID= " + userid;
                eventRepository.AddUpdateDeleteSQL(qry);
                status = true;
            }
            return(new JsonResult {
                Data = new { status = status }
            });
        }
        public void AddEventToCalendar(List <Lesson> lessons, int reminderMinutes = 15)
        {
            try
            {
                if (lessons != null && lessons.Count > 0)
                {
                    foreach (var lesson in lessons)
                    {
                        var           ev = new Event();
                        var           startLessonTime = DateTime.Parse(lesson.Date + " " + lesson.StartTime);
                        var           endLessonTime   = DateTime.Parse(lesson.Date + " " + lesson.EndTime);
                        EventDateTime start           = new EventDateTime {
                            DateTime = startLessonTime
                        };
                        EventDateTime end = new EventDateTime {
                            DateTime = endLessonTime
                        };
                        var reminder1 = new EventReminder {
                            Method = "popup", Minutes = reminderMinutes
                        };

                        var eventReminderData = new Event.RemindersData {
                            UseDefault = false, Overrides = new[] { reminder1 }
                        };

                        ev.Start       = start;
                        ev.End         = end;
                        ev.Summary     = lesson.LessonName + " " + lesson.ClassRoom;
                        ev.Description = lesson.TeacherName + " " + lesson.Group;
                        ev.Reminders   = eventReminderData;



                        var   calendarId     = "primary";
                        Event recurringEvent = _service.Events.Insert(ev, calendarId).Execute();
                    }
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                throw;
            }
        }
示例#18
0
        public void EventInsert(string name, DateTime start)
        {
            var e = new Event();

            e.Summary        = name + "DDD event1";
            e.Description    = "My DDD1";
            e.Start          = new EventDateTime();
            e.Start.DateTime = new DateTime(2020, 06, 14, 11, 30, 00);
            e.End            = new EventDateTime();
            e.End.DateTime   = new DateTime(2020, 06, 14, 11, 45, 00);
            var reminder = new EventReminder();

            reminder.Method        = "popup";
            reminder.Minutes       = 30;
            e.Reminders            = new Event.RemindersData();
            e.Reminders.UseDefault = true;
            //e.Reminders.Overrides =new List<EventReminder> { reminder };
            _service.Events.Insert(e, "primary").Execute();
        }
示例#19
0
        /// <summary>
        /// Создает и добавляет новое событие в календарь
        /// </summary>
        /// <param name="title"></param>
        /// <param name="location"></param>
        /// <param name="description"></param>
        /// <param name="startdate"></param>
        /// <param name="enddate"></param>
        /// <returns></returns>
        public static bool CreateNewEvent(DateTime startdate, DateTime enddate, string title, bool remind, string location = "", string description = "")
        {
            if (startdate == null || enddate == null)
                throw new ArgumentNullException("Аргументы startdate и enddate не могут быть null");
            if (startdate < DateTime.Today || enddate < DateTime.Today || enddate < startdate)
                throw new ArgumentOutOfRangeException("Даты события не могут быть меньше сегодняшней. Дата окончания события не может быть меньше даты начала события");
            if (String.IsNullOrEmpty(title))
                throw new ArgumentException("Аргумент title не может быть пустым или null");

            Event eventdata = new Event();
            eventdata.Summary = title;
            eventdata.Location = location;
            eventdata.Description = description;

            EventDateTime start = new EventDateTime();
            start.DateTime = startdate;
            eventdata.Start = start;
            EventDateTime end = new EventDateTime();
            end.DateTime = enddate;
            eventdata.End = end;

            eventdata.Transparency = "transparent";

            if(remind)
            {

                EventReminder rem = new EventReminder();
                rem.Method = "popup";
                rem.Minutes = 15;
                Event.RemindersData rd = new Event.RemindersData();
                rd.UseDefault = false;
                IList<EventReminder> list = new List<EventReminder>();
                list.Add(rem);
                rd.Overrides = list;
                eventdata.Reminders = rd;
            }
            //   k06n3almls6oo2f3grmdtt4kh4 @group.calendar.google.com
            //[email protected]
            var insertevent = _calService.Events.Insert(eventdata, "*****@*****.**");
            Event createdevent = insertevent.Execute();

            return true;
        }
示例#20
0
        public List <EventReminder> EventsList(string userid)
        {
            string    query     = "Select * from tblEvents where UserID=" + userid;
            DataTable datatable = GetSQLList(query);

            List <EventReminder> eventList = new List <EventReminder>();

            foreach (DataRow row in datatable.Rows)
            {
                EventReminder eventModel = new EventReminder();
                eventModel.EventID     = Convert.ToInt32(row.ItemArray[0]);
                eventModel.UserID      = Convert.ToInt32(row.ItemArray[1]);
                eventModel.Subject     = row.ItemArray[2].ToString();
                eventModel.Description = row.ItemArray[3].ToString();
                eventModel.StartDate   = row.ItemArray[4].ToString();
                eventModel.EndDate     = row.ItemArray[5].ToString();
                eventList.Add(eventModel);
            }
            return(eventList);
        }
示例#21
0
        public EventReminder GetEventReminder(int eventid)
        {
            var eventreminders = db.All <EventReminder>();
            var events         = db.All <Event>();

            if (eventreminders.Count() != events.Count())
            {
                foreach (var ev in events)
                {
                    if (!eventreminders.Any(x => x.EventId == ev.EventId))
                    {
                        db.Write(() =>
                        {
                            var evrem = new EventReminder(ev.EventId, false);
                            db.Add(evrem);
                        });
                    }
                }
            }
            return(db.All <EventReminder>().FirstOrDefault(x => x.EventId == eventid));
        }
示例#22
0
        /// <summary>
        /// Creates a GoogleCalendarEvent from internal Data
        /// </summary>
        /// <returns></returns>
        public Event ToGoogleCalendarEvent()
        {
            Event googleCalendarEvent = new Event();

            googleCalendarEvent.Start = new EventDateTime();
            googleCalendarEvent.End   = new EventDateTime();

            if (AllDay)
            {
                googleCalendarEvent.Start.Date = Start.ToString("yyyy-MM-dd");
                googleCalendarEvent.End.Date   = End.ToString("yyyy-MM-dd");
            }
            else
            {
                googleCalendarEvent.Start.DateTime = Start;
                googleCalendarEvent.End.DateTime   = End;
            }
            googleCalendarEvent.Summary     = Subject;
            googleCalendarEvent.Description = Description;
            googleCalendarEvent.Location    = Location;


            //Erinnerung setzen
            googleCalendarEvent.Reminders            = new Event.RemindersData();
            googleCalendarEvent.Reminders.UseDefault = false;
            EventReminder reminder = new EventReminder();

            reminder.Method  = "popup";
            reminder.Minutes = RemainterMinutesBefore;
            googleCalendarEvent.Reminders.Overrides = new List <EventReminder>();
            googleCalendarEvent.Reminders.Overrides.Add(reminder);

            //Teilnehmer
            googleCalendarEvent.Attendees = Attendees.Select(att => att.ToGoogleAttendee()).ToList();

            return(googleCalendarEvent);
        }
示例#23
0
        public void AddEvent(ProgramItem item)
        {
            const string GoogleDateFormatString = "yyyy-MM-ddTHH:mm:00Z";
            //service.Key = Key;

            var list = service.Events.List("primary");
            var fetch = list.Fetch();

            var start = new EventDateTime();
            start.DateTime = "2013-03-05T10:30:00Z";
            start.TimeZone = "+0000";

            var end = new EventDateTime();
            end.DateTime = "2013-03-05T10:35:00Z";
            end.TimeZone = "+0000";

            var e = new Event();

            e.End = end;
            e.Kind = "calendar#event";
            e.Start = start;
            e.Summary = "Summary";
            e.Id = null;
            e.ICalUID = null;
            e.Location = "";

            var eventReminder = new EventReminder();
            eventReminder.Method = "sms";
            eventReminder.Minutes = 15;

            e.Reminders = new Event.RemindersData();
            e.Reminders.UseDefault = false;
            e.Reminders.Overrides = new List<EventReminder>();
            e.Reminders.Overrides.Add(eventReminder);

            // Recurrence:
            var recur = "RRULE:FREQ=DAILY;COUNT=20;INTERVAL=1;WKST=SU";

            e.Recurrence = new List<string>();
            e.Recurrence.Add(recur);
            e.RecurringEventId = "12345";
            e.OriginalStartTime = start;

            AddEvent(e);
        }
示例#24
0
        public Event UpdateCalendarEntry(AppointmentItem ai, Event ev, ref int itemModified, Boolean forceCompare = false)
        {
            if (!Settings.Instance.APIlimit_inEffect && GetOGCSproperty(ev, Program.APIlimitHit)) {
                log.Fine("Back processing Event affected by attendee API limit.");
            } else {
                if (!(MainForm.Instance.ManualForceCompare || forceCompare)) { //Needed if the exception has just been created, but now needs updating
                    if (Settings.Instance.SyncDirection != SyncDirection.Bidirectional) {
                        if (DateTime.Parse(ev.Updated) > ai.LastModificationTime)
                            return null;
                    } else {
                        if (OutlookCalendar.GetOGCSlastModified(ai).AddSeconds(5) >= ai.LastModificationTime)
                            //Outlook last modified by OGCS
                            return null;
                        if (DateTime.Parse(ev.Updated) > DateTime.Parse(GoogleCalendar.GoogleTimeFrom(ai.LastModificationTime)))
                            return null;
                    }
                }
            }

            String aiSummary = OutlookCalendar.GetEventSummary(ai);
            log.Debug("Processing >> " + aiSummary);

            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            sb.AppendLine(aiSummary);

            //Handle an event's all-day attribute being toggled
            String evStart = ev.Start.Date ?? ev.Start.DateTime;
            String evEnd = ev.End.Date ?? ev.End.DateTime;
            if (ai.AllDayEvent) {
                ev.Start.DateTime = null;
                ev.End.DateTime = null;
                if (MainForm.CompareAttribute("Start time", SyncDirection.OutlookToGoogle, evStart, ai.Start.ToString("yyyy-MM-dd"), sb, ref itemModified)) {
                    ev.Start.Date = ai.Start.ToString("yyyy-MM-dd");
                }
                if (MainForm.CompareAttribute("End time", SyncDirection.OutlookToGoogle, evEnd, ai.End.ToString("yyyy-MM-dd"), sb, ref itemModified)) {
                    ev.End.Date = ai.End.ToString("yyyy-MM-dd");
                }
            } else {
                //Handle: Google = all-day; Outlook = not all day, but midnight values (so effectively all day!)
                if (ev.Start.Date != null &&
                    GoogleCalendar.GoogleTimeFrom(DateTime.Parse(evStart)) == GoogleCalendar.GoogleTimeFrom(ai.Start) &&
                    GoogleCalendar.GoogleTimeFrom(DateTime.Parse(evEnd)) == GoogleCalendar.GoogleTimeFrom(ai.End))
                {
                    sb.AppendLine("All-Day: true => false");
                    ev.Start.DateTime = GoogleCalendar.GoogleTimeFrom(ai.Start);
                    ev.End.DateTime = GoogleCalendar.GoogleTimeFrom(ai.End);
                    itemModified++;
                }
                ev.Start.Date = null;
                ev.End.Date = null;
                if (MainForm.CompareAttribute("Start time", SyncDirection.OutlookToGoogle,
                    GoogleCalendar.GoogleTimeFrom(DateTime.Parse(evStart)), GoogleCalendar.GoogleTimeFrom(ai.Start), sb, ref itemModified)) {
                    ev.Start.DateTime = GoogleCalendar.GoogleTimeFrom(ai.Start);
                }
                if (MainForm.CompareAttribute("End time", SyncDirection.OutlookToGoogle,
                    GoogleCalendar.GoogleTimeFrom(DateTime.Parse(evEnd)), GoogleCalendar.GoogleTimeFrom(ai.End), sb, ref itemModified)) {
                    ev.End.DateTime = GoogleCalendar.GoogleTimeFrom(ai.End);
                }
            }

            List<String> oRrules = Recurrence.Instance.BuildGooglePattern(ai, ev);
            if (ev.Recurrence != null) {
                for (int r = 0; r < ev.Recurrence.Count; r++) {
                    String rrule = ev.Recurrence[r];
                    if (rrule.StartsWith("RRULE:")) {
                        if (oRrules != null) {
                            String[] oRrule_bits = oRrules.First().TrimStart("RRULE:".ToCharArray()).Split(';');
                            foreach (String oRrule_bit in oRrule_bits) {
                                if (!rrule.Contains(oRrule_bit)) {
                                    if (MainForm.CompareAttribute("Recurrence", SyncDirection.OutlookToGoogle, rrule, oRrules.First(), sb, ref itemModified)) {
                                        ev.Recurrence[r] = oRrules.First();
                                    }
                                }
                            }
                        } else {
                            log.Debug("Converting to non-recurring event.");
                            MainForm.CompareAttribute("Recurrence", SyncDirection.OutlookToGoogle, rrule, null, sb, ref itemModified);
                            ev.Recurrence[r] = null;
                        }
                        break;
                    }
                }
            } else {
                if (oRrules != null && ev.RecurringEventId == null) {
                    log.Debug("Converting to recurring event.");
                    MainForm.CompareAttribute("Recurrence", SyncDirection.OutlookToGoogle, null, oRrules.First(), sb, ref itemModified);
                    ev.Recurrence = oRrules;
                }
            }
            if (ev.Recurrence != null && ev.RecurringEventId == null) {
                ev = OutlookCalendar.Instance.IOutlook.IANAtimezone_set(ev, ai);
            }

            String subjectObfuscated = Obfuscate.ApplyRegex(ai.Subject, SyncDirection.OutlookToGoogle);
            if (MainForm.CompareAttribute("Subject", SyncDirection.OutlookToGoogle, ev.Summary, subjectObfuscated, sb, ref itemModified)) {
                ev.Summary = subjectObfuscated;
            }
            if (!Settings.Instance.AddDescription) ai.Body = "";
            String outlookBody = ai.Body;
            //Check for Google description truncated @ 8Kb
            if (!string.IsNullOrEmpty(ai.Body) && !string.IsNullOrEmpty(ev.Description)
                && ev.Description.Length == 8 * 1024
                && ai.Body.Length > 8 * 1024) {
                outlookBody = ai.Body.Substring(0, 8 * 1024);
            }
            if (MainForm.CompareAttribute("Description", SyncDirection.OutlookToGoogle, ev.Description, outlookBody, sb, ref itemModified))
                ev.Description = outlookBody;

            if (MainForm.CompareAttribute("Location", SyncDirection.OutlookToGoogle, ev.Location, ai.Location, sb, ref itemModified))
                ev.Location = ai.Location;

            String oPrivacy = (ai.Sensitivity == OlSensitivity.olNormal) ? "default" : "private";
            String gPrivacy = ev.Visibility ?? "default";
            if (MainForm.CompareAttribute("Private", SyncDirection.OutlookToGoogle, gPrivacy, oPrivacy, sb, ref itemModified)) {
                ev.Visibility = oPrivacy;
            }
            String oFreeBusy = (ai.BusyStatus == OlBusyStatus.olFree) ? "transparent" : "opaque";
            String gFreeBusy = ev.Transparency ?? "opaque";
            if (MainForm.CompareAttribute("Free/Busy", SyncDirection.OutlookToGoogle, gFreeBusy, oFreeBusy, sb, ref itemModified)) {
                ev.Transparency = oFreeBusy;
            }

            if (Settings.Instance.AddAttendees && ai.Recipients.Count > 1 && !APIlimitReached_attendee) {
                if (ai.Recipients.Count >= 200) {
                    MainForm.Instance.Logboxout("ALERT: Attendees will not be synced for this meeting as it has " +
                        "more than 200, which Google does not allow.");
                    ev.Attendees = new List<EventAttendee>();
                } else {
                    try {
                        CompareRecipientsToAttendees(ai, ev, sb, ref itemModified);
                    } catch (System.Exception ex) {
                        if (OutlookCalendar.Instance.IOutlook.ExchangeConnectionMode().ToString().Contains("Disconnected")) {
                            MainForm.Instance.Logboxout("Outlook is currently disconnected from Exchange, so it's not possible to sync attendees.");
                            MainForm.Instance.Logboxout("Please reconnect or do not sync attendees.");
                            throw new System.Exception("Outlook has disconnected from Exchange.");
                        } else {
                            MainForm.Instance.Logboxout("WARNING: Unable to sync attendees.\r\n" + ex.Message);
                        }
                    }
                }
            }

            //Reminders
            if (Settings.Instance.AddReminders) {
                Boolean OKtoSyncReminder = OutlookCalendar.Instance.IsOKtoSyncReminder(ai);
                if (ev.Reminders.Overrides != null) {
                    //Find the popup reminder in Google
                    for (int r = ev.Reminders.Overrides.Count - 1; r >= 0; r--) {
                        EventReminder reminder = ev.Reminders.Overrides[r];
                        if (reminder.Method == "popup") {
                            if (OKtoSyncReminder) {
                                if (ai.ReminderSet) {
                                    if (MainForm.CompareAttribute("Reminder", SyncDirection.OutlookToGoogle, reminder.Minutes.ToString(), ai.ReminderMinutesBeforeStart.ToString(), sb, ref itemModified)) {
                                        reminder.Minutes = ai.ReminderMinutesBeforeStart;
                                    }
                                } else {
                                    sb.AppendLine("Reminder: " + reminder.Minutes + " => removed");
                                    ev.Reminders.Overrides.Remove(reminder);
                                    if (ev.Reminders.Overrides == null || ev.Reminders.Overrides.Count == 0) {
                                        ev.Reminders.UseDefault = Settings.Instance.UseGoogleDefaultReminder;
                                    }
                                    itemModified++;
                                } //if Outlook reminders set
                            } else {
                                sb.AppendLine("Reminder: " + reminder.Minutes + " => removed");
                                ev.Reminders.Overrides.Remove(reminder);
                                ev.Reminders.UseDefault = false;
                                itemModified++;
                            }
                        } //if google reminder found
                    } //foreach reminder

                } else { //no google reminders set
                    if (ai.ReminderSet && OKtoSyncReminder) {
                        sb.AppendLine("Reminder: nothing => " + ai.ReminderMinutesBeforeStart);
                        ev.Reminders.UseDefault = false;
                        EventReminder newReminder = new EventReminder();
                        newReminder.Method = "popup";
                        newReminder.Minutes = ai.ReminderMinutesBeforeStart;
                        ev.Reminders.Overrides = new List<EventReminder>();
                        ev.Reminders.Overrides.Add(newReminder);
                        itemModified++;
                    } else {
                        if (MainForm.CompareAttribute("Reminder Default", SyncDirection.OutlookToGoogle, ev.Reminders.UseDefault.ToString(), OKtoSyncReminder ? Settings.Instance.UseGoogleDefaultReminder.ToString() : "False", sb, ref itemModified)) {
                            ev.Reminders.UseDefault = OKtoSyncReminder ? Settings.Instance.UseGoogleDefaultReminder : false;
                        }
                    }
                }
            }
            if (itemModified > 0) {
                MainForm.Instance.Logboxout(sb.ToString(), false, verbose: true);
                MainForm.Instance.Logboxout(itemModified + " attributes updated.", verbose: true);
                System.Windows.Forms.Application.DoEvents();
            }
            return ev;
        }
示例#25
0
        /// <summary>
        /// Inserts events.
        /// </summary>
        /// <param name="events">The events.</param>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
        public bool InsertEvents(Event[] events)
        {
            try
            {
                if (!UseGoogleCalendar)
                    return false;

                if (!Authorized)
                {
                    Mail.SendEmail(EmailTo, MailResource.Calendar_InsertEvents_Subject,
                                        MailResource.Calendar_InsertEvents_TextBody, UseMail, true);
                    return false;
                }

                if (String.IsNullOrEmpty(GoogleCalendarId))
                {
                    GoogleCalendarId = DefaultGoogleCalendarId;
                }

                foreach (Event @event in events)
                {
                    if (String.IsNullOrEmpty(ReminderTime))
                    {
                        var remindersData = new Event.RemindersData { UseDefault = false };
                        @event.Reminders = remindersData;
                    }
                    else
                    {
                        TimeSpan reminderTimeSpan;
                        if (TimeSpan.TryParse(ReminderTime, out reminderTimeSpan))
                        {
                            var emailEventReminder = new EventReminder
                                                         {
                                                             Method = EmailMethod,
                                                             Minutes = 0
                                                         };
                            var popupEventReminder = new EventReminder
                                                         {
                                                             Method = PopupMethod,
                                                             Minutes = 0
                                                         };
                            var remindersData = new Event.RemindersData
                                                    {
                                                        Overrides = new List<EventReminder>
                                                                        {
                                                                            emailEventReminder,
                                                                            popupEventReminder
                                                                        },
                                                        UseDefault = false
                                                    };
                            @event.Reminders = remindersData;
                            @event.Start.DateTime = @event.Start.DateTime.GetValueOrDefault().Add(reminderTimeSpan);
                        }
                    }

                    @event.Visibility = IsEventsPrivate ? PrivateEventVisibility : DefaultEventVisibility;
                    _calendarService.Events.Insert(@event, GoogleCalendarId).Execute();
                }
            }
            catch (Exception e)
            {
                Mail.SendEmail(EmailTo, MailResource.Calendar_InsertEvents_Subject,
                                        MailResource.Calendar_InsertEvents_TextBody, UseMail, true);
                Logger.SetLog(e);
                return false;
            }

            return true;
        }
示例#26
0
        public static void UpdateAppointmentReminders(Outlook.AppointmentItem master, Event slave)
        {
            if (master.ReminderSet)
            {
                if (slave.Reminders == null)
                {
                    slave.Reminders = new Event.RemindersData();
                    slave.Reminders.Overrides = new List<EventReminder>();
                }

                slave.Reminders.UseDefault = false;
                if (slave.Reminders.Overrides != null)
                {
                    slave.Reminders.Overrides.Clear();
                }
                else
                {
                    slave.Reminders.Overrides = new List<EventReminder>();
                }
                var reminder = new EventReminder();
                reminder.Minutes = master.ReminderMinutesBeforeStart;
                if (reminder.Minutes > 40300)
                {
                    //ToDo: Check real limit, currently 40300
                    Logger.Log("Reminder Minutes to big ("  + reminder.Minutes + "), set to maximum of 40300 minutes for appointment: "  + master.Subject +   " - "  + master.Start, EventType.Warning);
                    reminder.Minutes = 40300;
                }
                reminder.Method = "popup";
                slave.Reminders.Overrides.Add(reminder);
            }
        }
示例#27
0
        private Event createCalendarEntry(AppointmentItem ai)
        {
            string itemSummary = OutlookCalendar.GetEventSummary(ai);
            log.Debug("Processing >> " + itemSummary);
            MainForm.Instance.Logboxout(itemSummary, verbose: true);

            Event ev = new Event();
            //Add the Outlook appointment ID into Google event
            AddOutlookID(ref ev, ai);

            ev.Start = new EventDateTime();
            ev.End = new EventDateTime();

            ev.Recurrence = Recurrence.Instance.BuildGooglePattern(ai, ev);
            if (ev.Recurrence != null) {
                ev = OutlookCalendar.Instance.IOutlook.IANAtimezone_set(ev, ai);
            }

            if (ai.AllDayEvent) {
                ev.Start.Date = ai.Start.ToString("yyyy-MM-dd");
                ev.End.Date = ai.End.ToString("yyyy-MM-dd");
            } else {
                ev.Start.DateTime = GoogleCalendar.GoogleTimeFrom(ai.Start);
                ev.End.DateTime = GoogleCalendar.GoogleTimeFrom(ai.End);
            }
            ev.Summary = Obfuscate.ApplyRegex(ai.Subject, SyncDirection.OutlookToGoogle);
            if (Settings.Instance.AddDescription) ev.Description = ai.Body;
            ev.Location = ai.Location;
            ev.Visibility = (ai.Sensitivity == OlSensitivity.olNormal) ? "default" : "private";
            ev.Transparency = (ai.BusyStatus == OlBusyStatus.olFree) ? "transparent" : "opaque";

            ev.Attendees = new List<EventAttendee>();
            if (Settings.Instance.AddAttendees && ai.Recipients.Count > 1 && !APIlimitReached_attendee) { //Don't add attendees if there's only 1 (me)
                if (ai.Recipients.Count >= 200) {
                    MainForm.Instance.Logboxout("ALERT: Attendees will not be synced for this meeting as it has " +
                        "more than 200, which Google does not allow.");
                } else {
                    foreach (Microsoft.Office.Interop.Outlook.Recipient recipient in ai.Recipients) {
                        EventAttendee ea = GoogleCalendar.CreateAttendee(recipient);
                        ev.Attendees.Add(ea);
                    }
                }
            }

            //Reminder alert
            if (Settings.Instance.AddReminders) {
                ev.Reminders = new Event.RemindersData();
                if (OutlookCalendar.Instance.IsOKtoSyncReminder(ai)) {
                    if (ai.ReminderSet) {
                        ev.Reminders.UseDefault = false;
                        EventReminder reminder = new EventReminder();
                        reminder.Method = "popup";
                        reminder.Minutes = ai.ReminderMinutesBeforeStart;
                        ev.Reminders.Overrides = new List<EventReminder>();
                        ev.Reminders.Overrides.Add(reminder);
                    } else {
                        ev.Reminders.UseDefault = Settings.Instance.UseGoogleDefaultReminder;
                    }
                } else {
                    ev.Reminders.UseDefault = false;
                }
            }
            return ev;
        }
        static void Main(string[] args)
        {
            using (var stream =
                       new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
            {
                string credPath = System.Environment.GetFolderPath(
                    System.Environment.SpecialFolder.Personal);
                credPath = Path.Combine(credPath, ".credentials/calendar_creds.json");

                credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    Scopes,
                    "user",
                    CancellationToken.None,
                    new FileDataStore(credPath, true)).Result;
                Console.WriteLine("Credential file saved to: " + credPath);
            }

            // Create Google Calendar API service.
            service = new CalendarService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName       = ApplicationName,
            });



            // Define parameters of request.
            EventsResource.ListRequest request = service.Events.List(MasterCalendarId);
            request.TimeMin      = DateTime.Now;
            request.ShowDeleted  = false;
            request.SingleEvents = true;
            request.OrderBy      = EventsResource.ListRequest.OrderByEnum.StartTime;

            // List events.
            Events events = request.Execute();

            foreach (String day in new String[] { "A", "B", "C", "D", "E", "F" })
            {
                RotationDates.Add(day, new List <DateTime>());
            }


            foreach (var eventItem in events.Items)
            {
                Console.WriteLine("Examining:  {0}", eventItem.Summary);
                foreach (String day in new String[] { "A", "B", "C", "D", "E", "F" })
                {
                    if (eventItem.Summary.Contains(String.Format("\"{0}\" Day", day)))
                    {
                        RotationDates[day].Add(DateTime.Parse(eventItem.Start.Date));
                        Console.WriteLine("{0} is an {1} day.", eventItem.Start.Date, day);
                    }
                }
            }

            using (ScheduleDatabaseEntities db = new ScheduleDatabaseEntities())
            {
                int evtId = db.Events.Count() <= 0 ? 1 : db.Events.OrderBy(e => e.Id).ToList().Last().Id + 1;
                foreach (ClassSchedule schedule in db.ClassSchedules.ToList())
                {
                    foreach (DateTime date in RotationDates["A"])
                    {
                        // only create an event, if it hasn't already been logged.


                        if (schedule.Events.Where(e => e.Date.Equals(date.Date)).Count() <= 0 && schedule.A.Hours > 0)
                        {
                            DateTime st = new DateTime(date.Year, date.Month, date.Day, schedule.A.Hours, schedule.A.Minutes, 0);
                            DateTime et = st.AddMinutes(50);
                            Google.Apis.Calendar.v3.Data.Event evt = new Google.Apis.Calendar.v3.Data.Event()
                            {
                                Start = new EventDateTime()
                                {
                                    DateTime = st
                                },
                                End = new EventDateTime()
                                {
                                    DateTime = et
                                },
                                Summary = schedule.ClassName
                            };

                            EventReminder reminder = new EventReminder()
                            {
                                Method = "sms", Minutes = 10
                            };
                            evt.Reminders = new Google.Apis.Calendar.v3.Data.Event.RemindersData()
                            {
                                Overrides = new List <EventReminder>()
                                {
                                    reminder
                                }, UseDefault = false
                            };

                            EventsResource.InsertRequest insReq = new EventsResource.InsertRequest(service, evt, "*****@*****.**");

                            Google.Apis.Calendar.v3.Data.Event newEvt = insReq.Execute();

                            Event dbEvent = new Event()
                            {
                                ClassScheduleId = schedule.Id, Date = date, CalendarEventURI = newEvt.Id, Id = evtId++
                            };
                            db.Events.Add(dbEvent);
                            db.SaveChanges();
                        }
                    }

                    foreach (DateTime date in RotationDates["B"])
                    {
                        // only create an event, if it hasn't already been logged.
                        if (schedule.Events.Where(e => e.Date.Equals(date.Date)).Count() <= 0 && schedule.B.Hours > 0)
                        {
                            DateTime st = new DateTime(date.Year, date.Month, date.Day, schedule.B.Hours, schedule.B.Minutes, 0);
                            DateTime et = st.AddMinutes(50);
                            Google.Apis.Calendar.v3.Data.Event evt = new Google.Apis.Calendar.v3.Data.Event()
                            {
                                Start = new EventDateTime()
                                {
                                    DateTime = st
                                },
                                End = new EventDateTime()
                                {
                                    DateTime = et
                                },
                                Summary = schedule.ClassName
                            };

                            EventReminder reminder = new EventReminder()
                            {
                                Method = "sms", Minutes = 10
                            };
                            evt.Reminders = new Google.Apis.Calendar.v3.Data.Event.RemindersData()
                            {
                                Overrides = new List <EventReminder>()
                                {
                                    reminder
                                }, UseDefault = false
                            };

                            EventsResource.InsertRequest insReq = new EventsResource.InsertRequest(service, evt, "primary");

                            Google.Apis.Calendar.v3.Data.Event newEvt = insReq.Execute();

                            Event dbEvent = new Event()
                            {
                                ClassScheduleId = schedule.Id, Date = date, CalendarEventURI = newEvt.Id, Id = evtId++
                            };
                            db.Events.Add(dbEvent);
                            db.SaveChanges();
                        }
                    }

                    foreach (DateTime date in RotationDates["C"])
                    {
                        // only create an event, if it hasn't already been logged.
                        if (schedule.Events.Where(e => e.Date.Equals(date.Date)).Count() <= 0 && schedule.C.Hours > 0)
                        {
                            DateTime st = new DateTime(date.Year, date.Month, date.Day, schedule.C.Hours, schedule.C.Minutes, 0);
                            DateTime et = st.AddMinutes(50);
                            Google.Apis.Calendar.v3.Data.Event evt = new Google.Apis.Calendar.v3.Data.Event()
                            {
                                Start = new EventDateTime()
                                {
                                    DateTime = st
                                },
                                End = new EventDateTime()
                                {
                                    DateTime = et
                                },
                                Summary = schedule.ClassName
                            };

                            EventReminder reminder = new EventReminder()
                            {
                                Method = "sms", Minutes = 10
                            };
                            evt.Reminders = new Google.Apis.Calendar.v3.Data.Event.RemindersData()
                            {
                                Overrides = new List <EventReminder>()
                                {
                                    reminder
                                }, UseDefault = false
                            };

                            EventsResource.InsertRequest insReq = new EventsResource.InsertRequest(service, evt, "primary");

                            Google.Apis.Calendar.v3.Data.Event newEvt = insReq.Execute();

                            Event dbEvent = new Event()
                            {
                                ClassScheduleId = schedule.Id, Date = date, CalendarEventURI = newEvt.Id, Id = evtId++
                            };
                            db.Events.Add(dbEvent);
                            db.SaveChanges();
                        }
                    }

                    foreach (DateTime date in RotationDates["D"])
                    {
                        // only create an event, if it hasn't already been logged.
                        if (schedule.Events.Where(e => e.Date.Equals(date.Date)).Count() <= 0 && schedule.D.Hours > 0)
                        {
                            DateTime st = new DateTime(date.Year, date.Month, date.Day, schedule.D.Hours, schedule.D.Minutes, 0);
                            DateTime et = st.AddMinutes(50);
                            Google.Apis.Calendar.v3.Data.Event evt = new Google.Apis.Calendar.v3.Data.Event()
                            {
                                Start = new EventDateTime()
                                {
                                    DateTime = st
                                },
                                End = new EventDateTime()
                                {
                                    DateTime = et
                                },
                                Summary = schedule.ClassName
                            };

                            EventReminder reminder = new EventReminder()
                            {
                                Method = "sms", Minutes = 10
                            };
                            evt.Reminders = new Google.Apis.Calendar.v3.Data.Event.RemindersData()
                            {
                                Overrides = new List <EventReminder>()
                                {
                                    reminder
                                }, UseDefault = false
                            };

                            EventsResource.InsertRequest insReq = new EventsResource.InsertRequest(service, evt, "primary");

                            Google.Apis.Calendar.v3.Data.Event newEvt = insReq.Execute();

                            Event dbEvent = new Event()
                            {
                                ClassScheduleId = schedule.Id, Date = date, CalendarEventURI = newEvt.Id, Id = evtId++
                            };
                            db.Events.Add(dbEvent);
                            db.SaveChanges();
                        }
                    }

                    foreach (DateTime date in RotationDates["E"])
                    {
                        // only create an event, if it hasn't already been logged.
                        if (schedule.Events.Where(e => e.Date.Equals(date.Date)).Count() <= 0 && schedule.E.Hours > 0)
                        {
                            DateTime st = new DateTime(date.Year, date.Month, date.Day, schedule.E.Hours, schedule.E.Minutes, 0);
                            DateTime et = st.AddMinutes(50);
                            Google.Apis.Calendar.v3.Data.Event evt = new Google.Apis.Calendar.v3.Data.Event()
                            {
                                Start = new EventDateTime()
                                {
                                    DateTime = st
                                },
                                End = new EventDateTime()
                                {
                                    DateTime = et
                                },
                                Summary = schedule.ClassName
                            };

                            EventReminder reminder = new EventReminder()
                            {
                                Method = "sms", Minutes = 10
                            };
                            evt.Reminders = new Google.Apis.Calendar.v3.Data.Event.RemindersData()
                            {
                                Overrides = new List <EventReminder>()
                                {
                                    reminder
                                }, UseDefault = false
                            };

                            EventsResource.InsertRequest insReq = new EventsResource.InsertRequest(service, evt, "primary");

                            Google.Apis.Calendar.v3.Data.Event newEvt = insReq.Execute();

                            Event dbEvent = new Event()
                            {
                                ClassScheduleId = schedule.Id, Date = date, CalendarEventURI = newEvt.Id, Id = evtId++
                            };
                            db.Events.Add(dbEvent);
                            db.SaveChanges();
                        }
                    }

                    foreach (DateTime date in RotationDates["F"])
                    {
                        // only create an event, if it hasn't already been logged.
                        if (schedule.Events.Where(e => e.Date.Equals(date.Date)).Count() <= 0 && schedule.F.Hours > 0)
                        {
                            DateTime st = new DateTime(date.Year, date.Month, date.Day, schedule.F.Hours, schedule.F.Minutes, 0);
                            DateTime et = st.AddMinutes(50);
                            Google.Apis.Calendar.v3.Data.Event evt = new Google.Apis.Calendar.v3.Data.Event()
                            {
                                Start = new EventDateTime()
                                {
                                    DateTime = st
                                },
                                End = new EventDateTime()
                                {
                                    DateTime = et
                                },
                                Summary = schedule.ClassName
                            };

                            EventReminder reminder = new EventReminder()
                            {
                                Method = "sms", Minutes = 10
                            };
                            evt.Reminders = new Google.Apis.Calendar.v3.Data.Event.RemindersData()
                            {
                                Overrides = new List <EventReminder>()
                                {
                                    reminder
                                }, UseDefault = false
                            };

                            EventsResource.InsertRequest insReq = new EventsResource.InsertRequest(service, evt, "primary");

                            Google.Apis.Calendar.v3.Data.Event newEvt = insReq.Execute();

                            Event dbEvent = new Event()
                            {
                                ClassScheduleId = schedule.Id, Date = date, CalendarEventURI = newEvt.Id, Id = evtId++
                            };
                            db.Events.Add(dbEvent);
                            db.SaveChanges();
                        }
                    }
                }
            }

            Console.WriteLine("I'm Done!");
            Console.Read();
        }
示例#29
0
        public AppointmentItem UpdateCalendarEntry(AppointmentItem ai, Event ev, ref int itemModified, Boolean forceCompare = false)
        {
            if (ai.RecurrenceState == OlRecurrenceState.olApptMaster)   //The exception child objects might have changed
            {
                log.Debug("Processing recurring master appointment.");
            }
            else
            {
                if (!forceCompare)   //Needed if the exception has just been created, but now needs updating
                {
                    if (Settings.Instance.SyncDirection != SyncDirection.Bidirectional)
                    {
                        if (DateTime.Parse(GoogleCalendar.GoogleTimeFrom(ai.LastModificationTime)) > DateTime.Parse(ev.Updated))
                        {
                            return(null);
                        }
                    }
                    else
                    {
                        if (GoogleCalendar.OGCSlastModified(ev).AddSeconds(5) >= DateTime.Parse(ev.Updated))
                        {
                            //Google last modified by OGCS
                            return(null);
                        }
                        if (DateTime.Parse(GoogleCalendar.GoogleTimeFrom(ai.LastModificationTime)) > DateTime.Parse(ev.Updated))
                        {
                            return(null);
                        }
                    }
                }
            }

            String evSummary = GoogleCalendar.GetEventSummary(ev);

            log.Debug("Processing >> " + evSummary);

            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            sb.AppendLine(evSummary);

            RecurrencePattern oPattern = (ai.RecurrenceState == OlRecurrenceState.olApptNotRecurring) ? null : ai.GetRecurrencePattern();

            if (ev.Start.Date != null)
            {
                if (ai.RecurrenceState != OlRecurrenceState.olApptMaster)
                {
                    ai.AllDayEvent = true;
                }
                if (MainForm.CompareAttribute("Start time", SyncDirection.GoogleToOutlook, ev.Start.Date, ai.Start.ToString("yyyy-MM-dd"), sb, ref itemModified))
                {
                    if (ai.RecurrenceState == OlRecurrenceState.olApptMaster)
                    {
                        oPattern.PatternStartDate = DateTime.Parse(ev.Start.Date);
                    }
                    else
                    {
                        ai.Start = DateTime.Parse(ev.Start.Date);
                    }
                }
                if (MainForm.CompareAttribute("End time", SyncDirection.GoogleToOutlook, ev.End.Date, ai.End.ToString("yyyy-MM-dd"), sb, ref itemModified))
                {
                    if (ai.RecurrenceState == OlRecurrenceState.olApptMaster)
                    {
                        oPattern.PatternEndDate = DateTime.Parse(ev.End.Date);
                    }
                    else
                    {
                        ai.End = DateTime.Parse(ev.End.Date);
                    }
                }
            }
            else
            {
                if (ai.RecurrenceState != OlRecurrenceState.olApptMaster)
                {
                    ai.AllDayEvent = false;
                }
                if (MainForm.CompareAttribute("Start time",
                                              SyncDirection.GoogleToOutlook,
                                              GoogleCalendar.GoogleTimeFrom(DateTime.Parse(ev.Start.DateTime)),
                                              GoogleCalendar.GoogleTimeFrom(ai.Start), sb, ref itemModified))
                {
                    if (ai.RecurrenceState == OlRecurrenceState.olApptMaster)
                    {
                        oPattern.PatternStartDate = DateTime.Parse(ev.Start.DateTime);
                    }
                    else
                    {
                        ai.Start = DateTime.Parse(ev.Start.DateTime);
                    }
                }
                if (MainForm.CompareAttribute("End time",
                                              SyncDirection.GoogleToOutlook,
                                              GoogleCalendar.GoogleTimeFrom(DateTime.Parse(ev.End.DateTime)),
                                              GoogleCalendar.GoogleTimeFrom(ai.End), sb, ref itemModified))
                {
                    if (ai.RecurrenceState == OlRecurrenceState.olApptMaster)
                    {
                        oPattern.PatternEndDate = DateTime.Parse(ev.End.DateTime);
                    }
                    else
                    {
                        ai.End = DateTime.Parse(ev.End.DateTime);
                    }
                }
            }
            oPattern = (RecurrencePattern)ReleaseObject(oPattern);

            if (ai.RecurrenceState == OlRecurrenceState.olApptMaster)
            {
                if (ev.Recurrence == null || ev.RecurringEventId != null)
                {
                    log.Debug("Converting to non-recurring events.");
                    ai.ClearRecurrencePattern();
                    itemModified++;
                }
                else
                {
                    Recurrence.Instance.CompareOutlookPattern(ev, ai, sb, ref itemModified);
                    Recurrence.Instance.UpdateOutlookExceptions(ai, ev);
                }
            }
            else if (ai.RecurrenceState == OlRecurrenceState.olApptNotRecurring)
            {
                if (!ai.IsRecurring && ev.Recurrence != null && ev.RecurringEventId == null)
                {
                    log.Debug("Converting to recurring appointment.");
                    Recurrence.Instance.CreateOutlookExceptions(ai, ev);
                    itemModified++;
                }
            }

            String summaryObfuscated = Obfuscate.ApplyRegex(ev.Summary, SyncDirection.GoogleToOutlook);

            if (MainForm.CompareAttribute("Subject", SyncDirection.GoogleToOutlook, summaryObfuscated, ai.Subject, sb, ref itemModified))
            {
                ai.Subject = summaryObfuscated;
            }
            if (!Settings.Instance.AddDescription)
            {
                ev.Description = "";
            }
            if (Settings.Instance.SyncDirection == SyncDirection.GoogleToOutlook || !Settings.Instance.AddDescription_OnlyToGoogle)
            {
                if (MainForm.CompareAttribute("Description", SyncDirection.GoogleToOutlook, ev.Description, ai.Body, sb, ref itemModified))
                {
                    ai.Body = ev.Description;
                }
            }

            if (MainForm.CompareAttribute("Location", SyncDirection.GoogleToOutlook, ev.Location, ai.Location, sb, ref itemModified))
            {
                ai.Location = ev.Location;
            }

            String oPrivacy = (ai.Sensitivity == OlSensitivity.olNormal) ? "default" : "private";
            String gPrivacy = (ev.Visibility == null ? "default" : ev.Visibility);

            if (MainForm.CompareAttribute("Private", SyncDirection.GoogleToOutlook, gPrivacy, oPrivacy, sb, ref itemModified))
            {
                ai.Sensitivity = (ev.Visibility != null && ev.Visibility == "private") ? OlSensitivity.olPrivate : OlSensitivity.olNormal;
            }
            String oFreeBusy = (ai.BusyStatus == OlBusyStatus.olFree) ? "transparent" : "opaque";
            String gFreeBusy = (ev.Transparency == null ? "opaque" : ev.Transparency);

            if (MainForm.CompareAttribute("Free/Busy", SyncDirection.GoogleToOutlook, gFreeBusy, oFreeBusy, sb, ref itemModified))
            {
                ai.BusyStatus = (ev.Transparency != null && ev.Transparency == "transparent") ? OlBusyStatus.olFree : OlBusyStatus.olBusy;
            }

            if (Settings.Instance.AddAttendees)
            {
                if (ev.Description != null && ev.Description.Contains("===--- Attendees ---==="))
                {
                    //Protect against <v1.2.4 where attendees were stored as text
                    log.Info("This event still has attendee information in the description - cannot sync them.");
                }
                else if (Settings.Instance.SyncDirection == SyncDirection.Bidirectional &&
                         ev.Attendees != null && ev.Attendees.Count == 0 && ai.Recipients.Count > 150)
                {
                    log.Info("Attendees not being synced - there are too many (" + ai.Recipients.Count + ") for Google.");
                }
                else
                {
                    //Build a list of Outlook attendees. Any remaining at the end of the diff must be deleted.
                    List <Recipient> removeRecipient = new List <Recipient>();
                    if (ai.Recipients != null)
                    {
                        foreach (Recipient recipient in ai.Recipients)
                        {
                            if (recipient.Name != ai.Organizer)
                            {
                                removeRecipient.Add(recipient);
                            }
                        }
                    }
                    if (ev.Attendees != null)
                    {
                        for (int g = ev.Attendees.Count - 1; g >= 0; g--)
                        {
                            bool          foundRecipient = false;
                            EventAttendee attendee       = ev.Attendees[g];

                            foreach (Recipient recipient in ai.Recipients)
                            {
                                if (!recipient.Resolved)
                                {
                                    recipient.Resolve();
                                }
                                String recipientSMTP = IOutlook.GetRecipientEmail(recipient);
                                if (recipientSMTP.ToLower() == attendee.Email.ToLower())
                                {
                                    foundRecipient = true;
                                    removeRecipient.Remove(recipient);

                                    //Optional attendee
                                    bool oOptional = (ai.OptionalAttendees != null && ai.OptionalAttendees.Contains(attendee.DisplayName ?? attendee.Email));
                                    bool gOptional = (attendee.Optional == null) ? false : (bool)attendee.Optional;
                                    if (MainForm.CompareAttribute("Recipient " + recipient.Name + " - Optional Check",
                                                                  SyncDirection.GoogleToOutlook, gOptional, oOptional, sb, ref itemModified))
                                    {
                                        if (gOptional)
                                        {
                                            recipient.Type = (int)OlMeetingRecipientType.olOptional;
                                        }
                                        else
                                        {
                                            recipient.Type = (int)OlMeetingRecipientType.olRequired;
                                        }
                                    }
                                    //Response is readonly in Outlook :(
                                    break;
                                }
                            }
                            if (!foundRecipient &&
                                (attendee.DisplayName != ai.Organizer)) //Attendee in Google is owner in Outlook, so can't also be added as a recipient)
                            {
                                sb.AppendLine("Recipient added: " + (attendee.DisplayName ?? attendee.Email));
                                createRecipient(attendee, ai);
                                itemModified++;
                            }
                        }
                    }

                    foreach (Recipient recipient in removeRecipient)
                    {
                        sb.AppendLine("Recipient removed: " + recipient.Name);
                        recipient.Delete();
                        itemModified++;
                    }
                }
            }
            //Reminders
            if (Settings.Instance.AddReminders)
            {
                if (ev.Reminders.Overrides != null)
                {
                    //Find the popup reminder in Google
                    for (int r = ev.Reminders.Overrides.Count - 1; r >= 0; r--)
                    {
                        EventReminder reminder = ev.Reminders.Overrides[r];
                        if (reminder.Method == "popup")
                        {
                            if (ai.ReminderSet)
                            {
                                if (MainForm.CompareAttribute("Reminder", SyncDirection.GoogleToOutlook, reminder.Minutes.ToString(), ai.ReminderMinutesBeforeStart.ToString(), sb, ref itemModified))
                                {
                                    ai.ReminderMinutesBeforeStart = (int)reminder.Minutes;
                                }
                            }
                            else
                            {
                                sb.AppendLine("Reminder: nothing => " + reminder.Minutes);
                                ai.ReminderSet = true;
                                ai.ReminderMinutesBeforeStart = (int)reminder.Minutes;
                                itemModified++;
                            } //if Outlook reminders set
                        }     //if google reminder found
                    }         //foreach reminder
                }
                else     //no google reminders set
                {
                    if (ai.ReminderSet)
                    {
                        sb.AppendLine("Reminder: " + ai.ReminderMinutesBeforeStart + " => removed");
                        ai.ReminderSet = false;
                        itemModified++;
                    }
                }
            }
            if (itemModified > 0)
            {
                MainForm.Instance.Logboxout(sb.ToString(), false, verbose: true);
                MainForm.Instance.Logboxout(itemModified + " attributes updated.", verbose: true);
                System.Windows.Forms.Application.DoEvents();
            }
            return(ai);
        }
        private void ModifyEvent(Event e, AppointmentItem ai, bool add_description, bool add_reminders, bool add_attendees)
        {
            e.Start = new EventDateTime();
            e.End   = new EventDateTime();

            if (ai.AllDayEvent)
            {
                e.Start.Date = ai.Start.ToString("yyyy-MM-dd");
                e.End.Date   = ai.End.ToString("yyyy-MM-dd");

                // nullify the DateTime; otherwise, google rejects
                e.Start.DateTime = null;
                e.Start.DateTime = null;
            }
            else
            {
                e.Start.DateTime = ai.Start;
                e.End.DateTime   = ai.End;

                e.Start.TimeZone = ai.StartTimeZone.Name;
                e.End.TimeZone   = ai.EndTimeZone.Name;
            }

            e.Summary = ai.Subject;
            if (add_description)
            {
                e.Description = OutlookGoogleSync.Utilities.ObtainUserBodyData(ai.Body);
            }
            e.Location = ai.Location;

            // determine how to set the status based on the outlook event
            OutlookGoogleSync.Utilities.SetEventStatus(e, ai);

            // consider the reminder set in Outlook
            if (add_reminders && ai.ReminderSet)
            {
                e.Reminders            = new Event.RemindersData();
                e.Reminders.UseDefault = false;
                EventReminder reminder = new EventReminder();
                reminder.Method       = "popup";
                reminder.Minutes      = ai.ReminderMinutesBeforeStart;
                e.Reminders.Overrides = new List <EventReminder>();
                e.Reminders.Overrides.Add(reminder);
            }

            if (add_attendees)
            {
                e.Description += Environment.NewLine + Environment.NewLine;
                e.Description += OutlookGoogleSync.Utilities.BODY_SEPARATOR;
                e.Description += Environment.NewLine + Environment.NewLine;
                e.Description += Environment.NewLine + "==============================================";
                e.Description += Environment.NewLine + "Added by OutlookGoogleSync Bidirectional:" + Environment.NewLine;
                e.Description += Environment.NewLine + "ORGANIZER: " + Environment.NewLine + ai.Organizer + Environment.NewLine;
                e.Description += Environment.NewLine + "REQUIRED: " + Environment.NewLine + splitAttendees(ai.RequiredAttendees) + Environment.NewLine;
                e.Description += Environment.NewLine + "OPTIONAL: " + Environment.NewLine + splitAttendees(ai.OptionalAttendees);
                e.Description += Environment.NewLine + "==============================================";
            }

            // update the property ids that tie the two events together
            UpdatePropertyIDs(e, ai);
        }
示例#31
0
        private async void SubmitCommandExecuted()
        {
            if (!IsEditMode)
            {
                if (AreEventsVisible)
                {
                    EventReminder.EventReminder.EventID = SelectedEvent.Event.ID;
                    EventReminder.EventReminder.Event   = SelectedEvent.Event;
                }
                else
                {
                    _event.EventReminders.Add(EventReminder);
                }
                _eventDataUnit.EventRemindersRepository.Add(EventReminder.EventReminder);

                var primaryContact = EventReminder.EventReminder.Event != null ? EventReminder.EventReminder.Event.Contact == null ? String.Empty : "Primary Contact: " + EventReminder.EventReminder.Event.Contact.FirstName + " "
                                     + EventReminder.EventReminder.Event.Contact.LastName : String.Empty;

                var msg = "Event-Reminder" + "\n" + "Created by " + EventReminder.CreatedByUser.FirstName + " " +
                          EventReminder.CreatedByUser.LastName + " at " + DateTime.Now + "\n" +
                          "Event Name: " + EventReminder.EventName + "\n" + primaryContact + "\n" + EventReminder.WhatToDo;
                var email = new CorrespondenceModel(new Corresponcence()
                {
                    ID          = Guid.NewGuid(),
                    Date        = DateTime.Now,
                    FromAddress = EventReminder.CreatedByUser.EmailAddress,
                    ToAddress   = EventReminder.AssignedToUser.EmailAddress,
                    Subject     = "Event-Reminder",
                    Message     = msg,
                });

                await EmailService.SendEmail(email, null, null);

                if (AreEventsVisible)
                {
                    _originalEvent = SelectedEvent.Clone();
                    SelectedEvent.EventReminders.Add(EventReminder);
                    var eventUpdates = LoggingService.FindDifference(_originalEvent, SelectedEvent);
                    if (!SelectedEvent.EventUpdates.Any())
                    {
                        var updates = await _eventDataUnit.EventUpdatesRepository.GetAllAsync(x => x.EventID == SelectedEvent.Event.ID);

                        SelectedEvent.EventUpdates = new ObservableCollection <EventUpdate>(updates.OrderByDescending(x => x.Date));
                    }
                    ProcessUpdates(SelectedEvent, eventUpdates);

                    await _eventDataUnit.SaveChanges();
                }
            }
            else
            {
                _eventReminder.AssignedToUser = AssignedToUser;
                _eventReminder.EventReminder.AssignedToUserID = AssignedToUser.ID;
                EventReminder.EventReminder.LastEditDate      = DateTime.Now;
                if (AreEventsVisible)
                {
                    if (_originalEvent.Event.ID != _selectedEvent.Event.ID)
                    {
                        _originalEvent = _selectedEvent.Clone();
                    }

                    EventReminder.EventReminder.Event = SelectedEvent.Event;
                    SelectedEvent.EventReminders.Where(x => x.EventReminder == _eventReminder.EventReminder).FirstOrDefault().AssignedToUser = AssignedToUser;
                    var eventUpdates = LoggingService.FindDifference(_originalEvent, SelectedEvent);
                    if (!SelectedEvent.EventUpdates.Any())
                    {
                        var updates = await _eventDataUnit.EventUpdatesRepository.GetAllAsync(x => x.EventID == SelectedEvent.Event.ID);

                        SelectedEvent.EventUpdates = new ObservableCollection <EventUpdate>(updates.OrderByDescending(x => x.Date));
                    }
                    ProcessUpdates(_selectedEvent, eventUpdates);

                    await _eventDataUnit.SaveChanges();
                }
                else
                {
                    _eventDataUnit.EventRemindersRepository.SetEntityModified(_eventReminder.EventReminder);
                }
                EventReminder.Refresh();
            }
        }
        private void SaveEvent(object sender, RoutedEventArgs e)
        {
            var start = new EventDateTime();

            start.DateTime = App.ViewModel.DateTimeConvert(Estart_date.Text,Estart_time.Text);
            start.TimeZone = "+0400";

            var end = new EventDateTime();
            end.DateTime = App.ViewModel.DateTimeConvert(Eend_date.Text, Eend_time.Text);
            end.TimeZone = "+0400";

            var ev = new Event();

            ev.End = end;
            ev.Kind = "calendar#event";
            ev.Start = start;
            ev.Summary = Etitle.Text;
            ev.Description = Edescription.Text;
            ev.Id = null;
            ev.ICalUID = null;
            ev.Location = Ewhere.Text;

            var eventReminder = new EventReminder();
            switch (Enotifytype.Text)
            {
                case "sms": eventReminder.Method = "sms"; break;
                case "email": eventReminder.Method = "email"; break;
            }
            switch (Enotifytime.Text)
            {
                case "minutes": eventReminder.Minutes = Convert.ToInt32(Enotifyvalue.Text); break;
                case "hours": eventReminder.Minutes = (Convert.ToInt32(Enotifyvalue.Text)*60); break;
                case "days": eventReminder.Minutes = (Convert.ToInt32(Enotifyvalue.Text) * 60 * 24); break;
            }
            ev.Reminders = new Event.RemindersData();
            ev.Reminders.UseDefault = false;
            ev.Reminders.Overrides = new List<EventReminder>();
            ev.Reminders.Overrides.Add(eventReminder);

            ev.OriginalStartTime = start;

            App.ViewModel.AddEvent(ev);
            Close();
        }
示例#33
0
        public ActionResult Edit(int id)
        {
            EventReminder events = GetEventId(id);

            return(View("Create", events));
        }
示例#34
0
        private void SyncNow_Click(object sender, EventArgs e)
        {
            if (Settings.Instance.UseGoogleCalendar.Id == "")
            {
                MessageBox.Show("You need to select a Google Calendar first on the 'Settings' tab.");
                return;
            }

            bSyncNow.Enabled = false;

            LogBox.Clear();

            DateTime syncStarted = DateTime.Now;

            logboxout("Sync started at " + syncStarted.ToString());
            logboxout("--------------------------------------------------");

            logboxout("Reading Outlook Calendar Entries...");
            List<OutlookAppointment> outlookEntries;
            try
            {
                var officeCalendar = CreateOfficeCalendar();
                outlookEntries = officeCalendar.GetCalendarEntriesInRange();
            }
            catch (System.Exception ex)
            {
                bSyncNow.Enabled = true;

                notifyIcon1.ShowBalloonTip(5, "outlook issue", "an error while reading from outlook: " + ex.Message, ToolTipIcon.Error);
                logboxout("an error while reading from outlook: " + ex.Message + "\n" + ex.StackTrace);
                return;
            }
            if (cbCreateFiles.Checked)
            {
                using(TextWriter tw = new StreamWriter("export_found_in_outlook.txt"))
                {
                    foreach (OutlookAppointment ai in outlookEntries)
                    {
                        tw.WriteLine(Signature(ai));
                    }
                    tw.Close();
                }
            }
            logboxout("Found " + outlookEntries.Count + " Outlook Calendar Entries.");
            logboxout("--------------------------------------------------");
            logboxout("Reading Google Calendar Entries...");

            List<Event> GoogleEntries = new List<Event>();
            try
            {
                GoogleEntries = GoogleCalendar.Instance.getCalendarEntriesInRange();
            }
            catch (System.Exception ex)
            {
                bSyncNow.Enabled = true;

                notifyIcon1.ShowBalloonTip(5, "google issue", "an error while reading from google: " + ex.Message, ToolTipIcon.Error);
                logboxout("an error while reading from google: " + ex.Message + "\n" + ex.StackTrace);
                return;
            }

            if (cbCreateFiles.Checked)
            {
                using(TextWriter tw = new StreamWriter("export_found_in_google.txt"))
                {
                    foreach (Event ev in GoogleEntries)
                    {
                        tw.WriteLine(Signature(ev));
                    }
                    tw.Close();
                }
            }
            logboxout("Found " + GoogleEntries.Count + " Google Calendar Entries.");
            logboxout("--------------------------------------------------");

            //  Make copies of each list of events (Not strictly needed)
            List<Event> GoogleEntriesToBeDeleted = new List<Event>(GoogleEntries);
            List<OutlookAppointment> OutlookEntriesToBeCreated = new List<OutlookAppointment>(outlookEntries);
            IdentifyGoogleAddDeletes(OutlookEntriesToBeCreated, GoogleEntriesToBeDeleted);

            //List<Event> GoogleEntriesToBeDeleted = IdentifyGoogleEntriesToBeDeleted(OutlookEntries, GoogleEntries);
            if (cbCreateFiles.Checked)
            {
                using(TextWriter tw = new StreamWriter("export_to_be_deleted.txt"))
                {
                    foreach (Event ev in GoogleEntriesToBeDeleted)
                    {
                        tw.WriteLine(Signature(ev));
                    }
                    tw.Close();
                }
            }
            logboxout(GoogleEntriesToBeDeleted.Count + " Google Calendar Entries to be deleted.");

            //OutlookEntriesToBeCreated ...in Google!
            //List<OutlookAppointment> OutlookEntriesToBeCreated = IdentifyOutlookEntriesToBeCreated(OutlookEntries, GoogleEntries);
            if (cbCreateFiles.Checked)
            {
                using (TextWriter tw = new StreamWriter("export_to_be_created.txt"))
                {
                    foreach (OutlookAppointment ai in OutlookEntriesToBeCreated)
                    {
                        tw.WriteLine(Signature(ai));
                    }
                    tw.Close();
                }
            }
            logboxout(OutlookEntriesToBeCreated.Count + " Entries to be created in Google.");
            logboxout("--------------------------------------------------");

            if (GoogleEntriesToBeDeleted.Count > 0)
            {
                logboxout("Deleting " + GoogleEntriesToBeDeleted.Count + " Google Calendar Entries...");
                foreach (Event ev in GoogleEntriesToBeDeleted) GoogleCalendar.Instance.deleteCalendarEntry(ev);
                logboxout("Done.");
                logboxout("--------------------------------------------------");
            }

            if (OutlookEntriesToBeCreated.Count > 0)
            {
                logboxout("Creating " + OutlookEntriesToBeCreated.Count + " Entries in Google...");
                foreach (OutlookAppointment ai in OutlookEntriesToBeCreated)
                {
                    Event ev = new Event
                    {
                        Start = new EventDateTime(),
                        End = new EventDateTime()
                    };

                    if (ai.AllDayEvent)
                    {
                        ev.Start.Date = ai.Start.ToString("yyyy-MM-dd");
                        ev.End.Date = ai.End.ToString("yyyy-MM-dd");
                    }
                    else
                    {
                        //ev.Start.DateTime = ai.Start;
                        //ev.End.DateTime = ai.End;
                        ev.Start.DateTime = GoogleCalendar.Instance.GoogleTimeFrom(ai.Start);
                        ev.End.DateTime = GoogleCalendar.Instance.GoogleTimeFrom(ai.End);
                    }
                    ev.Summary = ai.Subject;
                    if (cbAddDescription.Checked)
                    {
                        ev.Description = ai.Body;
                    }
                    ev.Location = ai.Location;

                    //consider the reminder set in Outlook
                    if (cbAddReminders.Checked && ai.ReminderSet)
                    {
                        ev.Reminders = new Event.RemindersData();
                        ev.Reminders.UseDefault = false;
                        EventReminder reminder = new EventReminder();
                        reminder.Method = "popup";
                        reminder.Minutes = ai.ReminderMinutesBeforeStart;
                        ev.Reminders.Overrides = new List<EventReminder>();
                        ev.Reminders.Overrides.Add(reminder);
                    }

                    ev.Description = ai.Body;

                    // Set Attendees
                    if (cbAddAttendees.Checked)
                    {
                        var footer = new StringBuilder();
                        footer.Append(Environment.NewLine);
                        footer.Append(Environment.NewLine + "==============================================");
                        footer.Append(Environment.NewLine + "Added by OutlookGoogleSync:" + Environment.NewLine);
                        footer.Append(Environment.NewLine + "ORGANIZER: " + Environment.NewLine + ai.Organizer + Environment.NewLine);
                        footer.Append(Environment.NewLine + "REQUIRED: " + Environment.NewLine + splitAttendees(ai.RequiredAttendees) + Environment.NewLine);
                        footer.Append(Environment.NewLine + "OPTIONAL: " + Environment.NewLine + splitAttendees(ai.OptionalAttendees));
                        footer.Append(Environment.NewLine + "==============================================");

                        ev.Description = ev.Description + footer;
                    }

                    GoogleCalendar.Instance.addEntry(ev);
                }
                logboxout("Done.");
                logboxout("--------------------------------------------------");
            }

            DateTime SyncFinished = DateTime.Now;
            TimeSpan Elapsed = SyncFinished - syncStarted;
            logboxout("Sync finished at " + SyncFinished.ToString());
            logboxout("Time needed: " + Elapsed.Minutes + " min " + Elapsed.Seconds + " s");

            bSyncNow.Enabled = true;
        }
        private void syncWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            if (e.Argument is string &&
                "DELETE".Equals((string)e.Argument))
            {
                deleteAllSyncItems();
                return;
            }

            AppointmentItemCache appointmentItemCache = new AppointmentItemCache();
            EventCache           eventCache           = new EventCache();

            DateTime        syncStarted = DateTime.Now;
            OutlookCalendar ocal        = null;

            try
            {
                logboxout("Sync started at " + syncStarted.ToString());
                logboxout("--------------------------------------------------");

                logboxout("Reading Outlook Calendar Entries...");
                ocal = new OutlookCalendar();
                List <AppointmentItemCacheEntry> OutlookEntries = new List <AppointmentItemCacheEntry>();
                foreach (AppointmentItem a in ocal.getCalendarEntriesInRange(syncStarted))
                {
                    OutlookEntries.Add(appointmentItemCache.GetAppointmentItemCacheEntry(a, ocal.AccountName));
                }

                if (checkBoxCreateFiles.Checked)
                {
                    using (TextWriter tw = new StreamWriter("export_found_in_outlook.txt"))
                    {
                        foreach (AppointmentItemCacheEntry ai in OutlookEntries)
                        {
                            tw.WriteLine(ai.Signature);
                        }
                    }
                }

                logboxout("Found " + OutlookEntries.Count + " Outlook Calendar Entries.");
                logboxout("--------------------------------------------------");
                logboxout("Reading Google Calendar Entries...");

                string accountName = "(Empty)";
                if (ocal != null || !string.IsNullOrEmpty(ocal.AccountName))
                {
                    accountName = ocal.AccountName;
                }

                GoogleCalendar         gcal          = new GoogleCalendar();
                List <EventCacheEntry> GoogleEntries = new List <EventCacheEntry>();
                foreach (Event ev in gcal.getCalendarEntriesInRange(syncStarted))
                {
                    GoogleEntries.Add(eventCache.GetEventCacheEntry(ev, accountName));
                }

                if (checkBoxCreateFiles.Checked)
                {
                    using (TextWriter tw = new StreamWriter("export_found_in_google.txt"))
                    {
                        foreach (EventCacheEntry ev in GoogleEntries)
                        {
                            tw.WriteLine(ev.Signature);
                        }
                    }
                }

                logboxout("Found " + GoogleEntries.Count + " Google Calendar Entries.");
                logboxout("--------------------------------------------------");

                List <EventCacheEntry> GoogleEntriesToBeDeleted = identifyGoogleEntriesToBeDeleted(OutlookEntries, GoogleEntries, accountName);
                if (checkBoxCreateFiles.Checked)
                {
                    using (TextWriter tw = new StreamWriter("export_to_be_deleted.txt"))
                    {
                        foreach (EventCacheEntry ev in GoogleEntriesToBeDeleted)
                        {
                            tw.WriteLine(ev.Signature);
                        }
                    }
                }

                logboxout(GoogleEntriesToBeDeleted.Count + " Google Calendar Entries to be deleted.");

                //OutlookEntriesToBeCreated ...in Google!
                List <AppointmentItemCacheEntry> OutlookEntriesToBeCreated = identifyOutlookEntriesToBeCreated(OutlookEntries, GoogleEntries);
                if (checkBoxCreateFiles.Checked)
                {
                    using (TextWriter tw = new StreamWriter("export_to_be_created.txt"))
                    {
                        foreach (AppointmentItemCacheEntry ai in OutlookEntriesToBeCreated)
                        {
                            tw.WriteLine(ai.Signature);
                        }
                    }
                }

                logboxout(OutlookEntriesToBeCreated.Count + " Entries to be created in Google.");
                logboxout("--------------------------------------------------");

                if (GoogleEntriesToBeDeleted.Count > 0)
                {
                    logboxout("Deleting " + GoogleEntriesToBeDeleted.Count + " Google Calendar Entries...");
                    foreach (EventCacheEntry ev in GoogleEntriesToBeDeleted)
                    {
                        gcal.deleteCalendarEntry(ev.Event);
                    }
                    logboxout("Done.");
                    logboxout("--------------------------------------------------");
                }

                if (OutlookEntriesToBeCreated.Count > 0)
                {
                    logboxout("Creating " + OutlookEntriesToBeCreated.Count + " Entries in Google...");
                    foreach (AppointmentItemCacheEntry aice in OutlookEntriesToBeCreated)
                    {
                        AppointmentItem ai = aice.AppointmentItem;
                        Event           ev = new Event();

                        ev.Start = new EventDateTime();
                        ev.End   = new EventDateTime();

                        if (ai.AllDayEvent)
                        {
                            ev.Start.Date = ai.Start.ToString("yyyy-MM-dd");
                            ev.End.Date   = ai.End.ToString("yyyy-MM-dd");
                        }
                        else
                        {
                            ev.Start.DateTime = GoogleCalendar.GoogleTimeFrom(ai.Start);
                            ev.End.DateTime   = GoogleCalendar.GoogleTimeFrom(ai.End);
                        }

                        ev.Summary = ai.Subject;
                        if (checkBoxAddDescription.Checked)
                        {
                            try
                            {
                                ev.Description = ai.Body;
                            }
                            catch (System.Exception ex)
                            {
                                string startDt = ai.AllDayEvent ? ai.Start.ToShortDateString() : ai.Start.ToString();
                                string endDt   = ai.AllDayEvent ? ai.End.ToShortDateString() : ai.End.ToString();
                                logboxout("Error accessing the body of Outlook item. Body will be empty.\r\n    Subject: [" + ev.Summary + "]\r\n    Start: [" + startDt + "]\r\n    End: [" + endDt + "]\r\n    Error: " + ex.Message);
                            }
                        }

                        ev.Location = ai.Location;

                        //consider the reminder set in Outlook
                        if (checkBoxAddReminders.Checked && ai.ReminderSet)
                        {
                            ev.Reminders            = new Event.RemindersData();
                            ev.Reminders.UseDefault = false;
                            EventReminder reminder = new EventReminder();
                            reminder.Method        = "popup";
                            reminder.Minutes       = ai.ReminderMinutesBeforeStart;
                            ev.Reminders.Overrides = new List <EventReminder>();
                            ev.Reminders.Overrides.Add(reminder);
                        }
                        else
                        {
                            ev.Reminders            = new Event.RemindersData();
                            ev.Reminders.UseDefault = false;
                        }

                        if (checkBoxAddAttendees.Checked)
                        {
                            ev.Description += Environment.NewLine;
                            ev.Description += Environment.NewLine + "==============================================";
                            ev.Description += Environment.NewLine + "Added by OutlookGoogleSync (" + accountName + "):" + Environment.NewLine;
                            ev.Description += Environment.NewLine + "ORGANIZER: " + Environment.NewLine + ai.Organizer + Environment.NewLine;
                            ev.Description += Environment.NewLine + "REQUIRED: " + Environment.NewLine + splitAttendees(ai.RequiredAttendees) + Environment.NewLine;
                            if (ai.OptionalAttendees != null)
                            {
                                ev.Description += Environment.NewLine + "OPTIONAL: " + Environment.NewLine + splitAttendees(ai.OptionalAttendees);
                            }

                            ev.Description += Environment.NewLine + "==============================================";
                        }

                        gcal.addEntry(ev);
                    }

                    logboxout("Done.");
                    logboxout("--------------------------------------------------");
                }

                DateTime syncFinished = DateTime.Now;
                TimeSpan elapsed      = syncFinished - syncStarted;
                logboxout("Sync finished at " + syncFinished.ToString());
                logboxout("Time needed: " + elapsed.Minutes + " min " + elapsed.Seconds + " s");
            }
            catch (System.Exception ex)
            {
                logboxout("Error Syncing:\r\n" + ex.ToString());
            }

            eventCache.Clear();
            freeCOMResources(ocal, appointmentItemCache);
        }
示例#36
0
        public ActionResult Edit(int id)
        {
            EventReminder events = eventRepository.GetEventById(id);

            return(View("Create", events));
        }
示例#37
0
        private void SyncNow_Click(object sender, EventArgs e)
        {
            if (Settings.Instance.UseGoogleCalendar.Id == "")
            {
                MessageBox.Show("You need to select a Google Calendar first on the 'Settings' tab.");
                return;
            }

            bSyncNow.Enabled = false;

            LogBox.Clear();

            DateTime syncStarted = DateTime.Now;

            logboxout("Sync started at " + syncStarted.ToString());
            logboxout("--------------------------------------------------");

            logboxout("Reading Outlook Calendar Entries...");
            List <OutlookAppointment> outlookEntries;

            try
            {
                var officeCalendar = CreateOfficeCalendar();
                outlookEntries = officeCalendar.GetCalendarEntriesInRange();
            }
            catch (System.Exception ex)
            {
                bSyncNow.Enabled = true;

                notifyIcon1.ShowBalloonTip(5, "outlook issue", "an error while reading from outlook: " + ex.Message, ToolTipIcon.Error);
                logboxout("an error while reading from outlook: " + ex.Message + "\n" + ex.StackTrace);
                return;
            }
            if (cbCreateFiles.Checked)
            {
                using (TextWriter tw = new StreamWriter("export_found_in_outlook.txt"))
                {
                    foreach (OutlookAppointment ai in outlookEntries)
                    {
                        tw.WriteLine(Signature(ai));
                    }
                    tw.Close();
                }
            }
            logboxout("Found " + outlookEntries.Count + " Outlook Calendar Entries.");
            logboxout("--------------------------------------------------");
            logboxout("Reading Google Calendar Entries...");

            List <Event> GoogleEntries = new List <Event>();

            try
            {
                GoogleEntries = GoogleCalendar.Instance.getCalendarEntriesInRange();
            }
            catch (System.Exception ex)
            {
                bSyncNow.Enabled = true;

                notifyIcon1.ShowBalloonTip(5, "google issue", "an error while reading from google: " + ex.Message, ToolTipIcon.Error);
                logboxout("an error while reading from google: " + ex.Message + "\n" + ex.StackTrace);
                return;
            }

            if (cbCreateFiles.Checked)
            {
                using (TextWriter tw = new StreamWriter("export_found_in_google.txt"))
                {
                    foreach (Event ev in GoogleEntries)
                    {
                        tw.WriteLine(Signature(ev));
                    }
                    tw.Close();
                }
            }
            logboxout("Found " + GoogleEntries.Count + " Google Calendar Entries.");
            logboxout("--------------------------------------------------");


            //  Make copies of each list of events (Not strictly needed)
            List <Event> GoogleEntriesToBeDeleted = new List <Event>(GoogleEntries);
            List <OutlookAppointment> OutlookEntriesToBeCreated = new List <OutlookAppointment>(outlookEntries);

            IdentifyGoogleAddDeletes(OutlookEntriesToBeCreated, GoogleEntriesToBeDeleted);

            //List<Event> GoogleEntriesToBeDeleted = IdentifyGoogleEntriesToBeDeleted(OutlookEntries, GoogleEntries);
            if (cbCreateFiles.Checked)
            {
                using (TextWriter tw = new StreamWriter("export_to_be_deleted.txt"))
                {
                    foreach (Event ev in GoogleEntriesToBeDeleted)
                    {
                        tw.WriteLine(Signature(ev));
                    }
                    tw.Close();
                }
            }
            logboxout(GoogleEntriesToBeDeleted.Count + " Google Calendar Entries to be deleted.");

            //OutlookEntriesToBeCreated ...in Google!
            //List<OutlookAppointment> OutlookEntriesToBeCreated = IdentifyOutlookEntriesToBeCreated(OutlookEntries, GoogleEntries);
            if (cbCreateFiles.Checked)
            {
                using (TextWriter tw = new StreamWriter("export_to_be_created.txt"))
                {
                    foreach (OutlookAppointment ai in OutlookEntriesToBeCreated)
                    {
                        tw.WriteLine(Signature(ai));
                    }
                    tw.Close();
                }
            }
            logboxout(OutlookEntriesToBeCreated.Count + " Entries to be created in Google.");
            logboxout("--------------------------------------------------");


            if (GoogleEntriesToBeDeleted.Count > 0)
            {
                logboxout("Deleting " + GoogleEntriesToBeDeleted.Count + " Google Calendar Entries...");
                foreach (Event ev in GoogleEntriesToBeDeleted)
                {
                    GoogleCalendar.Instance.deleteCalendarEntry(ev);
                }
                logboxout("Done.");
                logboxout("--------------------------------------------------");
            }

            if (OutlookEntriesToBeCreated.Count > 0)
            {
                logboxout("Creating " + OutlookEntriesToBeCreated.Count + " Entries in Google...");
                foreach (OutlookAppointment ai in OutlookEntriesToBeCreated)
                {
                    Event ev = new Event
                    {
                        Start = new EventDateTime(),
                        End   = new EventDateTime()
                    };

                    if (ai.AllDayEvent)
                    {
                        ev.Start.Date = ai.Start.ToString("yyyy-MM-dd");
                        ev.End.Date   = ai.End.ToString("yyyy-MM-dd");
                    }
                    else
                    {
                        //ev.Start.DateTime = ai.Start;
                        //ev.End.DateTime = ai.End;
                        ev.Start.DateTime = GoogleCalendar.Instance.GoogleTimeFrom(ai.Start);
                        ev.End.DateTime   = GoogleCalendar.Instance.GoogleTimeFrom(ai.End);
                    }
                    ev.Summary = ai.Subject;
                    if (cbAddDescription.Checked)
                    {
                        ev.Description = ai.Body;
                    }
                    ev.Location = ai.Location;


                    //consider the reminder set in Outlook
                    if (cbAddReminders.Checked && ai.ReminderSet)
                    {
                        ev.Reminders            = new Event.RemindersData();
                        ev.Reminders.UseDefault = false;
                        EventReminder reminder = new EventReminder();
                        reminder.Method        = "popup";
                        reminder.Minutes       = ai.ReminderMinutesBeforeStart;
                        ev.Reminders.Overrides = new List <EventReminder>();
                        ev.Reminders.Overrides.Add(reminder);
                    }

                    ev.Description = ai.Body;

                    // Set Attendees
                    if (cbAddAttendees.Checked)
                    {
                        var footer = new StringBuilder();
                        footer.Append(Environment.NewLine);
                        footer.Append(Environment.NewLine + "==============================================");
                        footer.Append(Environment.NewLine + "Added by OutlookGoogleSync:" + Environment.NewLine);
                        footer.Append(Environment.NewLine + "ORGANIZER: " + Environment.NewLine + ai.Organizer + Environment.NewLine);
                        footer.Append(Environment.NewLine + "REQUIRED: " + Environment.NewLine + splitAttendees(ai.RequiredAttendees) + Environment.NewLine);
                        footer.Append(Environment.NewLine + "OPTIONAL: " + Environment.NewLine + splitAttendees(ai.OptionalAttendees));
                        footer.Append(Environment.NewLine + "==============================================");

                        ev.Description = ev.Description + footer;
                    }

                    GoogleCalendar.Instance.addEntry(ev);
                }
                logboxout("Done.");
                logboxout("--------------------------------------------------");
            }

            DateTime SyncFinished = DateTime.Now;
            TimeSpan Elapsed      = SyncFinished - syncStarted;

            logboxout("Sync finished at " + SyncFinished.ToString());
            logboxout("Time needed: " + Elapsed.Minutes + " min " + Elapsed.Seconds + " s");

            bSyncNow.Enabled = true;
        }
示例#38
0
        public EventReminderModel(EventReminder eventReminder)
        {
            _eventReminder = eventReminder;

            LoadedTime = DateTime.Now;
        }