public virtual void Handle( LogUi ui, string name, LogEntry entry) { const byte one = 1; var r = this.runner; r?.Run <FieldHolder, UiReaderWriter, FilterChecker>( (holder, uiRW, checker) => { var today = DateTime.Today; r.Run <TimeProvider>(provider => { today = provider.Now().Date; }); if (uiRW.Read(ui, () => ui?.EndDate) < today) { return; } if (Interlocked.Read(ref holder.startedIf1) != one) { if (Interlocked.Read(ref holder.startedFirstTimeIf1) == one && checker.PassesFilters(ui, entry)) { r.Run <ICollection <LogEntry> >( refreshEntries => { refreshEntries.Add(entry); }, name); } return; } if (checker.PassesFilters(ui, entry)) { r.Run <EntryConverter>(converter => { var xt = converter.Convert(entry, name); uiRW.Write( ui, () => { ui?.AddToTop(xt); }); }); } }, name); }
public virtual void Handle( LogUi ui, Do unsubscribe, Do subscribe, string name) { var r = this.runner; r?.Run <FieldHolder, Log, SettingsHolder>( (fields, log, settings) => { Interlocked.Exchange( ref fields.startedIf1, 1); if (Interlocked.Exchange( ref fields.startedFirstTimeIf1, 1) != 1) { r.Run <EntryReloader>(reloader => { reloader.Reload(ui, name); }); return; } if (Interlocked.Exchange( ref fields.refreshOnStartIf1, 0) == 1) { r.Run <EntryReloader>(reloader => { reloader.Reload(ui, name); }); return; } if (settings.ResetOnStart) { r.Run <DateAndFilterResetter>(resetter => { resetter.Reset( ui, unsubscribe, subscribe, name); }); return; } r.Run < ICollection <LogEntry>, UiReaderWriter, EntryConverter>( (refreshEntries, uiRW, converter) => { foreach (var entry in refreshEntries) { var xt = converter.Convert(entry, name); uiRW.WriteSync( ui, () => { ui?.AddToTop(xt); }); } }, name); }, name, name, name); }