From c1b2843b712fe7472ca7c6159427cf57f3ba381f Mon Sep 17 00:00:00 2001 From: Robin Munn Date: Fri, 25 Oct 2024 08:52:07 +0700 Subject: [PATCH] FixFwData now does real work --- backend/FixFwData/FixFwData.csproj | 11 +++-- backend/FixFwData/Program.cs | 71 +++++++++++++++++++++++++++++- 2 files changed, 74 insertions(+), 8 deletions(-) diff --git a/backend/FixFwData/FixFwData.csproj b/backend/FixFwData/FixFwData.csproj index 687b8f4cf0..7c217f1732 100644 --- a/backend/FixFwData/FixFwData.csproj +++ b/backend/FixFwData/FixFwData.csproj @@ -7,10 +7,9 @@ enable - - - - - + + + + + diff --git a/backend/FixFwData/Program.cs b/backend/FixFwData/Program.cs index 42431536ad..e403836fef 100644 --- a/backend/FixFwData/Program.cs +++ b/backend/FixFwData/Program.cs @@ -1,2 +1,69 @@ -bool doNothing; // Basic FixFwData program that does nothing -doNothing = true; +// Copyright (c) 2011-2024 SIL International +// This software is licensed under the LGPL, version 2.1 or later +// (http://www.gnu.org/licenses/lgpl-2.1.html) + +using System.ComponentModel; +using Microsoft.Extensions.Logging; +using SIL.LCModel.FixData; +using SIL.LCModel.Utils; + +namespace FixFwData; + +internal class Program +{ + private static int Main(string[] args) + { + using var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole()); + logger = loggerFactory.CreateLogger("FixFwData"); + var pathname = args[0]; + var prog = new LoggingProgress(logger); + var data = new FwDataFixer(pathname, prog, logError, getErrorCount); + data.FixErrorsAndSave(); + return errorsOccurred ? 1 : 0; + } + + private static bool errorsOccurred = false; + private static int errorCount = 0; + private static ILogger? logger; + + private static void logError(string description, bool errorFixed) + { + logger?.LogError(description); + + errorsOccurred = true; + if (errorFixed) + ++errorCount; + } + + private static int getErrorCount() + { + return errorCount; + } + + private sealed class LoggingProgress(ILogger logger) : IProgress + { + public string Message { get => ""; set => logger.LogInformation(value); } + + #region Do-nothing implementation of IProgress GUI methods + // IProgress methods required by the interface that don't make sense in a console app + public event CancelEventHandler? Canceling; + public void Step(int amount) + { + if (Canceling != null) + { + // don't do anything -- this just shuts up the compiler about the + // event handler never being used. + } + } + + public string Title { get => ""; set { } } + public int Position { get; set; } + public int StepSize { get; set; } + public int Minimum { get; set; } + public int Maximum { get; set; } + public ISynchronizeInvoke? SynchronizeInvoke { get => null; private set { } } + public bool IsIndeterminate { get => false; set { } } + public bool AllowCancel { get => false; set { } } + #endregion + } +}