Beispiel #1
0
        static async Task Main(string[] args)
        {
            if (args.Length > 0)
            {
                Settings = Settings.CreateOverride(args);
            }

            if (Settings.MigrateOldLibrarianData.Length > 0)
            {
                Migrate();
                return;
            }

            if (Settings.Log)
            {
                Logger.SetLogger(new Logger("log.txt"));
            }

            AppDomain.CurrentDomain.UnhandledException += (sender, eventArgs)
                                                          => Logger.Instance.Log(eventArgs.ExceptionObject.ToString() ?? "Unknown Exception", Logger.Level.Error);

            State = new State(Settings);

            using UiHub uiHub         = UiHub.Register(80, 20, true);
            uiHub.Title               = $"Librarian v{Version}";
            uiHub.MainLoopInterval    = Settings.UiInputInterval;
            uiHub.ViewUpdateReduction = Settings.UiRenderReduction;

            InitView     initView     = new InitView(uiHub.AddView("Init"));
            MainView     mainView     = new MainView(uiHub.AddView("Main"));
            DownloadView downloadView = new DownloadView(uiHub.AddView("Download"));
            ScanView     scanView     = new ScanView(uiHub.AddView("Scan"));

            State.PropertyChanged += (s, e) =>
            {
                switch (e.PropertyName)
                {
                case nameof(State.Current):
                    switch (State.Current)
                    {
                    case State.View.Init:
                        uiHub.SwitchView(initView.Name);
                        break;

                    case State.View.Main:
                        uiHub.SwitchView(mainView.Name);
                        break;

                    case State.View.Download:
                        uiHub.SwitchView(downloadView.Name);
                        break;

                    case State.View.Scan:
                        uiHub.SwitchView(scanView.Name);
                        break;
                    }
                    break;

                case nameof(State.InitCurrentPath):
                    initView.UpdateView(State.InitCurrentPath);
                    break;

                default:
                    mainView.UpdateView(State);
                    break;
                }
            };

            State.DownloadState.PropertyChanged += (s, e) => downloadView.UpdateView(State.DownloadState);

            State.ScanState.PropertyChanged += (s, e) => scanView.UpdateView(State.ScanState);

            downloadView.UpdateView(State.DownloadState);
            scanView.UpdateView(State.ScanState);

            CancellationTokenSource tokenSource = new CancellationTokenSource();

            Logger.Instance.Log($"Starting Librarian v{Version}");
            Task run = Task.Run(() => Run(tokenSource.Token), tokenSource.Token);

            uiHub.Run();
            tokenSource.Cancel();
            await run;

            Logger.Instance.Log("Stopping");
        }