Enhanced Thread-waiting. Shorted delay for MusicBrainZ API requests
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
- `-f <format>` **optional** - формат треков для фильтрованного чтения указанной директории (mp3, flac, wav и т.д)
|
||||
- `-c <filename>` **optional** - ищет в указанной директории указанное изображение обложки тех или иных альбомов **(БУДЕТ ИЗМЕНЕНО)**
|
||||
- `--fix-tags` **optional** - исправляет теги (меняет разделитель в теге исполнителей, заполняет пустой тег исполнителей альбома самими исполнителями и пытается найти жанры в MusicBrainz API)
|
||||
- `--enhance-structure` **optional** - улучшает структуру
|
||||
- `--enhance-structure` **optional** - улучшает структуру хранения треков(применяется вместе с `--fix-tags`)
|
||||
## Примерный шаблон Windows .bat файла
|
||||
```bat
|
||||
@setlocal enableextensions
|
||||
|
||||
@@ -106,7 +106,7 @@ public static class TagEditor {
|
||||
System.IO.File.Delete(filePath);
|
||||
else
|
||||
System.IO.File.Move(filePath, output);
|
||||
await Task.Delay(1000);
|
||||
await Task.Delay(500);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,8 @@ class Program
|
||||
bool fixTags = false;
|
||||
bool enhanceStructure = false;
|
||||
|
||||
List<decimal> threads = new();
|
||||
|
||||
var query = new Query("NavidromeMetadataRecovery1", "1.0");
|
||||
var query2 = new Query("NavidromeMetadataRecovery2", "1.0");
|
||||
var query3 = new Query("NavidromeMetadataRecovery3", "1.0");
|
||||
@@ -76,8 +78,9 @@ class Program
|
||||
files.AddRange(Directory.GetFiles(directory, $"*.{format}"));
|
||||
}
|
||||
|
||||
Func<List<string>, Query, Task> cycle = async (List<string> chunk, Query query) =>
|
||||
Func<List<string>, Query, int, Task> cycle = async (List<string> chunk, Query query, int thread) =>
|
||||
{
|
||||
threads.Add(thread);
|
||||
for (int i = 0; i < chunk.Count; i++)
|
||||
{
|
||||
if (fixTags)
|
||||
@@ -86,29 +89,33 @@ class Program
|
||||
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)) { IsBackground = true };
|
||||
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)) { IsBackground = true };
|
||||
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)) { IsBackground = true };
|
||||
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)) { IsBackground = true };
|
||||
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");
|
||||
Console.ReadKey();
|
||||
while(threads.Count > 0) { }
|
||||
Console.ForegroundColor = ConsoleColor.Green;
|
||||
Console.WriteLine("\n\nTag fixing completed!");
|
||||
Console.ResetColor();
|
||||
}
|
||||
else
|
||||
await cycle(files, query);
|
||||
await cycle(files, query, 1);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user