public MainWindow()
        {
            InitializeComponent();

            App.Tracker.Track(this);

            WindowInitialPositionHelpers.EnsureWindowIsVisible(this);

            InfoTitle =
                $"Pointless Waymarks CMS - Built On {GetBuildDate(Assembly.GetEntryAssembly())} - Commit {ThisAssembly.Git.Commit} {(ThisAssembly.Git.IsDirty ? "(Has Local Changes)" : string.Empty)}";

            ShowSettingsFileChooser = true;

            DataContext = this;

            StatusContext = new StatusControlContext();

            GenerateIndexCommand = new Command(() => StatusContext.RunNonBlockingTask(GenerateIndex));
            OpenIndexUrlCommand  = new Command(() => StatusContext.RunNonBlockingTask(OpenIndexUrl));

            GenerateAllHtmlCommand = new Command(() => StatusContext.RunBlockingTask(GenerateAllHtml));
            ConfirmOrGenerateAllPhotosImagesFilesCommand = new Command(() =>
                                                                       StatusContext.RunBlockingTask(ConfirmOrGenerateAllPhotosImagesFiles));
            GenerateAllHtmlAndCleanAndResizePicturesCommand = new Command(() =>
                                                                          StatusContext.RunBlockingTask(GenerateAllHtmlAndCleanAndResizePictures));
            CleanAndResizePicturesCommand = new Command(() => StatusContext.RunBlockingTask(CleanAndResizePictures));

            NewPhotoContentCommand = new Command(() => StatusContext.RunNonBlockingTask(NewPhotoContent));
            GenerateHtmlForAllPhotoContentCommand =
                new Command(() => StatusContext.RunBlockingTask(GenerateAllPhotoHtml));

            NewPostContentCommand = new Command(() => StatusContext.RunNonBlockingTask(NewPostContent));
            GenerateHtmlForAllPostContentCommand =
                new Command(() => StatusContext.RunBlockingTask(GenerateAllPostHtml));

            NewImageContentCommand = new Command(() => StatusContext.RunNonBlockingTask(NewImageContent));
            GenerateHtmlForAllImageContentCommand =
                new Command(() => StatusContext.RunBlockingTask(GenerateAllImageHtml));

            NewFileContentCommand = new Command(() => StatusContext.RunNonBlockingTask(NewFileContent));
            GenerateHtmlForAllFileContentCommand =
                new Command(() => StatusContext.RunBlockingTask(GenerateAllFileHtml));

            NewLinkContentCommand = new Command(() => StatusContext.RunNonBlockingTask(NewLinkContent));

            GenerateAllTagHtmlCommand = new Command(() => StatusContext.RunBlockingTask(GenerateAllTagHtml));

            GenerateDailyGalleryHtmlCommand =
                new Command(() => StatusContext.RunBlockingTask(GenerateAllDailyPhotoGalleriesHtml));
            GenerateCamerRollCommand = new Command(() => StatusContext.RunBlockingTask(GenerateCameraRollHtml));

            PurgeInvalidPhotoDirectoriesCommand = new Command(async() =>
                                                              await StructureAndMediaContent.PurgePhotoDirectoriesNotFoundInCurrentDatabase(
                                                                  StatusContext.ProgressTracker()));

            ImportJsonFromDirectoryCommand = new Command(() => StatusContext.RunBlockingTask(ImportJsonFromDirectory));

            ToggleDiagnosticLoggingCommand = new Command(() =>
                                                         UserSettingsSingleton.LogDiagnosticEvents = !UserSettingsSingleton.LogDiagnosticEvents);

            ExceptionEventsReportCommand  = new Command(() => StatusContext.RunNonBlockingTask(ExceptionEventsReport));
            DiagnosticEventsReportCommand = new Command(() => StatusContext.RunNonBlockingTask(DiagnosticEventsReport));
            AllEventsReportCommand        = new Command(() => StatusContext.RunNonBlockingTask(AllEventsReport));

            SettingsFileChooser = new SettingsFileChooserControlContext(StatusContext, RecentSettingsFilesNames);

            SettingsFileChooser.SettingsFileUpdated += SettingsFileChooserOnSettingsFileUpdatedEvent;

            StatusContext.RunFireAndForgetTaskWithUiToastErrorReturn(CleanUpTemporaryFiles);
        }
        public MainWindow()
        {
            InitializeComponent();

            App.Tracker.Track(this);

            WindowInitialPositionHelpers.EnsureWindowIsVisible(this);

            InfoTitle =
                $"Pointless Waymarks CMS - Built On {GetBuildDate(Assembly.GetEntryAssembly())} - Commit {ThisAssembly.Git.Commit} {(ThisAssembly.Git.IsDirty ? "(Has Local Changes)" : string.Empty)}";

            ShowSettingsFileChooser = true;

            DataContext = this;

            StatusContext = new StatusControlContext();

            //Common
            GenerateChangedHtmlCommand = StatusContext.RunBlockingTaskCommand(GenerateChangedHtml);

            RemoveUnusedFilesFromMediaArchiveCommand =
                StatusContext.RunBlockingTaskCommand(RemoveUnusedFilesFromMediaArchive);

            RemoveUnusedFoldersAndFilesFromContentCommand =
                StatusContext.RunBlockingTaskCommand(RemoveUnusedFoldersAndFilesFromContent);

            GenerateIndexCommand = StatusContext.RunBlockingActionCommand(() =>
                                                                          HtmlGenerationGroups.GenerateIndex(null, StatusContext.ProgressTracker()));

            CheckAllContentForInvalidBracketCodeContentIdsCommand =
                StatusContext.RunBlockingTaskCommand(CheckAllContentForInvalidBracketCodeContentIds);

            //All/Forced Regeneration
            GenerateAllHtmlCommand = StatusContext.RunBlockingTaskCommand(GenerateAllHtml);

            ConfirmOrGenerateAllPhotosImagesFilesCommand =
                StatusContext.RunBlockingTaskCommand(ConfirmOrGenerateAllPhotosImagesFiles);

            DeleteAndResizePicturesCommand = StatusContext.RunBlockingTaskCommand(CleanAndResizePictures);

            //Diagnostics
            ToggleDiagnosticLoggingCommand = new Command(() =>
                                                         UserSettingsSingleton.LogDiagnosticEvents = !UserSettingsSingleton.LogDiagnosticEvents);

            ExceptionEventsHtmlReportCommand =
                StatusContext.RunNonBlockingTaskCommand(Reports.ExceptionEventsHtmlReport);
            DiagnosticEventsHtmlReportCommand =
                StatusContext.RunNonBlockingTaskCommand(Reports.DiagnosticEventsHtmlReport);
            ExceptionEventsExcelReportCommand =
                StatusContext.RunNonBlockingTaskCommand(Reports.ExceptionEventsExcelReport);
            DiagnosticEventsExcelReportCommand =
                StatusContext.RunNonBlockingTaskCommand(Reports.DiagnosticEventsExcelReport);
            AllEventsHtmlReportCommand  = StatusContext.RunNonBlockingTaskCommand(Reports.AllEventsHtmlReport);
            AllEventsExcelReportCommand = StatusContext.RunNonBlockingTaskCommand(Reports.AllEventsExcelReport);

            //Main Parts
            GenerateSiteResourcesCommand = StatusContext.RunBlockingTaskCommand(async() =>
                                                                                await FileManagement.WriteSiteResourcesToGeneratedSite(StatusContext.ProgressTracker()));

            WriteStyleCssFileCommand = StatusContext.RunBlockingTaskCommand(async() =>
                                                                            await FileManagement.WriteStylesCssToGeneratedSite(StatusContext.ProgressTracker()));

            GenerateHtmlForAllFileContentCommand = StatusContext.RunBlockingTaskCommand(async() =>
                                                                                        await HtmlGenerationGroups.GenerateAllFileHtml(null, StatusContext.ProgressTracker()));

            GenerateHtmlForAllImageContentCommand = StatusContext.RunBlockingTaskCommand(async() =>
                                                                                         await HtmlGenerationGroups.GenerateAllImageHtml(null, StatusContext.ProgressTracker()));

            GenerateHtmlForAllNoteContentCommand = StatusContext.RunBlockingTaskCommand(async() =>
                                                                                        await HtmlGenerationGroups.GenerateAllNoteHtml(null, StatusContext.ProgressTracker()));

            GenerateHtmlForAllPhotoContentCommand = StatusContext.RunBlockingTaskCommand(async() =>
                                                                                         await HtmlGenerationGroups.GenerateAllPhotoHtml(null, StatusContext.ProgressTracker()));

            GenerateHtmlForAllPostContentCommand = StatusContext.RunBlockingTaskCommand(async() =>
                                                                                        await HtmlGenerationGroups.GenerateAllPostHtml(null, StatusContext.ProgressTracker()));

            GenerateHtmlForAllPointContentCommand = StatusContext.RunBlockingTaskCommand(async() =>
                                                                                         await HtmlGenerationGroups.GenerateAllPointHtml(null, StatusContext.ProgressTracker()));

            GenerateHtmlForAllLineContentCommand = StatusContext.RunBlockingTaskCommand(async() =>
                                                                                        await HtmlGenerationGroups.GenerateAllLineHtml(null, StatusContext.ProgressTracker()));

            GenerateHtmlForAllGeoJsonContentCommand = StatusContext.RunBlockingTaskCommand(async() =>
                                                                                           await HtmlGenerationGroups.GenerateAllGeoJsonHtml(null, StatusContext.ProgressTracker()));

            //Derived
            GenerateAllListHtmlCommand = StatusContext.RunBlockingActionCommand(() =>
                                                                                HtmlGenerationGroups.GenerateAllListHtml(null, StatusContext.ProgressTracker()));

            GenerateAllTagHtmlCommand = StatusContext.RunBlockingActionCommand(() =>
                                                                               HtmlGenerationGroups.GenerateAllTagHtml(null, StatusContext.ProgressTracker()));

            GenerateCameraRollCommand = StatusContext.RunBlockingTaskCommand(async() =>
                                                                             await HtmlGenerationGroups.GenerateCameraRollHtml(null, StatusContext.ProgressTracker()));

            GenerateDailyGalleryHtmlCommand = StatusContext.RunBlockingTaskCommand(async() =>
                                                                                   await HtmlGenerationGroups.GenerateAllDailyPhotoGalleriesHtml(null, StatusContext.ProgressTracker()));

            //Rebuild
            ImportJsonFromDirectoryCommand = StatusContext.RunBlockingTaskCommand(ImportJsonFromDirectory);

            SettingsFileChooser = new SettingsFileChooserControlContext(StatusContext, RecentSettingsFilesNames);

            SettingsFileChooser.SettingsFileUpdated += SettingsFileChooserOnSettingsFileUpdatedEvent;

            StatusContext.RunFireAndForgetTaskWithUiToastErrorReturn(CleanupTemporaryFiles);
        }