Enhanced Thread-waiting. Shorted delay for MusicBrainZ API requests

This commit is contained in:
2026-02-05 10:08:45 +03:00
parent a59905073d
commit 399691cb05
3 changed files with 16 additions and 9 deletions

View File

@@ -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

View File

@@ -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);
}
}

View File

@@ -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);
}
}