public static CalendarCalDavInfo[] ParseCalendarCalDavInfo(Stream stream)
        {
            var rootItem = LoadRootItem(stream);

            var responses = rootItem.Elements();

            var calendars = new List<CalendarCalDavInfo>();

            foreach (var res in responses)
            {
                var info = new CalendarCalDavInfo
                    {
                        Url = res.Elements(XName.Get("href", XmlNamespaces.NsDav)).Single().Value
                    };

                var propstat = res.Element(XName.Get("propstat", XmlNamespaces.NsDav));
                if (propstat != null)
                {
                    var status = propstat.GetIfExists(XName.Get("status", XmlNamespaces.NsDav));
                    if (status != "HTTP/1.1 200 OK") continue;
                }
                else continue;

                foreach (var prop in propstat.Elements(XName.Get("prop", XmlNamespaces.NsDav)))
                {
                    info.DisplayName = prop.GetIfExists(XName.Get("displayname", XmlNamespaces.NsDav));
                    info.GetCTag = prop.GetIfExists(XName.Get("getctag", XmlNamespaces.NsCalenderServer));
                }

                calendars.Add(info);
            }

            return calendars.ToArray();
        }
 /// <summary>
 /// Erstellt einen Kalendar zum speichern in der Datenbank aus
 /// </summary>
 /// <param name="calendar">Die Kalendarinformationen</param>
 /// <returns></returns>
 public static TableCalendar FromCalDavCalendarInfo(Calendar.ParsedCalendar.CalendarCalDavInfo calendar)
 {
     return(new TableCalendar()
     {
         Url = calendar.Url
         , GetCTag = calendar.GetCTag
         , DisplayName = calendar.DisplayName
     });
 }
        public void DisableCalendar(CalendarCalDavInfo calendar) {
            using (var context = new OwnCloudDataContext()) {
                var entity = (from o in context.Calendars where o.Url == calendar.Url select o).SingleOrDefault();

                if (entity != null)
                    context.Calendars.DeleteOnSubmit(entity);

                var eventsToDelete = context.Events.Where(o => o.CalendarId == entity.Id).ToArray();

                context.Events.DeleteAllOnSubmit(eventsToDelete);

                context.SubmitChanges();
            }
        }
        /// <summary>
        /// Lädt die Termine eines Kalendars
        /// </summary>
        /// <param name="cInfo">Die Information über den Kalendar</param>
        /// <param name="request">The request</param>
        public void LoadCalendarData(CalendarCalDavInfo cInfo, CalendarEventRequest request = null)
        {
            this.BeginHttpRequest(Address.CombineServerAddress(cInfo.Url));

            ContentTypeXml();
            this.SetMethod("REPORT");

            Request.Headers["Depth"] = "1";
            Request.Headers["Prefer"] = "return-minimal";

            if (request == null)
                request = new CalendarEventRequest();

            Request.BeginGetRequestStream(CalendarDataWriteRequest, request);
        }
        public void EnableCalendar(CalendarCalDavInfo calendar) {
            using (var context = new OwnCloudDataContext()) {
                var existingEntity =
                    (from o in context.Calendars where o.Url == calendar.Url select o).SingleOrDefault();

                if (existingEntity != null)
                    return;

                var entity = TableCalendar.FromCalDavCalendarInfo(calendar);
                entity.GetCTag = "";

                entity._accountId = this._accountId;

                context.Calendars.InsertOnSubmit(entity);
                context.SubmitChanges();
            }
        }