diff --git a/.gitignore b/.gitignore index fa06a6a..77d901a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ src/bin/ -src/obj/ \ No newline at end of file +src/obj/ +.vs +.git \ No newline at end of file diff --git a/UniversalTagEditor.CUI/Program.cs b/UniversalTagEditor.CUI/Program.cs new file mode 100644 index 0000000..33cb81b --- /dev/null +++ b/UniversalTagEditor.CUI/Program.cs @@ -0,0 +1,52 @@ +using UniversalTagEditor.Core; + +class Program +{ + static async Task Main(string[] args) + { + var opt = ParseArgs(args); + + var log = new Progress(Console.WriteLine); + var prog = new Progress(p => + Console.Title = $"UniversalTagEditor {p.Done}/{p.Total}"); + + await Runner.RunAsync(opt, log, prog); + } + + static UteOptions ParseArgs(string[] args) + { + string? albumInfo = null; + string? albumCover = null; + string? format = null; + string? workingDirectory = null; + bool fixTags = false; + bool enhanceStructure = false; + + for (int i = 0; i < args.Length; i++) + { + switch (args[i]) + { + case "-w": workingDirectory = args[++i]; break; + case "-a": albumInfo = args[++i]; break; + case "-f": format = args[++i]; break; + case "-c": albumCover = args[++i]; break; + case "--fix-tags": fixTags = true; break; + case "--enhance-structure": enhanceStructure = true; break; + } + } + + if (string.IsNullOrWhiteSpace(workingDirectory)) + throw new ArgumentException("Нужен -w "); + + return new UteOptions + { + WorkingDirectory = workingDirectory, + AlbumInfoCsv = albumInfo, + AlbumCover = albumCover, + Format = format, + FixTags = fixTags, + EnhanceStructure = enhanceStructure, + MaxDegreeOfParallelism = 4 + }; + } +} \ No newline at end of file diff --git a/UniversalTagEditor.CUI/UniversalTagEditor.CUI.csproj b/UniversalTagEditor.CUI/UniversalTagEditor.CUI.csproj new file mode 100644 index 0000000..9d1ca48 --- /dev/null +++ b/UniversalTagEditor.CUI/UniversalTagEditor.CUI.csproj @@ -0,0 +1,14 @@ + + + + Exe + net8.0 + enable + enable + + + + + + + diff --git a/UniversalTagEditor.CUI/bin/Debug/net8.0/5.bat b/UniversalTagEditor.CUI/bin/Debug/net8.0/5.bat new file mode 100644 index 0000000..db599ef --- /dev/null +++ b/UniversalTagEditor.CUI/bin/Debug/net8.0/5.bat @@ -0,0 +1,7 @@ + +@setlocal enableextensions +@pushd %~dp0 +chcp 65001 +.\UniversalTagEditor.exe -w "D:\Новая папка\2RBINA 2RISTA" -f flac --fix-tags +@popd +@pause \ No newline at end of file diff --git a/UniversalTagEditor.CUI/bin/Debug/net8.0/CsvHelper.dll b/UniversalTagEditor.CUI/bin/Debug/net8.0/CsvHelper.dll new file mode 100644 index 0000000..538a62c Binary files /dev/null and b/UniversalTagEditor.CUI/bin/Debug/net8.0/CsvHelper.dll differ diff --git a/UniversalTagEditor.CUI/bin/Debug/net8.0/MetaBrainz.Common.Json.dll b/UniversalTagEditor.CUI/bin/Debug/net8.0/MetaBrainz.Common.Json.dll new file mode 100644 index 0000000..a372649 Binary files /dev/null and b/UniversalTagEditor.CUI/bin/Debug/net8.0/MetaBrainz.Common.Json.dll differ diff --git a/UniversalTagEditor.CUI/bin/Debug/net8.0/MetaBrainz.Common.dll b/UniversalTagEditor.CUI/bin/Debug/net8.0/MetaBrainz.Common.dll new file mode 100644 index 0000000..a8cf3c2 Binary files /dev/null and b/UniversalTagEditor.CUI/bin/Debug/net8.0/MetaBrainz.Common.dll differ diff --git a/UniversalTagEditor.CUI/bin/Debug/net8.0/MetaBrainz.MusicBrainz.dll b/UniversalTagEditor.CUI/bin/Debug/net8.0/MetaBrainz.MusicBrainz.dll new file mode 100644 index 0000000..fca2548 Binary files /dev/null and b/UniversalTagEditor.CUI/bin/Debug/net8.0/MetaBrainz.MusicBrainz.dll differ diff --git a/UniversalTagEditor.CUI/bin/Debug/net8.0/TagLibSharp.dll b/UniversalTagEditor.CUI/bin/Debug/net8.0/TagLibSharp.dll new file mode 100644 index 0000000..cf4ca05 Binary files /dev/null and b/UniversalTagEditor.CUI/bin/Debug/net8.0/TagLibSharp.dll differ diff --git a/UniversalTagEditor.Core/bin/Debug/net8.0/UniversalTagEditor.Core.dll b/UniversalTagEditor.CUI/bin/Debug/net8.0/UniversalTagEditor.Core.dll similarity index 100% rename from UniversalTagEditor.Core/bin/Debug/net8.0/UniversalTagEditor.Core.dll rename to UniversalTagEditor.CUI/bin/Debug/net8.0/UniversalTagEditor.Core.dll diff --git a/UniversalTagEditor.Core/bin/Debug/net8.0/UniversalTagEditor.Core.pdb b/UniversalTagEditor.CUI/bin/Debug/net8.0/UniversalTagEditor.Core.pdb similarity index 100% rename from UniversalTagEditor.Core/bin/Debug/net8.0/UniversalTagEditor.Core.pdb rename to UniversalTagEditor.CUI/bin/Debug/net8.0/UniversalTagEditor.Core.pdb diff --git a/UniversalTagEditor.Core/bin/Debug/net8.0/UniversalTagEditor.Core.deps.json b/UniversalTagEditor.CUI/bin/Debug/net8.0/UniversalTagEditor.deps.json similarity index 88% rename from UniversalTagEditor.Core/bin/Debug/net8.0/UniversalTagEditor.Core.deps.json rename to UniversalTagEditor.CUI/bin/Debug/net8.0/UniversalTagEditor.deps.json index bee3996..4beb4e8 100644 --- a/UniversalTagEditor.Core/bin/Debug/net8.0/UniversalTagEditor.Core.deps.json +++ b/UniversalTagEditor.CUI/bin/Debug/net8.0/UniversalTagEditor.deps.json @@ -6,14 +6,12 @@ "compilationOptions": {}, "targets": { ".NETCoreApp,Version=v8.0": { - "UniversalTagEditor.Core/1.0.0": { + "UniversalTagEditor/1.0.0": { "dependencies": { - "CsvHelper": "33.1.0", - "MetaBrainz.MusicBrainz": "8.0.1", - "TagLibSharp": "2.3.0" + "UniversalTagEditor.Core": "1.0.0" }, "runtime": { - "UniversalTagEditor.Core.dll": {} + "UniversalTagEditor.dll": {} } }, "CsvHelper/33.1.0": { @@ -62,11 +60,24 @@ "fileVersion": "2.3.0.0" } } + }, + "UniversalTagEditor.Core/1.0.0": { + "dependencies": { + "CsvHelper": "33.1.0", + "MetaBrainz.MusicBrainz": "8.0.1", + "TagLibSharp": "2.3.0" + }, + "runtime": { + "UniversalTagEditor.Core.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.0" + } + } } } }, "libraries": { - "UniversalTagEditor.Core/1.0.0": { + "UniversalTagEditor/1.0.0": { "type": "project", "serviceable": false, "sha512": "" @@ -105,6 +116,11 @@ "sha512": "sha512-Qo4z6ZjnIfbR3Us1Za5M2vQ97OWZPmODvVmepxZ8XW0UIVLGdO2T63/N3b23kCcyiwuIe0TQvMEQG8wUCCD1mA==", "path": "taglibsharp/2.3.0", "hashPath": "taglibsharp.2.3.0.nupkg.sha512" + }, + "UniversalTagEditor.Core/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" } } } \ No newline at end of file diff --git a/UniversalTagEditor.CUI/bin/Debug/net8.0/UniversalTagEditor.dll b/UniversalTagEditor.CUI/bin/Debug/net8.0/UniversalTagEditor.dll new file mode 100644 index 0000000..90fd9ae Binary files /dev/null and b/UniversalTagEditor.CUI/bin/Debug/net8.0/UniversalTagEditor.dll differ diff --git a/UniversalTagEditor.CUI/bin/Debug/net8.0/UniversalTagEditor.exe b/UniversalTagEditor.CUI/bin/Debug/net8.0/UniversalTagEditor.exe new file mode 100644 index 0000000..9a11ac0 Binary files /dev/null and b/UniversalTagEditor.CUI/bin/Debug/net8.0/UniversalTagEditor.exe differ diff --git a/UniversalTagEditor.Core/obj/Debug/net8.0/UniversalTagEditor.Core.pdb b/UniversalTagEditor.CUI/bin/Debug/net8.0/UniversalTagEditor.pdb similarity index 59% rename from UniversalTagEditor.Core/obj/Debug/net8.0/UniversalTagEditor.Core.pdb rename to UniversalTagEditor.CUI/bin/Debug/net8.0/UniversalTagEditor.pdb index 02035db..eb39c13 100644 Binary files a/UniversalTagEditor.Core/obj/Debug/net8.0/UniversalTagEditor.Core.pdb and b/UniversalTagEditor.CUI/bin/Debug/net8.0/UniversalTagEditor.pdb differ diff --git a/UniversalTagEditor.CUI/bin/Debug/net8.0/UniversalTagEditor.runtimeconfig.json b/UniversalTagEditor.CUI/bin/Debug/net8.0/UniversalTagEditor.runtimeconfig.json new file mode 100644 index 0000000..becfaea --- /dev/null +++ b/UniversalTagEditor.CUI/bin/Debug/net8.0/UniversalTagEditor.runtimeconfig.json @@ -0,0 +1,12 @@ +{ + "runtimeOptions": { + "tfm": "net8.0", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "8.0.0" + }, + "configProperties": { + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false + } + } +} \ No newline at end of file diff --git a/UniversalTagEditor.CUI/obj/Debug/net10.0/UniversalTagEditor.CUI.GlobalUsings.g.cs b/UniversalTagEditor.CUI/obj/Debug/net10.0/UniversalTagEditor.CUI.GlobalUsings.g.cs new file mode 100644 index 0000000..8578f3d --- /dev/null +++ b/UniversalTagEditor.CUI/obj/Debug/net10.0/UniversalTagEditor.CUI.GlobalUsings.g.cs @@ -0,0 +1,8 @@ +// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading; +global using global::System.Threading.Tasks; diff --git a/UniversalTagEditor.CUI/obj/Debug/net10.0/UniversalTagEditor.CUI.assets.cache b/UniversalTagEditor.CUI/obj/Debug/net10.0/UniversalTagEditor.CUI.assets.cache new file mode 100644 index 0000000..55ce108 Binary files /dev/null and b/UniversalTagEditor.CUI/obj/Debug/net10.0/UniversalTagEditor.CUI.assets.cache differ diff --git a/UniversalTagEditor.CUI/obj/Debug/net10.0/UniversalTagEditor.CUI.csproj.AssemblyReference.cache b/UniversalTagEditor.CUI/obj/Debug/net10.0/UniversalTagEditor.CUI.csproj.AssemblyReference.cache new file mode 100644 index 0000000..11b0f2c Binary files /dev/null and b/UniversalTagEditor.CUI/obj/Debug/net10.0/UniversalTagEditor.CUI.csproj.AssemblyReference.cache differ diff --git a/UniversalTagEditor.CUI/obj/Debug/net10.0/UniversalTagEditor.GlobalUsings.g.cs b/UniversalTagEditor.CUI/obj/Debug/net10.0/UniversalTagEditor.GlobalUsings.g.cs new file mode 100644 index 0000000..8578f3d --- /dev/null +++ b/UniversalTagEditor.CUI/obj/Debug/net10.0/UniversalTagEditor.GlobalUsings.g.cs @@ -0,0 +1,8 @@ +// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading; +global using global::System.Threading.Tasks; diff --git a/UniversalTagEditor.CUI/obj/Debug/net10.0/UniversalTagEditor.assets.cache b/UniversalTagEditor.CUI/obj/Debug/net10.0/UniversalTagEditor.assets.cache new file mode 100644 index 0000000..376c667 Binary files /dev/null and b/UniversalTagEditor.CUI/obj/Debug/net10.0/UniversalTagEditor.assets.cache differ diff --git a/UniversalTagEditor.CUI/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs b/UniversalTagEditor.CUI/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs new file mode 100644 index 0000000..2217181 --- /dev/null +++ b/UniversalTagEditor.CUI/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")] diff --git a/UniversalTagEditor.Core/obj/Debug/net8.0/UniversalTagEditor.Core.csproj.BuildWithSkipAnalyzers b/UniversalTagEditor.CUI/obj/Debug/net8.0/Universa.B658D7AE.Up2Date similarity index 100% rename from UniversalTagEditor.Core/obj/Debug/net8.0/UniversalTagEditor.Core.csproj.BuildWithSkipAnalyzers rename to UniversalTagEditor.CUI/obj/Debug/net8.0/Universa.B658D7AE.Up2Date diff --git a/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.AssemblyInfo.cs b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.AssemblyInfo.cs new file mode 100644 index 0000000..d1121c1 --- /dev/null +++ b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.AssemblyInfo.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("UniversalTagEditor")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+399691cb05a3e92be12505bfa2e438097e72b680")] +[assembly: System.Reflection.AssemblyProductAttribute("UniversalTagEditor")] +[assembly: System.Reflection.AssemblyTitleAttribute("UniversalTagEditor")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Создано классом WriteCodeFragment MSBuild. + diff --git a/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.AssemblyInfoInputs.cache b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.AssemblyInfoInputs.cache new file mode 100644 index 0000000..c90532b --- /dev/null +++ b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +5de3c73fdd3550f53441b0efbad9c02427f9c9cfcc94b77951bd29d724054e35 diff --git a/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.CUI.AssemblyInfo.cs b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.CUI.AssemblyInfo.cs new file mode 100644 index 0000000..5853c81 --- /dev/null +++ b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.CUI.AssemblyInfo.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("UniversalTagEditor.CUI")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+ac7bbe303cd3bf2b7821ebc37920372112c9a4f7")] +[assembly: System.Reflection.AssemblyProductAttribute("UniversalTagEditor.CUI")] +[assembly: System.Reflection.AssemblyTitleAttribute("UniversalTagEditor.CUI")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Создано классом WriteCodeFragment MSBuild. + diff --git a/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.CUI.AssemblyInfoInputs.cache b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.CUI.AssemblyInfoInputs.cache new file mode 100644 index 0000000..f333807 --- /dev/null +++ b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.CUI.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +48f3ef28012da3091b8859bd7ae28c1bc01bb3425eb952b82d0bfdcf161304e6 diff --git a/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.CUI.GeneratedMSBuildEditorConfig.editorconfig b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.CUI.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..3ac702d --- /dev/null +++ b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.CUI.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,15 @@ +is_global = true +build_property.TargetFramework = net8.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = UniversalTagEditor.CUI +build_property.ProjectDir = C:\Users\GorokhovA\Source\Repos\MusicTagFixer\UniversalTagEditor.CUI\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 8.0 +build_property.EnableCodeStyleSeverity = diff --git a/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.CUI.GlobalUsings.g.cs b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.CUI.GlobalUsings.g.cs new file mode 100644 index 0000000..8578f3d --- /dev/null +++ b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.CUI.GlobalUsings.g.cs @@ -0,0 +1,8 @@ +// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading; +global using global::System.Threading.Tasks; diff --git a/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.CUI.assets.cache b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.CUI.assets.cache new file mode 100644 index 0000000..3c44d6f Binary files /dev/null and b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.CUI.assets.cache differ diff --git a/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.CUI.csproj.AssemblyReference.cache b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.CUI.csproj.AssemblyReference.cache new file mode 100644 index 0000000..d5f1950 Binary files /dev/null and b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.CUI.csproj.AssemblyReference.cache differ diff --git a/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.GeneratedMSBuildEditorConfig.editorconfig b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..631287f --- /dev/null +++ b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,15 @@ +is_global = true +build_property.TargetFramework = net8.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = UniversalTagEditor +build_property.ProjectDir = C:\Users\GorokhovA\Source\Repos\MusicTagFixer\src\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 8.0 +build_property.EnableCodeStyleSeverity = diff --git a/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.GlobalUsings.g.cs b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.GlobalUsings.g.cs new file mode 100644 index 0000000..8578f3d --- /dev/null +++ b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.GlobalUsings.g.cs @@ -0,0 +1,8 @@ +// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading; +global using global::System.Threading.Tasks; diff --git a/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.assets.cache b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.assets.cache new file mode 100644 index 0000000..59acc23 Binary files /dev/null and b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.assets.cache differ diff --git a/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.csproj.AssemblyReference.cache b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.csproj.AssemblyReference.cache new file mode 100644 index 0000000..0807f7b Binary files /dev/null and b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.csproj.AssemblyReference.cache differ diff --git a/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.csproj.BuildWithSkipAnalyzers b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.csproj.BuildWithSkipAnalyzers new file mode 100644 index 0000000..e69de29 diff --git a/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.csproj.CoreCompileInputs.cache b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..4e16280 --- /dev/null +++ b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +b538747e11850aa66442cb933fcefdcae62771e8a28378755f88267cc10a87ea diff --git a/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.csproj.FileListAbsolute.txt b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..48d54db --- /dev/null +++ b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.csproj.FileListAbsolute.txt @@ -0,0 +1,23 @@ +C:\Users\GorokhovA\Source\Repos\MusicTagFixer\src\bin\Debug\net8.0\UniversalTagEditor.exe +C:\Users\GorokhovA\Source\Repos\MusicTagFixer\src\bin\Debug\net8.0\UniversalTagEditor.deps.json +C:\Users\GorokhovA\Source\Repos\MusicTagFixer\src\bin\Debug\net8.0\UniversalTagEditor.runtimeconfig.json +C:\Users\GorokhovA\Source\Repos\MusicTagFixer\src\bin\Debug\net8.0\UniversalTagEditor.dll +C:\Users\GorokhovA\Source\Repos\MusicTagFixer\src\bin\Debug\net8.0\UniversalTagEditor.pdb +C:\Users\GorokhovA\Source\Repos\MusicTagFixer\src\bin\Debug\net8.0\CsvHelper.dll +C:\Users\GorokhovA\Source\Repos\MusicTagFixer\src\bin\Debug\net8.0\MetaBrainz.Common.dll +C:\Users\GorokhovA\Source\Repos\MusicTagFixer\src\bin\Debug\net8.0\MetaBrainz.Common.Json.dll +C:\Users\GorokhovA\Source\Repos\MusicTagFixer\src\bin\Debug\net8.0\MetaBrainz.MusicBrainz.dll +C:\Users\GorokhovA\Source\Repos\MusicTagFixer\src\bin\Debug\net8.0\TagLibSharp.dll +C:\Users\GorokhovA\Source\Repos\MusicTagFixer\src\bin\Debug\net8.0\UniversalTagEditor.Core.dll +C:\Users\GorokhovA\Source\Repos\MusicTagFixer\src\bin\Debug\net8.0\UniversalTagEditor.Core.pdb +C:\Users\GorokhovA\Source\Repos\MusicTagFixer\src\obj\Debug\net8.0\UniversalTagEditor.csproj.AssemblyReference.cache +C:\Users\GorokhovA\Source\Repos\MusicTagFixer\src\obj\Debug\net8.0\UniversalTagEditor.GeneratedMSBuildEditorConfig.editorconfig +C:\Users\GorokhovA\Source\Repos\MusicTagFixer\src\obj\Debug\net8.0\UniversalTagEditor.AssemblyInfoInputs.cache +C:\Users\GorokhovA\Source\Repos\MusicTagFixer\src\obj\Debug\net8.0\UniversalTagEditor.AssemblyInfo.cs +C:\Users\GorokhovA\Source\Repos\MusicTagFixer\src\obj\Debug\net8.0\UniversalTagEditor.csproj.CoreCompileInputs.cache +C:\Users\GorokhovA\Source\Repos\MusicTagFixer\src\obj\Debug\net8.0\Universa.B658D7AE.Up2Date +C:\Users\GorokhovA\Source\Repos\MusicTagFixer\src\obj\Debug\net8.0\UniversalTagEditor.dll +C:\Users\GorokhovA\Source\Repos\MusicTagFixer\src\obj\Debug\net8.0\refint\UniversalTagEditor.dll +C:\Users\GorokhovA\Source\Repos\MusicTagFixer\src\obj\Debug\net8.0\UniversalTagEditor.pdb +C:\Users\GorokhovA\Source\Repos\MusicTagFixer\src\obj\Debug\net8.0\UniversalTagEditor.genruntimeconfig.cache +C:\Users\GorokhovA\Source\Repos\MusicTagFixer\src\obj\Debug\net8.0\ref\UniversalTagEditor.dll diff --git a/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.dll b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.dll new file mode 100644 index 0000000..90fd9ae Binary files /dev/null and b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.dll differ diff --git a/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.genruntimeconfig.cache b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.genruntimeconfig.cache new file mode 100644 index 0000000..2e0344c --- /dev/null +++ b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.genruntimeconfig.cache @@ -0,0 +1 @@ +143f53d7fc5c0f3c7418c1d3241857437f849b5c30a7c0133a9dbf4fd66dec66 diff --git a/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.pdb b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.pdb new file mode 100644 index 0000000..eb39c13 Binary files /dev/null and b/UniversalTagEditor.CUI/obj/Debug/net8.0/UniversalTagEditor.pdb differ diff --git a/UniversalTagEditor.CUI/obj/Debug/net8.0/apphost.exe b/UniversalTagEditor.CUI/obj/Debug/net8.0/apphost.exe new file mode 100644 index 0000000..9a11ac0 Binary files /dev/null and b/UniversalTagEditor.CUI/obj/Debug/net8.0/apphost.exe differ diff --git a/UniversalTagEditor.CUI/obj/Debug/net8.0/ref/UniversalTagEditor.dll b/UniversalTagEditor.CUI/obj/Debug/net8.0/ref/UniversalTagEditor.dll new file mode 100644 index 0000000..10f95a7 Binary files /dev/null and b/UniversalTagEditor.CUI/obj/Debug/net8.0/ref/UniversalTagEditor.dll differ diff --git a/UniversalTagEditor.CUI/obj/Debug/net8.0/refint/UniversalTagEditor.dll b/UniversalTagEditor.CUI/obj/Debug/net8.0/refint/UniversalTagEditor.dll new file mode 100644 index 0000000..10f95a7 Binary files /dev/null and b/UniversalTagEditor.CUI/obj/Debug/net8.0/refint/UniversalTagEditor.dll differ diff --git a/UniversalTagEditor.CUI/obj/UniversalTagEditor.CUI.csproj.nuget.dgspec.json b/UniversalTagEditor.CUI/obj/UniversalTagEditor.CUI.csproj.nuget.dgspec.json new file mode 100644 index 0000000..7eb7626 --- /dev/null +++ b/UniversalTagEditor.CUI/obj/UniversalTagEditor.CUI.csproj.nuget.dgspec.json @@ -0,0 +1,156 @@ +{ + "format": 1, + "restore": { + "C:\\Users\\GorokhovA\\Source\\Repos\\MusicTagFixer\\UniversalTagEditor.CUI\\UniversalTagEditor.CUI.csproj": {} + }, + "projects": { + "C:\\Users\\GorokhovA\\Source\\Repos\\MusicTagFixer\\UniversalTagEditor.Core\\UniversalTagEditor.Core.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Users\\GorokhovA\\Source\\Repos\\MusicTagFixer\\UniversalTagEditor.Core\\UniversalTagEditor.Core.csproj", + "projectName": "UniversalTagEditor.Core", + "projectPath": "C:\\Users\\GorokhovA\\Source\\Repos\\MusicTagFixer\\UniversalTagEditor.Core\\UniversalTagEditor.Core.csproj", + "packagesPath": "C:\\Users\\GorokhovA\\.nuget\\packages\\", + "outputPath": "C:\\Users\\GorokhovA\\source\\repos\\MusicTagFixer\\UniversalTagEditor.Core\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\GorokhovA\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "9.0.300" + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "dependencies": { + "CsvHelper": { + "target": "Package", + "version": "[33.1.0, )" + }, + "MetaBrainz.MusicBrainz": { + "target": "Package", + "version": "[8.0.1, )" + }, + "TagLibSharp": { + "target": "Package", + "version": "[2.3.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.306/PortableRuntimeIdentifierGraph.json" + } + } + }, + "C:\\Users\\GorokhovA\\Source\\Repos\\MusicTagFixer\\UniversalTagEditor.CUI\\UniversalTagEditor.CUI.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Users\\GorokhovA\\Source\\Repos\\MusicTagFixer\\UniversalTagEditor.CUI\\UniversalTagEditor.CUI.csproj", + "projectName": "UniversalTagEditor.CUI", + "projectPath": "C:\\Users\\GorokhovA\\Source\\Repos\\MusicTagFixer\\UniversalTagEditor.CUI\\UniversalTagEditor.CUI.csproj", + "packagesPath": "C:\\Users\\GorokhovA\\.nuget\\packages\\", + "outputPath": "C:\\Users\\GorokhovA\\Source\\Repos\\MusicTagFixer\\UniversalTagEditor.CUI\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\GorokhovA\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": { + "C:\\Users\\GorokhovA\\Source\\Repos\\MusicTagFixer\\UniversalTagEditor.Core\\UniversalTagEditor.Core.csproj": { + "projectPath": "C:\\Users\\GorokhovA\\Source\\Repos\\MusicTagFixer\\UniversalTagEditor.Core\\UniversalTagEditor.Core.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "9.0.300" + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.306/PortableRuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/UniversalTagEditor.CUI/obj/UniversalTagEditor.CUI.csproj.nuget.g.props b/UniversalTagEditor.CUI/obj/UniversalTagEditor.CUI.csproj.nuget.g.props new file mode 100644 index 0000000..b397230 --- /dev/null +++ b/UniversalTagEditor.CUI/obj/UniversalTagEditor.CUI.csproj.nuget.g.props @@ -0,0 +1,16 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\.nuget\packages\ + C:\Users\GorokhovA\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages + PackageReference + 6.14.1 + + + + + + \ No newline at end of file diff --git a/UniversalTagEditor.CUI/obj/UniversalTagEditor.CUI.csproj.nuget.g.targets b/UniversalTagEditor.CUI/obj/UniversalTagEditor.CUI.csproj.nuget.g.targets new file mode 100644 index 0000000..3dc06ef --- /dev/null +++ b/UniversalTagEditor.CUI/obj/UniversalTagEditor.CUI.csproj.nuget.g.targets @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/UniversalTagEditor.CUI/obj/UniversalTagEditor.csproj.nuget.dgspec.json b/UniversalTagEditor.CUI/obj/UniversalTagEditor.csproj.nuget.dgspec.json new file mode 100644 index 0000000..88e75ea --- /dev/null +++ b/UniversalTagEditor.CUI/obj/UniversalTagEditor.csproj.nuget.dgspec.json @@ -0,0 +1,68 @@ +{ + "format": 1, + "restore": { + "C:\\Users\\GorokhovA\\source\\repos\\MusicTagFixer\\UniversalTagEditor.CUI\\UniversalTagEditor.csproj": {} + }, + "projects": { + "C:\\Users\\GorokhovA\\source\\repos\\MusicTagFixer\\UniversalTagEditor.CUI\\UniversalTagEditor.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Users\\GorokhovA\\source\\repos\\MusicTagFixer\\UniversalTagEditor.CUI\\UniversalTagEditor.csproj", + "projectName": "UniversalTagEditor", + "projectPath": "C:\\Users\\GorokhovA\\source\\repos\\MusicTagFixer\\UniversalTagEditor.CUI\\UniversalTagEditor.csproj", + "packagesPath": "C:\\Users\\GorokhovA\\.nuget\\packages\\", + "outputPath": "C:\\Users\\GorokhovA\\source\\repos\\MusicTagFixer\\UniversalTagEditor.CUI\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\GorokhovA\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net10.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "all" + }, + "SdkAnalysisLevel": "9.0.300" + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.306/PortableRuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/UniversalTagEditor.CUI/obj/UniversalTagEditor.csproj.nuget.g.props b/UniversalTagEditor.CUI/obj/UniversalTagEditor.csproj.nuget.g.props new file mode 100644 index 0000000..b397230 --- /dev/null +++ b/UniversalTagEditor.CUI/obj/UniversalTagEditor.csproj.nuget.g.props @@ -0,0 +1,16 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\.nuget\packages\ + C:\Users\GorokhovA\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages + PackageReference + 6.14.1 + + + + + + \ No newline at end of file diff --git a/UniversalTagEditor.CUI/obj/UniversalTagEditor.csproj.nuget.g.targets b/UniversalTagEditor.CUI/obj/UniversalTagEditor.csproj.nuget.g.targets new file mode 100644 index 0000000..3dc06ef --- /dev/null +++ b/UniversalTagEditor.CUI/obj/UniversalTagEditor.csproj.nuget.g.targets @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/UniversalTagEditor.CUI/obj/project.assets.json b/UniversalTagEditor.CUI/obj/project.assets.json new file mode 100644 index 0000000..d235747 --- /dev/null +++ b/UniversalTagEditor.CUI/obj/project.assets.json @@ -0,0 +1,276 @@ +{ + "version": 3, + "targets": { + "net8.0": { + "CsvHelper/33.1.0": { + "type": "package", + "compile": { + "lib/net8.0/CsvHelper.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/CsvHelper.dll": { + "related": ".xml" + } + } + }, + "MetaBrainz.Common/4.1.1": { + "type": "package", + "compile": { + "lib/net8.0/MetaBrainz.Common.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/MetaBrainz.Common.dll": { + "related": ".xml" + } + } + }, + "MetaBrainz.Common.Json/7.2.0": { + "type": "package", + "dependencies": { + "MetaBrainz.Common": "4.1.1" + }, + "compile": { + "lib/net8.0/MetaBrainz.Common.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/MetaBrainz.Common.Json.dll": { + "related": ".xml" + } + } + }, + "MetaBrainz.MusicBrainz/8.0.1": { + "type": "package", + "dependencies": { + "MetaBrainz.Common": "4.1.1", + "MetaBrainz.Common.Json": "7.2.0" + }, + "compile": { + "lib/net8.0/MetaBrainz.MusicBrainz.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/MetaBrainz.MusicBrainz.dll": { + "related": ".xml" + } + } + }, + "TagLibSharp/2.3.0": { + "type": "package", + "compile": { + "lib/netstandard2.0/TagLibSharp.dll": { + "related": ".pdb" + } + }, + "runtime": { + "lib/netstandard2.0/TagLibSharp.dll": { + "related": ".pdb" + } + } + }, + "UniversalTagEditor.Core/1.0.0": { + "type": "project", + "framework": ".NETCoreApp,Version=v8.0", + "dependencies": { + "CsvHelper": "33.1.0", + "MetaBrainz.MusicBrainz": "8.0.1", + "TagLibSharp": "2.3.0" + }, + "compile": { + "bin/placeholder/UniversalTagEditor.Core.dll": {} + }, + "runtime": { + "bin/placeholder/UniversalTagEditor.Core.dll": {} + } + } + } + }, + "libraries": { + "CsvHelper/33.1.0": { + "sha512": "kqfTOZGrn7NarNeXgjh86JcpTHUoeQDMB8t9NVa/ZtlSYiV1rxfRnQ49WaJsob4AiGrbK0XDzpyKkBwai4F8eg==", + "type": "package", + "path": "csvhelper/33.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "csvhelper.33.1.0.nupkg.sha512", + "csvhelper.nuspec", + "lib/net462/CsvHelper.dll", + "lib/net462/CsvHelper.xml", + "lib/net47/CsvHelper.dll", + "lib/net47/CsvHelper.xml", + "lib/net48/CsvHelper.dll", + "lib/net48/CsvHelper.xml", + "lib/net8.0/CsvHelper.dll", + "lib/net8.0/CsvHelper.xml", + "lib/net9.0/CsvHelper.dll", + "lib/net9.0/CsvHelper.xml", + "lib/netstandard2.0/CsvHelper.dll", + "lib/netstandard2.0/CsvHelper.xml", + "lib/netstandard2.1/CsvHelper.dll", + "lib/netstandard2.1/CsvHelper.xml" + ] + }, + "MetaBrainz.Common/4.1.1": { + "sha512": "ovKr4BktLkKdGcMkKJihcGNPqvsPW4DXRmi051SbJICauVkKgnZFI51uWaHoQoO8Z6YBTqLzqam/GfRlMj0xcw==", + "type": "package", + "path": "metabrainz.common/4.1.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.md", + "README.md", + "lib/net10.0/MetaBrainz.Common.dll", + "lib/net10.0/MetaBrainz.Common.xml", + "lib/net8.0/MetaBrainz.Common.dll", + "lib/net8.0/MetaBrainz.Common.xml", + "metabrainz.common.4.1.1.nupkg.sha512", + "metabrainz.common.nuspec", + "package-icon.png" + ] + }, + "MetaBrainz.Common.Json/7.2.0": { + "sha512": "e3lPRMTujYYzBzZI7GV3s4OwXdBViGGrdpvWf5J/PXFaasjEdkQvKpmwG26PplZ3atPRK8x3FRVgP4lOARAoLQ==", + "type": "package", + "path": "metabrainz.common.json/7.2.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.md", + "README.md", + "lib/net10.0/MetaBrainz.Common.Json.dll", + "lib/net10.0/MetaBrainz.Common.Json.xml", + "lib/net8.0/MetaBrainz.Common.Json.dll", + "lib/net8.0/MetaBrainz.Common.Json.xml", + "metabrainz.common.json.7.2.0.nupkg.sha512", + "metabrainz.common.json.nuspec", + "package-icon.png" + ] + }, + "MetaBrainz.MusicBrainz/8.0.1": { + "sha512": "CXyfOQbYyICPTOckS169V4+zmk71sd2z6FncoQxE3uR1fvwyD5Q7+Iv5/mAmqnb/u6IyepMt+2+O8lzDLmXZbg==", + "type": "package", + "path": "metabrainz.musicbrainz/8.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.md", + "README.md", + "lib/net10.0/MetaBrainz.MusicBrainz.dll", + "lib/net10.0/MetaBrainz.MusicBrainz.xml", + "lib/net8.0/MetaBrainz.MusicBrainz.dll", + "lib/net8.0/MetaBrainz.MusicBrainz.xml", + "metabrainz.musicbrainz.8.0.1.nupkg.sha512", + "metabrainz.musicbrainz.nuspec", + "package-icon.png" + ] + }, + "TagLibSharp/2.3.0": { + "sha512": "Qo4z6ZjnIfbR3Us1Za5M2vQ97OWZPmODvVmepxZ8XW0UIVLGdO2T63/N3b23kCcyiwuIe0TQvMEQG8wUCCD1mA==", + "type": "package", + "path": "taglibsharp/2.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net462/TagLibSharp.dll", + "lib/net462/TagLibSharp.pdb", + "lib/net462/TaglibSharp.xml", + "lib/netstandard2.0/TagLibSharp.dll", + "lib/netstandard2.0/TagLibSharp.pdb", + "lib/netstandard2.0/TaglibSharp.xml", + "taglibsharp.2.3.0.nupkg.sha512", + "taglibsharp.nuspec" + ] + }, + "UniversalTagEditor.Core/1.0.0": { + "type": "project", + "path": "../UniversalTagEditor.Core/UniversalTagEditor.Core.csproj", + "msbuildProject": "../UniversalTagEditor.Core/UniversalTagEditor.Core.csproj" + } + }, + "projectFileDependencyGroups": { + "net8.0": [ + "UniversalTagEditor.Core >= 1.0.0" + ] + }, + "packageFolders": { + "C:\\Users\\GorokhovA\\.nuget\\packages\\": {}, + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Users\\GorokhovA\\Source\\Repos\\MusicTagFixer\\UniversalTagEditor.CUI\\UniversalTagEditor.CUI.csproj", + "projectName": "UniversalTagEditor.CUI", + "projectPath": "C:\\Users\\GorokhovA\\Source\\Repos\\MusicTagFixer\\UniversalTagEditor.CUI\\UniversalTagEditor.CUI.csproj", + "packagesPath": "C:\\Users\\GorokhovA\\.nuget\\packages\\", + "outputPath": "C:\\Users\\GorokhovA\\Source\\Repos\\MusicTagFixer\\UniversalTagEditor.CUI\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\GorokhovA\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": { + "C:\\Users\\GorokhovA\\Source\\Repos\\MusicTagFixer\\UniversalTagEditor.Core\\UniversalTagEditor.Core.csproj": { + "projectPath": "C:\\Users\\GorokhovA\\Source\\Repos\\MusicTagFixer\\UniversalTagEditor.Core\\UniversalTagEditor.Core.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "9.0.300" + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.306/PortableRuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/UniversalTagEditor.CUI/obj/project.nuget.cache b/UniversalTagEditor.CUI/obj/project.nuget.cache new file mode 100644 index 0000000..6e01022 --- /dev/null +++ b/UniversalTagEditor.CUI/obj/project.nuget.cache @@ -0,0 +1,14 @@ +{ + "version": 2, + "dgSpecHash": "rLabcHrOF9Y=", + "success": true, + "projectFilePath": "C:\\Users\\GorokhovA\\Source\\Repos\\MusicTagFixer\\UniversalTagEditor.CUI\\UniversalTagEditor.CUI.csproj", + "expectedPackageFiles": [ + "C:\\Users\\GorokhovA\\.nuget\\packages\\csvhelper\\33.1.0\\csvhelper.33.1.0.nupkg.sha512", + "C:\\Users\\GorokhovA\\.nuget\\packages\\metabrainz.common\\4.1.1\\metabrainz.common.4.1.1.nupkg.sha512", + "C:\\Users\\GorokhovA\\.nuget\\packages\\metabrainz.common.json\\7.2.0\\metabrainz.common.json.7.2.0.nupkg.sha512", + "C:\\Users\\GorokhovA\\.nuget\\packages\\metabrainz.musicbrainz\\8.0.1\\metabrainz.musicbrainz.8.0.1.nupkg.sha512", + "C:\\Users\\GorokhovA\\.nuget\\packages\\taglibsharp\\2.3.0\\taglibsharp.2.3.0.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file diff --git a/src/Helpers/CsvParser.cs b/UniversalTagEditor.Core/Helpers/CsvParser.cs similarity index 100% rename from src/Helpers/CsvParser.cs rename to UniversalTagEditor.Core/Helpers/CsvParser.cs diff --git a/src/Helpers/DiscogsService.cs b/UniversalTagEditor.Core/Helpers/DiscogsService.cs similarity index 100% rename from src/Helpers/DiscogsService.cs rename to UniversalTagEditor.Core/Helpers/DiscogsService.cs diff --git a/src/Helpers/TagEditor.cs b/UniversalTagEditor.Core/Helpers/TagEditor.cs similarity index 100% rename from src/Helpers/TagEditor.cs rename to UniversalTagEditor.Core/Helpers/TagEditor.cs diff --git a/src/Types/AlbumInfo.cs b/UniversalTagEditor.Core/Types/AlbumInfo.cs similarity index 100% rename from src/Types/AlbumInfo.cs rename to UniversalTagEditor.Core/Types/AlbumInfo.cs diff --git a/src/Types/TrackInfo.cs b/UniversalTagEditor.Core/Types/TrackInfo.cs similarity index 100% rename from src/Types/TrackInfo.cs rename to UniversalTagEditor.Core/Types/TrackInfo.cs diff --git a/src/UniversalTagEditor.csproj b/UniversalTagEditor.Core/UniversalTagEditor.Core.csproj similarity index 80% rename from src/UniversalTagEditor.csproj rename to UniversalTagEditor.Core/UniversalTagEditor.Core.csproj index 2b01bac..bad939f 100644 --- a/src/UniversalTagEditor.csproj +++ b/UniversalTagEditor.Core/UniversalTagEditor.Core.csproj @@ -1,15 +1,14 @@  - Exe - net10.0 + net8.0 enable enable - + diff --git a/UniversalTagEditor.Core/obj/Debug/net8.0/UniversalTagEditor.Core.AssemblyInfo.cs b/UniversalTagEditor.Core/obj/Debug/net8.0/UniversalTagEditor.Core.AssemblyInfo.cs index c379e17..20db815 100644 --- a/UniversalTagEditor.Core/obj/Debug/net8.0/UniversalTagEditor.Core.AssemblyInfo.cs +++ b/UniversalTagEditor.Core/obj/Debug/net8.0/UniversalTagEditor.Core.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("UniversalTagEditor.Core")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+399691cb05a3e92be12505bfa2e438097e72b680")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+ac7bbe303cd3bf2b7821ebc37920372112c9a4f7")] [assembly: System.Reflection.AssemblyProductAttribute("UniversalTagEditor.Core")] [assembly: System.Reflection.AssemblyTitleAttribute("UniversalTagEditor.Core")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/UniversalTagEditor.Core/obj/Debug/net8.0/UniversalTagEditor.Core.AssemblyInfoInputs.cache b/UniversalTagEditor.Core/obj/Debug/net8.0/UniversalTagEditor.Core.AssemblyInfoInputs.cache index 1a971c1..491e2f1 100644 --- a/UniversalTagEditor.Core/obj/Debug/net8.0/UniversalTagEditor.Core.AssemblyInfoInputs.cache +++ b/UniversalTagEditor.Core/obj/Debug/net8.0/UniversalTagEditor.Core.AssemblyInfoInputs.cache @@ -1 +1 @@ -94a01504c9684bef8b024e8129e72b18b214b08914b860557d28ec3c76acc34f +e70181ce0250be4da1ad664e642c86f2c134bf58c2c2e29bb8db3ac0db94ca21 diff --git a/UniversalTagEditor.Core/obj/Debug/net8.0/UniversalTagEditor.Core.csproj.CoreCompileInputs.cache b/UniversalTagEditor.Core/obj/Debug/net8.0/UniversalTagEditor.Core.csproj.CoreCompileInputs.cache deleted file mode 100644 index 430818e..0000000 --- a/UniversalTagEditor.Core/obj/Debug/net8.0/UniversalTagEditor.Core.csproj.CoreCompileInputs.cache +++ /dev/null @@ -1 +0,0 @@ -522ccfd2f0b66e94dae4b2e7afddeeb10d7bf472975a65b84fc79cd5fb1b7f9a diff --git a/UniversalTagEditor.Core/obj/Debug/net8.0/UniversalTagEditor.Core.csproj.FileListAbsolute.txt b/UniversalTagEditor.Core/obj/Debug/net8.0/UniversalTagEditor.Core.csproj.FileListAbsolute.txt deleted file mode 100644 index 25c8255..0000000 --- a/UniversalTagEditor.Core/obj/Debug/net8.0/UniversalTagEditor.Core.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,12 +0,0 @@ -C:\Users\GorokhovA\Source\Repos\MusicTagFixer\UniversalTagEditor.Core\bin\Debug\net8.0\UniversalTagEditor.Core.deps.json -C:\Users\GorokhovA\Source\Repos\MusicTagFixer\UniversalTagEditor.Core\bin\Debug\net8.0\UniversalTagEditor.Core.dll -C:\Users\GorokhovA\Source\Repos\MusicTagFixer\UniversalTagEditor.Core\bin\Debug\net8.0\UniversalTagEditor.Core.pdb -C:\Users\GorokhovA\Source\Repos\MusicTagFixer\UniversalTagEditor.Core\obj\Debug\net8.0\UniversalTagEditor.Core.csproj.AssemblyReference.cache -C:\Users\GorokhovA\Source\Repos\MusicTagFixer\UniversalTagEditor.Core\obj\Debug\net8.0\UniversalTagEditor.Core.GeneratedMSBuildEditorConfig.editorconfig -C:\Users\GorokhovA\Source\Repos\MusicTagFixer\UniversalTagEditor.Core\obj\Debug\net8.0\UniversalTagEditor.Core.AssemblyInfoInputs.cache -C:\Users\GorokhovA\Source\Repos\MusicTagFixer\UniversalTagEditor.Core\obj\Debug\net8.0\UniversalTagEditor.Core.AssemblyInfo.cs -C:\Users\GorokhovA\Source\Repos\MusicTagFixer\UniversalTagEditor.Core\obj\Debug\net8.0\UniversalTagEditor.Core.csproj.CoreCompileInputs.cache -C:\Users\GorokhovA\Source\Repos\MusicTagFixer\UniversalTagEditor.Core\obj\Debug\net8.0\UniversalTagEditor.Core.dll -C:\Users\GorokhovA\Source\Repos\MusicTagFixer\UniversalTagEditor.Core\obj\Debug\net8.0\refint\UniversalTagEditor.Core.dll -C:\Users\GorokhovA\Source\Repos\MusicTagFixer\UniversalTagEditor.Core\obj\Debug\net8.0\UniversalTagEditor.Core.pdb -C:\Users\GorokhovA\Source\Repos\MusicTagFixer\UniversalTagEditor.Core\obj\Debug\net8.0\ref\UniversalTagEditor.Core.dll diff --git a/UniversalTagEditor.Core/obj/Debug/net8.0/UniversalTagEditor.Core.dll b/UniversalTagEditor.Core/obj/Debug/net8.0/UniversalTagEditor.Core.dll deleted file mode 100644 index a93a70a..0000000 Binary files a/UniversalTagEditor.Core/obj/Debug/net8.0/UniversalTagEditor.Core.dll and /dev/null differ diff --git a/UniversalTagEditor.Core/obj/Debug/net8.0/ref/UniversalTagEditor.Core.dll b/UniversalTagEditor.Core/obj/Debug/net8.0/ref/UniversalTagEditor.Core.dll deleted file mode 100644 index 8a4be90..0000000 Binary files a/UniversalTagEditor.Core/obj/Debug/net8.0/ref/UniversalTagEditor.Core.dll and /dev/null differ diff --git a/UniversalTagEditor.Core/obj/Debug/net8.0/refint/UniversalTagEditor.Core.dll b/UniversalTagEditor.Core/obj/Debug/net8.0/refint/UniversalTagEditor.Core.dll deleted file mode 100644 index 8a4be90..0000000 Binary files a/UniversalTagEditor.Core/obj/Debug/net8.0/refint/UniversalTagEditor.Core.dll and /dev/null differ diff --git a/UniversalTagEditor.Core/obj/UniversalTagEditor.Core.csproj.nuget.dgspec.json b/UniversalTagEditor.Core/obj/UniversalTagEditor.Core.csproj.nuget.dgspec.json index 871b474..0ceece4 100644 --- a/UniversalTagEditor.Core/obj/UniversalTagEditor.Core.csproj.nuget.dgspec.json +++ b/UniversalTagEditor.Core/obj/UniversalTagEditor.Core.csproj.nuget.dgspec.json @@ -11,7 +11,7 @@ "projectName": "UniversalTagEditor.Core", "projectPath": "C:\\Users\\GorokhovA\\Source\\Repos\\MusicTagFixer\\UniversalTagEditor.Core\\UniversalTagEditor.Core.csproj", "packagesPath": "C:\\Users\\GorokhovA\\.nuget\\packages\\", - "outputPath": "C:\\Users\\GorokhovA\\Source\\Repos\\MusicTagFixer\\UniversalTagEditor.Core\\obj\\", + "outputPath": "C:\\Users\\GorokhovA\\source\\repos\\MusicTagFixer\\UniversalTagEditor.Core\\obj\\", "projectStyle": "PackageReference", "fallbackFolders": [ "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" diff --git a/UniversalTagEditor.Core/obj/project.assets.json b/UniversalTagEditor.Core/obj/project.assets.json index 6a7c96f..6d6867b 100644 --- a/UniversalTagEditor.Core/obj/project.assets.json +++ b/UniversalTagEditor.Core/obj/project.assets.json @@ -189,11 +189,11 @@ "project": { "version": "1.0.0", "restore": { - "projectUniqueName": "C:\\Users\\GorokhovA\\Source\\Repos\\MusicTagFixer\\UniversalTagEditor.Core\\UniversalTagEditor.Core.csproj", + "projectUniqueName": "C:\\Users\\GorokhovA\\source\\repos\\MusicTagFixer\\UniversalTagEditor.Core\\UniversalTagEditor.Core.csproj", "projectName": "UniversalTagEditor.Core", - "projectPath": "C:\\Users\\GorokhovA\\Source\\Repos\\MusicTagFixer\\UniversalTagEditor.Core\\UniversalTagEditor.Core.csproj", + "projectPath": "C:\\Users\\GorokhovA\\source\\repos\\MusicTagFixer\\UniversalTagEditor.Core\\UniversalTagEditor.Core.csproj", "packagesPath": "C:\\Users\\GorokhovA\\.nuget\\packages\\", - "outputPath": "C:\\Users\\GorokhovA\\Source\\Repos\\MusicTagFixer\\UniversalTagEditor.Core\\obj\\", + "outputPath": "C:\\Users\\GorokhovA\\source\\repos\\MusicTagFixer\\UniversalTagEditor.Core\\obj\\", "projectStyle": "PackageReference", "fallbackFolders": [ "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" diff --git a/UniversalTagEditor.Core/obj/project.nuget.cache b/UniversalTagEditor.Core/obj/project.nuget.cache index fc12e28..2883fee 100644 --- a/UniversalTagEditor.Core/obj/project.nuget.cache +++ b/UniversalTagEditor.Core/obj/project.nuget.cache @@ -1,6 +1,6 @@ { "version": 2, - "dgSpecHash": "zVSSFvUx2JY=", + "dgSpecHash": "DdO17/NeTpU=", "success": true, "projectFilePath": "C:\\Users\\GorokhovA\\Source\\Repos\\MusicTagFixer\\UniversalTagEditor.Core\\UniversalTagEditor.Core.csproj", "expectedPackageFiles": [ diff --git a/UniversalTagEditor.Core/runner.cs b/UniversalTagEditor.Core/runner.cs new file mode 100644 index 0000000..0f181e7 --- /dev/null +++ b/UniversalTagEditor.Core/runner.cs @@ -0,0 +1,107 @@ +using MetaBrainz.MusicBrainz; +using UniversalTagEditor.Helpers; +using UniversalTagEditor.Types; + +namespace UniversalTagEditor.Core; + +public sealed class UteOptions +{ + public required string WorkingDirectory { get; init; } + public string? AlbumInfoCsv { get; init; } // имя файла или путь + public string? AlbumCover { get; init; } // имя файла или путь + public string? Format { get; init; } // flac/mp3/... + public bool FixTags { get; init; } + public bool EnhanceStructure { get; init; } + public int MaxDegreeOfParallelism { get; init; } = 4; +} + +public sealed record ProgressInfo(int Done, int Total, string? CurrentFile); + +public static class Runner +{ + public static async Task RunAsync( + UteOptions opt, + IProgress? log = null, + IProgress? progress = null, + CancellationToken ct = default) + { + if (string.IsNullOrWhiteSpace(opt.WorkingDirectory)) + throw new ArgumentException("WorkingDirectory is empty."); + + if (!Directory.Exists(opt.WorkingDirectory)) + throw new DirectoryNotFoundException(opt.WorkingDirectory); + + var format = (opt.Format ?? "").Trim(); + if (string.IsNullOrWhiteSpace(format)) + throw new ArgumentException("Format (-f) is required."); + + // Album data (csv + cover) + AlbumInfo album = new(); + + if (!string.IsNullOrWhiteSpace(opt.AlbumInfoCsv)) + { + var csvPath = MakePath(opt.WorkingDirectory, opt.AlbumInfoCsv!); + var records = CsvParser.ParseCsvTable(csvPath); + album = new AlbumInfo { Tracks = records }; + } + + if (!string.IsNullOrWhiteSpace(opt.AlbumCover)) + album.Cover = MakePath(opt.WorkingDirectory, opt.AlbumCover!); + + // Collect files + var files = new List(); + files.AddRange(Directory.GetFiles(opt.WorkingDirectory, $"*.{format}")); + + if (!opt.EnhanceStructure) + { + foreach (var dir in Directory.GetDirectories(opt.WorkingDirectory)) + files.AddRange(Directory.GetFiles(dir, $"*.{format}")); + } + + if (files.Count == 0) + { + log?.Report("Файлы не найдены."); + return; + } + + // ВАЖНО: Query НЕ потокобезопасен — делаем отдельный на каждый поток + var queries = new ThreadLocal(() => + new Query("NavidromeMetadataRecovery", "1.0")); + + int done = 0; + int total = files.Count; + + // Нормальная параллельность вместо Thread + async void + await Parallel.ForEachAsync( + files.Select((path, index) => (path, index)), + new ParallelOptions + { + MaxDegreeOfParallelism = Math.Max(1, opt.MaxDegreeOfParallelism), + CancellationToken = ct + }, + async (item, token) => + { + var (file, index) = item; + + if (opt.FixTags) + { + await TagEditor.Fix(file, queries.Value!, opt.EnhanceStructure, format); + } + else + { + TagEditor.Edit(file, album, index); + } + + var nowDone = Interlocked.Increment(ref done); + progress?.Report(new ProgressInfo(nowDone, total, file)); + log?.Report($"{nowDone}/{total}: {file} успешно обработан"); + }); + + log?.Report("Готово!"); + } + + private static string MakePath(string workDir, string maybeFileOrPath) + => Path.IsPathRooted(maybeFileOrPath) + ? maybeFileOrPath + : Path.Combine(workDir, maybeFileOrPath); +} \ No newline at end of file diff --git a/UniversalTagEditor.sln b/UniversalTagEditor.sln index 29b63f4..821c0e9 100644 --- a/UniversalTagEditor.sln +++ b/UniversalTagEditor.sln @@ -2,9 +2,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{827E0CD3-B72D-47B6-A68D-7590B98EB39B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalTagEditor.CUI", "UniversalTagEditor.CUI\UniversalTagEditor.CUI.csproj", "{D5E49A25-1755-40AF-222B-1B6B25021959}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalTagEditor", "src\UniversalTagEditor.csproj", "{F12A64BA-EF0D-DBA6-7B72-63FC4220F8EC}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalTagEditor.Core", "UniversalTagEditor.Core\UniversalTagEditor.Core.csproj", "{7FCA3DD3-F46A-4F7C-B58F-5BF7C30C9C0D}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -12,17 +12,18 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {F12A64BA-EF0D-DBA6-7B72-63FC4220F8EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F12A64BA-EF0D-DBA6-7B72-63FC4220F8EC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F12A64BA-EF0D-DBA6-7B72-63FC4220F8EC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F12A64BA-EF0D-DBA6-7B72-63FC4220F8EC}.Release|Any CPU.Build.0 = Release|Any CPU + {D5E49A25-1755-40AF-222B-1B6B25021959}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D5E49A25-1755-40AF-222B-1B6B25021959}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D5E49A25-1755-40AF-222B-1B6B25021959}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D5E49A25-1755-40AF-222B-1B6B25021959}.Release|Any CPU.Build.0 = Release|Any CPU + {7FCA3DD3-F46A-4F7C-B58F-5BF7C30C9C0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7FCA3DD3-F46A-4F7C-B58F-5BF7C30C9C0D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7FCA3DD3-F46A-4F7C-B58F-5BF7C30C9C0D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7FCA3DD3-F46A-4F7C-B58F-5BF7C30C9C0D}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {F12A64BA-EF0D-DBA6-7B72-63FC4220F8EC} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} - EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {D0E6B6A0-0573-41C6-88A8-2678B8799BA7} EndGlobalSection diff --git a/src/Program.cs b/src/Program.cs deleted file mode 100644 index 18aa4c3..0000000 --- a/src/Program.cs +++ /dev/null @@ -1,121 +0,0 @@ -using UniversalTagEditor.Helpers; -using UniversalTagEditor.Types; - -using MetaBrainz.MusicBrainz; - -namespace UniversalTagEditor; - -class Program -{ - static async Task Main(string[] args) - { - string albumInfo = ""; - string albumCover = ""; - string format = ""; - string workingDirectory = ""; - bool fixTags = false; - bool enhanceStructure = false; - - List threads = new(); - - var query = new Query("NavidromeMetadataRecovery1", "1.0"); - var query2 = new Query("NavidromeMetadataRecovery2", "1.0"); - var query3 = new Query("NavidromeMetadataRecovery3", "1.0"); - var query4 = new Query("NavidromeMetadataRecovery4", "1.0"); - - for (int i = 0; i < args.Length; i++) - { - switch (args[i]) - { - case "-w": - if (i + 1 < args.Length) workingDirectory = args[i + 1]; - i++; - break; - - case "-a": - if (i + 1 < args.Length) albumInfo = args[i + 1]; - i++; - break; - - case "-f": - if (i + 1 < args.Length) format = args[i + 1]; - i++; - break; - - case "-c": - if (i + 1 < args.Length) albumCover = args[i + 1]; - i++; - break; - - case "--fix-tags": - fixTags = true; - break; - case "--enhance-structure": - enhanceStructure = true; - break; - } - } - - TrackInfo[] records; - AlbumInfo album = new(); - if (albumInfo != "") - { - records = CsvParser.ParseCsvTable(Path.Combine(workingDirectory, albumInfo)); - album = new() - { - Tracks = records - }; - } - if (albumCover != "") - album.Cover = Path.Combine(workingDirectory, albumCover); - - List files = new(); - files.AddRange(Directory.GetFiles(workingDirectory, $"*.{format}")); - - if (!enhanceStructure) { - string[] directories = Directory.GetDirectories(workingDirectory); - foreach(string directory in directories) - files.AddRange(Directory.GetFiles(directory, $"*.{format}")); - } - - Func, Query, int, Task> cycle = async (List chunk, Query query, int thread) => - { - threads.Add(thread); - for (int i = 0; i < chunk.Count; i++) - { - if (fixTags) - await TagEditor.Fix(chunk[i], query, enhanceStructure, format); - else - TagEditor.Edit(chunk[i], album, i); - Console.WriteLine($"{i+1}. {chunk[i]} successfully edited"); - } - threads.Remove(thread); - }; - - if ((int)(files.Count / 4) > 1) - { - Thread thread = new Thread(async () => await cycle(files.GetRange(0, (int)(files.Count / 4)), query, 1)) { IsBackground = true }; - thread.Start(); - - Thread thread2 = new Thread(async () => await cycle(files.GetRange((int)(files.Count / 4), (int)(files.Count / 4)), query2, 2)) { IsBackground = true }; - thread2.Start(); - - if ((int)(files.Count / 4) >= 3) { - Thread thread3 = new Thread(async () => await cycle(files.GetRange(((int)(files.Count / 4) * 2), (int)(files.Count / 4)), query3, 3)) { IsBackground = true }; - thread3.Start(); - } - if ((int)(files.Count / 4) >= 4) { - Thread thread4 = new Thread(async () => await cycle(files.GetRange(((int)(files.Count / 4) * 3), files.Count - ((int)(files.Count / 4) * 3)), query4, 4)) { IsBackground = true }; - thread4.Start(); - } - - Console.WriteLine("Waiting for threads complete"); - while(threads.Count > 0) { } - Console.ForegroundColor = ConsoleColor.Green; - Console.WriteLine("\n\nTag fixing completed!"); - Console.ResetColor(); - } - else - await cycle(files, query, 1); - } -} \ No newline at end of file