diff --git a/OpenUtau.Core/DocManager.cs b/OpenUtau.Core/DocManager.cs index 96b50100d..e7f0abd25 100644 --- a/OpenUtau.Core/DocManager.cs +++ b/OpenUtau.Core/DocManager.cs @@ -80,7 +80,7 @@ public void SearchAllPlugins() { if (File.Exists(oldBuiltin)) { File.Delete(oldBuiltin); } - files.AddRange(Directory.EnumerateFiles(PathManager.Inst.PluginsPath, "*.dll", SearchOption.AllDirectories)); + SearchPluginInternal(PathManager.Inst.PluginsPath, files); } catch (Exception e) { Log.Error(e, "Failed to search plugins."); } @@ -118,6 +118,16 @@ public void SearchAllPlugins() { stopWatch.Stop(); Log.Information($"Search all plugins: {stopWatch.Elapsed}"); } + private void SearchPluginInternal(string path, List result) { + if (Directory.EnumerateFiles(path, "plugin.txt", SearchOption.TopDirectoryOnly).Any()) { + return; + } + result.AddRange(Directory.EnumerateFiles(path, "*.dll", SearchOption.TopDirectoryOnly)); + var directories = Directory.EnumerateDirectories(path, "*", SearchOption.TopDirectoryOnly); + foreach (var directory in directories) { + SearchPluginInternal(directory, result); + } + } #region Command Queue