@@ -25,26 +25,6 @@ namespace yup
2525namespace
2626{
2727
28- bool canScanFileWithFormat (AudioPluginFormatType type, const File& file)
29- {
30- switch (type)
31- {
32- case AudioPluginFormatType::vst3:
33- return file.hasFileExtension (" .vst3" );
34-
35- case AudioPluginFormatType::clap:
36- return file.hasFileExtension (" .clap" );
37-
38- case AudioPluginFormatType::audioUnit:
39- return false ;
40-
41- default :
42- break ;
43- }
44-
45- return false ;
46- }
47-
4828struct FileScanTask
4929{
5030 File file;
@@ -128,35 +108,45 @@ AudioPluginScanner::ScanResult AudioPluginScanner::scan (const FileSearchPath& s
128108{
129109 ScanResult result;
130110
131- // AUv2 does not use file system scanning; delegate directly if registered.
132- if (auto * auFormat = getFormatForType (AudioPluginFormatType::audioUnit))
111+ for (const auto & format : formats)
133112 {
134- // AUv2 scanFile() with an invalid File triggers registry enumeration
135- auto auResult = auFormat->scanFile (File {});
136- if (auResult.wasOk ())
113+ if (format->getFileExtensions ().isEmpty ())
137114 {
138- auto descriptions = auResult.getValue ();
139- result.discovered .insert (result.discovered .end (),
140- descriptions.begin (),
141- descriptions.end ());
115+ auto scanResult = format->scanFile (File {});
116+ if (scanResult.wasOk ())
117+ {
118+ auto descriptions = scanResult.getValue ();
119+ result.discovered .insert (result.discovered .end (),
120+ descriptions.begin (),
121+ descriptions.end ());
122+ }
142123 }
143124 }
144125
145126 std::vector<FileScanTask> tasks;
146127 const int numPaths = searchPath.getNumPaths ();
147128
148- for (int p = 0 ; p < numPaths; ++p )
129+ for (const auto & format : formats )
149130 {
150- Array<File> files;
151- searchPath[p].findChildFiles (files, File::findFilesAndDirectories, true , " *" , File::FollowSymlinks::noCycles);
131+ String wildcardPattern;
132+ for (const auto & ext : format->getFileExtensions ())
133+ {
134+ if (wildcardPattern.isNotEmpty ())
135+ wildcardPattern += " ;" ;
152136
153- for (const auto & file : files)
137+ wildcardPattern += " *" + ext;
138+ }
139+
140+ if (wildcardPattern.isEmpty ())
141+ continue ;
142+
143+ for (int p = 0 ; p < numPaths; ++p)
154144 {
155- for (const auto & format : formats)
156- {
157- if (! canScanFileWithFormat (format->getFormatType (), file))
158- continue ;
145+ Array<File> files;
146+ searchPath[p].findChildFiles (files, File::findFilesAndDirectories, true , wildcardPattern, File::FollowSymlinks::noCycles);
159147
148+ for (const auto & file : files)
149+ {
160150 FileScanTask task;
161151 task.file = file;
162152 task.format = format.get ();
0 commit comments