public static void MergeIcs(Calinfo calinfo) { var id = calinfo.id; GenUtils.LogMsg("status", "MergeIcs: " + id, null); List<string> suffixes = new List<string>() { "ical" }; if (calinfo.hub_enum == HubType.where) foreach (NonIcalType type in Enum.GetValues(typeof(CalendarAggregator.NonIcalType))) { if (Utils.UseNonIcalService(type, settings, calinfo) == true) suffixes.Add(type.ToString()); } try { var all_ical = new iCalendar(); Collector.AddTimezoneToDDayICal(all_ical, calinfo.tzinfo); foreach (var suffix in suffixes) // todo: skip if disabled in settings { var url = MakeIcsUrl(id, suffix); try { var feedtext = HttpUtils.FetchUrl(url).DataAsString(); var sr = new StringReader(feedtext); var ical = iCalendar.LoadFromStream(sr).First().Calendar; all_ical.MergeWith(ical); } catch (Exception e) { GenUtils.LogMsg("warning", "MergeICS: " + url, e.Message); } } var serializer = new DDay.iCal.Serialization.iCalendar.iCalendarSerializer(all_ical); var icsbytes = Encoding.UTF8.GetBytes(serializer.SerializeToString(all_ical)); bs.PutBlob(id, id + ".ics", new Hashtable(), icsbytes, "text/calendar"); } catch (Exception e) { GenUtils.LogMsg("exception", "MergeIcs: " + id, e.Message + e.StackTrace); } }