Ejemplo n.º 1
0
        public virtual void Handle(
            HomeUi ui)
        {
            var r = this.runner;

            var accepted = true;

            r?.Run <GlobalSettingsHolder>(settings =>
            {
                if (settings.Prompt)
                {
                    r.Run <UiReaderWriter, Messenger>((uiRW, m) =>
                    {
                        accepted = uiRW.Read(
                            m.Subscriber,
                            () => m.Question(
                                @"Really clock out?")) ==
                                   Response.Yes;
                    });
                }
            });

            if (!accepted)
            {
                return;
            }

            r?.Run <xofz.Framework.Timer>(t =>
            {
                t.Stop();
                r.Run <LatchHolder>(timerLatch =>
                {
                    timerLatch.Latch.WaitOne();
                },
                                    DependencyNames.Latch);
            },
                                          DependencyNames.Timer);

            r?.Run <
                UiReaderWriter,
                TimestampWriter,
                DataWatcher>(
                (uiRW, writer, watcher) =>
            {
                uiRW.WriteSync(
                    ui,
                    () =>
                {
                    ui.OutKeyVisible = false;
                });
                watcher.Stop();
                writer.Write();
                watcher.Start();
            });

            r?.Run <StartHandler>(handler =>
            {
                handler.Handle(ui);
            });
        }
Ejemplo n.º 2
0
 public SetupHomeCommand(
     HomeUi ui,
     MethodWeb web)
 {
     this.ui  = ui;
     this.web = web;
 }
Ejemplo n.º 3
0
        public virtual void Handle(
            HomeUi ui,
            Do presentEditor)
        {
            var r = this.runner;

            presentEditor?.Invoke();
        }
Ejemplo n.º 4
0
 public HomePresenter(
     HomeUi ui,
     ShellUi shell,
     MethodWeb web)
     : base(ui, shell)
 {
     this.ui  = ui;
     this.web = web;
 }
Ejemplo n.º 5
0
 public HomePresenter(
     HomeUi ui,
     MethodWeb web)
     : base(ui, null)
 {
     this.ui  = ui;
     this.web = web;
     this.timerHandlerFinished = new ManualResetEvent(true);
 }
Ejemplo n.º 6
0
        public virtual void Handle(
            HomeUi ui)
        {
            var r = this.runner;

            r?.Run <UiReaderWriter>(uiRW =>
            {
                r.Run <
                    StatisticsCalculator,
                    TimestampReader>(
                    (calc, reader) =>
                {
                    var currentlyIn    = calc.ClockedIn();
                    var editKeyEnabled = false;
                    foreach (var timestamp in reader.Read())
                    {
                        editKeyEnabled = true;
                        break;
                    }

                    uiRW.Write(ui, () =>
                    {
                        ui.InKeyVisible   = !currentlyIn;
                        ui.OutKeyVisible  = currentlyIn;
                        ui.EditKeyEnabled = editKeyEnabled;
                    });
                });

                r.Run <VersionReader>(
                    vr =>
                {
                    var appVersion  = vr.Read();
                    var coreVersion = vr.ReadCoreVersion();
                    uiRW.Write(
                        ui,
                        () =>
                    {
                        ui.Version     = appVersion;
                        ui.CoreVersion = coreVersion;
                    });
                });

                r.Run <TitleUi, GlobalSettingsHolder>(
                    (shell, settings) =>
                {
                    var title = settings.TitleText;
                    uiRW.Write(
                        shell,
                        () =>
                    {
                        shell.Title = title;
                    });
                });
            });
        }
Ejemplo n.º 7
0
        public virtual void Handle(
            TimestampEditUi ui,
            HomeNavUi hnUi,
            HomeUi homeUi)
        {
            var r = this.runner;

            r?.Run <UiReaderWriter>(uiRW =>
            {
                r.Run <TimestampReader>(reader =>
                {
                    var allColl = reader.ReadAll();

                    var ll = allColl as XLinkedList <DateTime>
                             ?? XLinkedList <DateTime> .Create(allColl);
                    const byte one = 1;
                    if (ll.Count < one)
                    {
                        return;
                    }

                    var lastTimestamp = ll
                                        .Tail;
                    uiRW.Write(
                        ui,
                        () =>
                    {
                        ui.EditedTimestamp = lastTimestamp;
                    });
                });

                r.Run <SettingsHolder>(settings =>
                {
                    settings.LastVisitedKeyLabel = uiRW.Read(
                        hnUi,
                        () => hnUi.ActiveKeyLabel);
                    uiRW.Write(
                        hnUi,
                        () =>
                    {
                        hnUi.ActiveKeyLabel = null;
                    });
                });

                uiRW.Write(
                    homeUi,
                    () =>
                {
                    homeUi.Editing = true;
                });
            });
        }
Ejemplo n.º 8
0
 public SetupHomeCommand(
     HomeUi ui,
     ShellUi shell,
     Gen <MethodRunner, TimestampReaderWriter> newReaderWriter,
     Gen <MethodWeb, DataWatcher> newDataWatcher,
     MethodWeb web)
 {
     this.ui              = ui;
     this.shell           = shell;
     this.newReaderWriter = newReaderWriter;
     this.newDataWatcher  = newDataWatcher;
     this.web             = web;
 }
Ejemplo n.º 9
0
        public virtual void Handle(
            HomeUi homeUi)
        {
            var r = this.runner;

            r?.Run <UiReaderWriter>(uiRW =>
            {
                uiRW.Write(
                    homeUi,
                    () =>
                {
                    homeUi.Editing = false;
                });
            });
        }
Ejemplo n.º 10
0
        public virtual void Handle(
            HomeUi ui)
        {
            var r = this.runner;

            r?.Run <LatchHolder>(timerLatch =>
            {
                timerLatch.Latch.Reset();
            },
                                 DependencyNames.Latch);
            r?.Run <
                UiReaderWriter,
                StatisticsCalculator,
                PaddedTimeSpanViewer,
                TimestampReader>(
                (uiRW, calc, viewer, reader) =>
            {
                var timeThisWeek   = calc.TimeWorkedThisWeek();
                var timeToday      = calc.TimeWorkedToday();
                var thisWeekString = viewer.ReadableString(timeThisWeek);
                var todayString    = viewer.ReadableString(timeToday);
                var outKeyVisible  = calc.ClockedIn();
                var editKeyEnabled = false;
                foreach (var timestamp in reader.Read())
                {
                    editKeyEnabled = true;
                    break;
                }

                uiRW.Write(
                    ui,
                    () =>
                {
                    ui.EditKeyEnabled     = editKeyEnabled;
                    ui.TimeWorkedThisWeek = thisWeekString;
                    ui.TimeWorkedToday    = todayString;
                    ui.InKeyVisible       = !outKeyVisible;
                    ui.OutKeyVisible      = outKeyVisible;
                });
            });

            r?.Run <LatchHolder>(timerLatch =>
            {
                timerLatch.Latch.Set();
            },
                                 DependencyNames.Latch);
        }
Ejemplo n.º 11
0
        public virtual void Handle(
            HomeUi ui)
        {
            var r = this.runner;

            r?.Run <TimerHandler>(handler =>
            {
                handler.Handle(ui);
            });
            r?.Run <xofz.Framework.Timer, GlobalSettingsHolder>(
                (t, settings) =>
            {
                var interval = settings.TimerIntervalSeconds;
                if (interval < 1)
                {
                    interval = 1;
                }

                t.Start(interval * 1000);
            },
                DependencyNames.Timer);
        }
Ejemplo n.º 12
0
        protected virtual void onBootstrap()
        {
            var s = this.mainShell;

            if (s == null)
            {
                return;
            }

            var m = this.newMessenger?.Invoke();

            if (m != null)
            {
                m.Subscriber = s;
            }

            var e = this.executor;

            e?.Execute(new SetupMethodWebCommand(
                           new MethodWebV2(),
                           m,
                           this.newConfigSaver,
                           this.newSettingsProvider));

            var w = e?.Get <SetupMethodWebCommand>()?.W;

            w?.Run <EventSubscriber>(sub =>
            {
                var cd = AppDomain.CurrentDomain;
                UnhandledExceptionEventHandler handler = this.handleException;
                sub.Subscribe(
                    cd,
                    nameof(cd.UnhandledException),
                    handler);
            });
            w?.RegisterDependency(s);

            HomeUi          homeUi       = null;
            HomeNavUi       homeNavUi    = null;
            StatisticsUi    statsUi      = null;
            TimestampsUi    timestampsUi = null;
            TimestampEditUi editUi       = null;
            DailyUi         dailyUi      = null;
            ConfigUi        configUi     = null;
            LicenseUi       licenseUi    = null;

            w?.Run <UiReaderWriter, Lotter>(
                (uiRW, lotter) =>
            {
                uiRW.WriteSync(
                    s,
                    () =>
                {
                    homeUi       = this.newHomeUi?.Invoke();
                    homeNavUi    = this.newHomeNavUi?.Invoke(lotter);
                    statsUi      = this.newStatsUi?.Invoke();
                    timestampsUi = this.newTimestampsUi?.Invoke(lotter);
                    editUi       = this.newEditUi?.Invoke();
                    dailyUi      = this.newDailyUi?.Invoke(lotter);
                    configUi     = this.newConfigUi?.Invoke();
                    licenseUi    = this.newLicenseUi?.Invoke(s);
                });
            });

            var homeFinished       = new ManualResetEvent(false);
            var homeNavFinished    = new ManualResetEvent(false);
            var statsFinished      = new ManualResetEvent(false);
            var editFinished       = new ManualResetEvent(false);
            var timestampsFinished = new ManualResetEvent(false);
            var dailyFinished      = new ManualResetEvent(false);
            var mainFinished       = new ManualResetEvent(false);
            var shutdownFinished   = new ManualResetEvent(false);
            var licenseFinished    = new ManualResetEvent(false);
            var configFinished     = new ManualResetEvent(false);

            w?.Run <Do <Do> >(invoker =>
            {
                invoker.Invoke(
                    () =>
                {
                    e?.Execute(
                        new SetupHomeCommand(
                            homeUi,
                            s,
                            this.newReaderWriter,
                            this.newDataWatcher,
                            w));
                    homeFinished.Set();
                });

                invoker.Invoke(
                    () =>
                {
                    e?.Execute(
                        new SetupHomeNavCommand(
                            homeNavUi,
                            s.NavUi,
                            new NavigatorNavLogicReader(w),
                            w));
                    homeNavFinished.Set();
                });

                invoker.Invoke(
                    () =>
                {
                    e?.Execute(
                        new SetupStatisticsCommand(
                            statsUi,
                            homeUi,
                            w));
                    statsFinished.Set();
                });

                invoker.Invoke(
                    () =>
                {
                    e?.Execute(
                        new SetupTimestampEditCommand(
                            editUi,
                            homeUi,
                            w));
                    editFinished.Set();
                });

                invoker.Invoke(
                    () =>
                {
                    e?.Execute(
                        new SetupMainCommand(
                            s,
                            w,
                            new SettingsHolder()));
                    mainFinished.Set();
                });

                invoker.Invoke(
                    () =>
                {
                    e?.Execute(
                        new SetupShutdownCommand(
                            w));
                    shutdownFinished.Set();
                });

                invoker.Invoke(
                    () =>
                {
                    e?.Execute(
                        new SetupLicenseCommand(
                            licenseUi,
                            w));
                    licenseFinished.Set();
                });

                homeFinished.WaitOne();

                invoker.Invoke(
                    () =>
                {
                    e?.Execute(
                        new SetupTimestampsCommand(
                            timestampsUi,
                            homeUi,
                            w));
                    timestampsFinished.Set();
                });

                invoker.Invoke(
                    () =>
                {
                    e?.Execute(
                        new SetupDailyCommand(
                            dailyUi,
                            homeUi,
                            new NavigatorUiReader(w),
                            w));
                    dailyFinished.Set();
                });
            });

            // update to single-file format
            w?.Run <FileTimestampManager>(manager =>
            {
                manager.ConvertToSingleFile();
            });

            w?.Run <DataWatcher>(watcher =>
            {
                watcher.Start();
            });

            w?.Run <Navigator>(
                nav =>
            {
                nav.Present <HomePresenter>();

                w.Run <Do <Do> >(invoker =>
                {
                    homeNavFinished.WaitOne();
                });

                nav.PresentFluidly <HomeNavPresenter>();

                w.Run <Do <Do> >(invoker =>
                {
                    timestampsFinished.WaitOne();
                });

                nav.PresentFluidly <TimestampsPresenter>();
            });

            w?.Run <Do <Do> >(invoker =>
            {
                dailyFinished.WaitOne();
                invoker.Invoke(() =>
                {
                    e?.Execute(
                        new SetupConfigCommand(
                            configUi,
                            homeUi,
                            w));
                    configFinished.Set();
                });

                statsFinished.WaitOne();
                editFinished.WaitOne();
                mainFinished.WaitOne();
                shutdownFinished.WaitOne();
                licenseFinished.WaitOne();
                configFinished.WaitOne();
            });
        }
Ejemplo n.º 13
0
 public HomeUiLoadedEventArgs(HomeUi homeUi)
 {
     this.homeUi = homeUi;
 }