diff --git a/I18N Commander/Processor/ExtensionsError.cs b/I18N Commander/Processor/ExtensionsError.cs new file mode 100644 index 0000000..9cec361 --- /dev/null +++ b/I18N Commander/Processor/ExtensionsError.cs @@ -0,0 +1,27 @@ +using System.Text; +using DataModel; +using Microsoft.Data.Sqlite; + +namespace Processor; + +public static class ExtensionsError +{ + public static ProcessorResult ToProcessorResult(this Exception exception) where TResult : class + { + if(exception.InnerException is SqliteException sqliteException) + if (sqliteException.SqliteErrorCode is 14) + { + var blockingProcesses = SystemUtil.WhoIsLocking(Setup.DataFile); + var sb = new StringBuilder(); + sb.AppendLine($"The data file is used by the {blockingProcesses.Count} other process(es) listed below:"); + foreach (var blockingProcess in blockingProcesses) + sb.AppendLine($"- {blockingProcess.ProcessName} (id={blockingProcess.Id})"); + + return new ProcessorResult(null, false, sb.ToString()); + } + else + return new ProcessorResult(null, false, $"A database error occurred: '{sqliteException.Message}'"); + + return new ProcessorResult(null, false, $"A database error occurred: '{exception.Message}'"); + } +} \ No newline at end of file