// possibly filter an event list by view or count public List<ZonelessEvent> Filter(string view, int count, DateTime from, DateTime to, string source, ZonelessEventStore es, Dictionary<string,object> args) { var events = es.events.CloneObject(); var bare_events = args.HasValue("bare_events", true); var is_html_renderer = args.HasValue("html_renderer", true); if (!String.IsNullOrEmpty(source)) events = SourceFilter(source, events); if (!String.IsNullOrEmpty(view)) events = ViewFilter(view, events); if (from != DateTime.MinValue && to != DateTime.MinValue) events = TimeFilter(from, to, events); if (! bare_events) // bracket the available range before (maybe) reducing to count es.RememberFirstAndLastAvailableDays(events); // not required for non-html renderers but no reason to exclude them if (count != 0) // includes case where bare_events is true events = CountFilter(count, events); if ( ! is_html_renderer ) // do nothing else for non-html views return events; else // post-process result set to yield ~500 day-aligned events { var from_to = new Dictionary<string, DateTime>(); if (bare_events) from_to = HandleBareEvents(from); else from_to = HandleClothedEvents(events); if (from_to == null) return events; else return TimeFilter((DateTime)from_to["from_date"], (DateTime)from_to["to_date"], events); } }