diff --git a/backend/FixFwData/FixFwData.csproj b/backend/FixFwData/FixFwData.csproj index 687b8f4cf..7c217f173 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 42431536a..e403836fe 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 + } +} diff --git a/backend/FwLite/FwLiteDesktop/FwLiteDesktop.csproj b/backend/FwLite/FwLiteDesktop/FwLiteDesktop.csproj index ffd98f458..043dacd5d 100644 --- a/backend/FwLite/FwLiteDesktop/FwLiteDesktop.csproj +++ b/backend/FwLite/FwLiteDesktop/FwLiteDesktop.csproj @@ -22,6 +22,7 @@ enable enable true + true FieldWorks Lite diff --git a/backend/Testing/Testing.csproj b/backend/Testing/Testing.csproj index 797c22891..04fa2ae8c 100644 --- a/backend/Testing/Testing.csproj +++ b/backend/Testing/Testing.csproj @@ -38,7 +38,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive