From 399691cb05a3e92be12505bfa2e438097e72b680 Mon Sep 17 00:00:00 2001 From: TheLanc3 Date: Thu, 5 Feb 2026 10:08:45 +0300 Subject: [PATCH] Enhanced Thread-waiting. Shorted delay for MusicBrainZ API requests --- README.md | 2 +- src/Helpers/TagEditor.cs | 2 +- src/Program.cs | 21 ++++++++++++++------- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index ceca580..de22948 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ - `-f ` **optional** - формат треков для фильтрованного чтения указанной директории (mp3, flac, wav и т.д) - `-c ` **optional** - ищет в указанной директории указанное изображение обложки тех или иных альбомов **(БУДЕТ ИЗМЕНЕНО)** - `--fix-tags` **optional** - исправляет теги (меняет разделитель в теге исполнителей, заполняет пустой тег исполнителей альбома самими исполнителями и пытается найти жанры в MusicBrainz API) -- `--enhance-structure` **optional** - улучшает структуру +- `--enhance-structure` **optional** - улучшает структуру хранения треков(применяется вместе с `--fix-tags`) ## Примерный шаблон Windows .bat файла ```bat @setlocal enableextensions diff --git a/src/Helpers/TagEditor.cs b/src/Helpers/TagEditor.cs index afc7300..4dc1cf2 100644 --- a/src/Helpers/TagEditor.cs +++ b/src/Helpers/TagEditor.cs @@ -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); } } diff --git a/src/Program.cs b/src/Program.cs index 835747f..18aa4c3 100644 --- a/src/Program.cs +++ b/src/Program.cs @@ -16,6 +16,8 @@ class Program 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"); @@ -76,8 +78,9 @@ class Program files.AddRange(Directory.GetFiles(directory, $"*.{format}")); } - Func, Query, Task> cycle = async (List chunk, Query query) => + 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) @@ -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); } } \ No newline at end of file