예제 #1
0
        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);
        }
예제 #2
0
        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);
        }