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);
}
}