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 @@ <Nullable>enable</Nullable> </PropertyGroup> - <Target Name="CreateExe" AfterTargets="Build" Condition="Exists('$(OutputPath)/FixFwData') And !Exists('$(OutputPath)/FixFwData.exe')"> - <Message Text="Creating FixFwData.exe in $(OutputPath) on Linux since FLExBridge requires the .exe extension" /> - <Exec Command="ln FixFwData FixFwData.exe" - WorkingDirectory="$(OutputPath)" /> - </Target> - + <ItemGroup> + <PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.1" /> + <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="8.0.1" /> + <PackageReference Include="SIL.LCModel.FixData" Version="11.0.0-beta0109" /> + </ItemGroup> </Project> 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 + } +} diff --git a/backend/FwLite/FwLiteDesktop/FwLiteDesktop.csproj b/backend/FwLite/FwLiteDesktop/FwLiteDesktop.csproj index ffd98f4583..043dacd5d9 100644 --- a/backend/FwLite/FwLiteDesktop/FwLiteDesktop.csproj +++ b/backend/FwLite/FwLiteDesktop/FwLiteDesktop.csproj @@ -22,6 +22,7 @@ <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <SelfContained>true</SelfContained> + <EnableWindowsTargeting Condition="$([MSBuild]::IsOSPlatform('linux'))">true</EnableWindowsTargeting> <!-- controls display name in Package.appxmanifest --> <ApplicationTitle>FieldWorks Lite</ApplicationTitle> diff --git a/backend/Testing/Testing.csproj b/backend/Testing/Testing.csproj index 797c22891c..04fa2ae8c9 100644 --- a/backend/Testing/Testing.csproj +++ b/backend/Testing/Testing.csproj @@ -38,7 +38,7 @@ <PackageReference Include="Moq.Contrib.HttpClient" Version="1.4.0" /> <PackageReference Include="Shouldly" Version="4.2.1" /> <PackageReference Include="SIL.ChorusPlugin.LfMergeBridge" Version="4.1.0" /> - <PackageReference Include="SIL.Core" Version="13.0.0-beta0074" /> + <PackageReference Include="SIL.Core" Version="14.2.0-*" /> <PackageReference Include="xunit" Version="2.9.0" /> <PackageReference Include="xunit.runner.visualstudio" Version="2.8.2"> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>