private CalendarItemCollection LoadLastItems()
        {
            var lastItems = default(CalendarItemCollection);

            try
            {
                using (var r = new StreamReader(_pathLastItems, _encoding))
                {
                    var lastItemsData = (LastCalendarItemsData)_serializer.Deserialize(r);
//                    foreach (var calendarItem in lastItemsData.CalendarItems)
//                    {
//                        calendarItem.LastModified = lastItemsData.LastModified;
//                        calendarItem.Changed = false;
//                    }
                    if (lastItemsData.IsValid)
                    {
                        lastItems = lastItemsData.CalendarItems;
                    }
                }
            }
            catch (Exception)
            {
            }
            if (lastItems == null)
            {
                lastItems = new CalendarItemCollection();
            }
            return(lastItems);
        }
 public void Apply(CalendarItemCollection calendarItems)
 {
     Log(0, "更新開始");
     foreach (var calendarItem in calendarItems)
     {
         try
         {
             if (calendarItem.Changed)
             {
                 if (calendarItem.ID == string.Empty)
                 {
                     CreateItem(calendarItem);
                 }
                 else if (calendarItem.Cancelled)
                 {
                     DeleteItem(calendarItem);
                 }
                 else
                 {
                     UpdateItem(calendarItem);
                 }
             }
         }
         catch (Exception ex)
         {
             Log(0, ex);
         }
     }
     Log(0, "更新終了");
 }
示例#3
0
        /// <summary>
        /// Creates a new <see cref="Calendar"/> control
        /// </summary>
        public Calendar()
        {
            SetStyle(ControlStyles.ResizeRedraw, true);
            SetStyle(ControlStyles.Selectable, true);

            DoubleBuffered = true;

            _selectedElements = new List<CalendarSelectableElement>();
            _items = new CalendarItemCollection(this);
            _renderer = new CalendarProfessionalRenderer(this);
            _maximumFullDays = 8;
            _maximumViewDays = 35;

            HighlightRanges = new CalendarHighlightRange[] {
                new CalendarHighlightRange( DayOfWeek.Monday, new TimeSpan(8,0,0), new TimeSpan(17,0,0)),
                new CalendarHighlightRange( DayOfWeek.Tuesday, new TimeSpan(8,0,0), new TimeSpan(17,0,0)),
                new CalendarHighlightRange( DayOfWeek.Wednesday, new TimeSpan(8,0,0), new TimeSpan(17,0,0)),
                new CalendarHighlightRange( DayOfWeek.Thursday, new TimeSpan(8,0,0), new TimeSpan(17,0,0)),
                new CalendarHighlightRange( DayOfWeek.Friday, new TimeSpan(8,0,0), new TimeSpan(17,0,0)),
            };

            _timeScale = CalendarTimeScale.ThirtyMinutes;
            SetViewRange(DateTime.Now, DateTime.Now.AddDays(2));

            _itemsDateFormat = "dd/MMM";
            _itemsTimeFormat = "hh:mm tt";
            _allowItemEdit = true;
            _allowNew = true;
            _allowItemResize = true;
        }
示例#4
0
        private Packet GetRange(GetRangeRequest req)
        {
            var res = new GetRangeResponse();

            try
            {
                var calendarItems  = new CalendarItemCollection();
                var calendarFolder = _outlookApp.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar);
                var filter         = string.Format("[End] > '{0}' and [Start] < '{1}'", req.Start.ToString("g"), req.End.ToString("g"));
                var appoItems      = calendarFolder.Items.Restrict(filter);
                foreach (Outlook.AppointmentItem appoItem in appoItems)
                {
                    if (appoItem.RecurrenceState != Outlook.OlRecurrenceState.olApptNotRecurring)
                    {
                        continue;
                    }
                    // filterでうまくフィルタできなかったことがあるので、ここで再チェックする
                    if ((appoItem.End >= req.Start) && (appoItem.Start < req.End))
                    {
                        _appointmentItems.Add(appoItem);
                        var calendarItem = CreateCalendarItem(appoItem);
                        calendarItems.Add(calendarItem);
                    }
                }
                res.CalendarItems = calendarItems;
            }
            catch (Exception ex)
            {
                res.ErrorMessage = ex.Message;
            }
            return(res);
        }
        private void DumpCalendarItemCollection(CalendarItemCollection calendarItems, string fileName)
        {
            var enc = new UTF8Encoding(false);

            using (var w = new StreamWriter(fileName, false, enc))
            {
                XmlSerializer serializer = new XmlSerializer(typeof(CalendarItemCollection));
                serializer.Serialize(w, calendarItems);
            }
        }
示例#6
0
        public void Apply(CalendarItemCollection calendarItems, DateTime lastModified)
        {
            CalendarItemCollection results       = _client.Apply(calendarItems);
            LastCalendarItemsData  lastItemsData = new LastCalendarItemsData();

            lastItemsData.CalendarItems = results;
            lastItemsData.LastModified  = lastModified;
            using (var w = new StreamWriter(_pathLastItems, false, _encoding))
            {
                _serializer.Serialize(w, lastItemsData);
            }
        }
        public void Apply(CalendarItemCollection calendarItems, DateTime lastModified)
        {
#if false
            DumpCalendarItemCollection(calendarItems, @"d:\temp\post.xml");
#endif
            CalendarItemCollection results       = _client.Apply(calendarItems);
            LastCalendarItemsData  lastItemsData = new LastCalendarItemsData();
            lastItemsData.Version       = LastCalendarItemsData.GetVersion();
            lastItemsData.CalendarItems = results;
            lastItemsData.LastModified  = lastModified;
            using (var w = new StreamWriter(_pathLastItems, false, _encoding))
            {
                _serializer.Serialize(w, lastItemsData);
            }
        }
        public CalendarItemCollection GetRange(DateTime start, DateTime end)
        {
            var calendarItems = new CalendarItemCollection();
            var req           = _service.Events.List(_calendarID);

            req.SingleEvents = false;
            req.ShowDeleted  = true;
            req.TimeMin      = start;
            req.TimeMax      = end;
            string pageToken = null;

            do
            {
                req.PageToken = pageToken;
                var events = req.Execute();
                foreach (Event ev in events.Items)
                {
                    if (ev.Recurrence != null)
                    {
                        // 繰り返しイベントは同期の対象外
                        continue;
                    }
                    var sd = GetDateTime(ev.Start);
                    var ed = GetDateTime(ev.End);
                    if ((ed <= start) || (end <= start))
                    {
                        // 範囲外は無視する
                        continue;
                    }
                    _eventDict.Add(ev);
                    CalendarItem calendarItem = CreateCalendarItem(ev);
                    calendarItems.Add(calendarItem);
                }
                events.NextPageToken = pageToken;
                pageToken            = events.NextPageToken;
            }while (pageToken != null);
            return(calendarItems);
        }