forked from TheLanc3/MusicTagFixer
Init commit
This commit is contained in:
114
src/Program.cs
Normal file
114
src/Program.cs
Normal file
@@ -0,0 +1,114 @@
|
||||
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;
|
||||
|
||||
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<string> 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<List<string>, Query, Task> cycle = async (List<string> chunk, Query query) =>
|
||||
{
|
||||
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");
|
||||
}
|
||||
};
|
||||
|
||||
if ((int)(files.Count / 4) > 1)
|
||||
{
|
||||
Thread thread = new Thread(async () => await cycle(files.GetRange(0, (int)(files.Count / 4)), query)) { IsBackground = true };
|
||||
thread.Start();
|
||||
|
||||
Thread thread2 = new Thread(async () => await cycle(files.GetRange((int)(files.Count / 4), (int)(files.Count / 4)), query2)) { 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)) { 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)) { IsBackground = true };
|
||||
thread4.Start();
|
||||
}
|
||||
|
||||
Console.WriteLine("Waiting for threads complete");
|
||||
Console.ReadKey();
|
||||
}
|
||||
else
|
||||
await cycle(files, query);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user