Can you make PluginListComponent::scanFor static, so i can use it outside the PluginListComponent?
I could also copy the function, but i don’t like the duplication of code…
… and please increase the time in the dispatchLoop (20ms) , currently i get heavy redraw artefacts, while the app is not responding
yes 100 should be ok too!
…with parameter passing?, but a better solution is to create a seperate PluginListHelpers class/namespace ( for separating GUI an App-Logic)
Here it is:
class PluginListHelpers
{
public:
static void scanFor(AudioPluginFormat* format, KnownPluginList& list,PropertiesFile* propertiesToUse, File deadMansPedalFile)
{
#if JUCE_MODAL_LOOPS_PERMITTED
if (format == nullptr)
return;
FileSearchPath path (format->getDefaultLocationsToSearch());
if (propertiesToUse != nullptr)
path = propertiesToUse->getValue ("lastPluginScanPath_" + format->getName(), path.toString());
{
AlertWindow aw (TRANS("Select folders to scan..."), String::empty, AlertWindow::NoIcon);
FileSearchPathListComponent pathList;
pathList.setSize (500, 300);
pathList.setPath (path);
aw.addCustomComponent (&pathList);
aw.addButton (TRANS("Scan"), 1, KeyPress::returnKey);
aw.addButton (TRANS("Cancel"), 0, KeyPress::escapeKey);
if (aw.runModalLoop() == 0)
return;
path = pathList.getPath();
}
if (propertiesToUse != nullptr)
{
propertiesToUse->setValue ("lastPluginScanPath_" + format->getName(), path.toString());
propertiesToUse->saveIfNeeded();
}
double progress = 0.0;
AlertWindow aw (TRANS("Scanning for plugins..."),
TRANS("Searching for all possible plugin files..."), AlertWindow::NoIcon);
aw.addButton (TRANS("Cancel"), 0, KeyPress::escapeKey);
aw.addProgressBarComponent (progress);
aw.enterModalState();
MessageManager::getInstance()->runDispatchLoopUntil (100);
PluginDirectoryScanner scanner (list, *format, path, true, deadMansPedalFile);
for (;;)
{
aw.setMessage (TRANS("Testing:\n\n")
+ scanner.getNextPluginFileThatWillBeScanned());
MessageManager::getInstance()->runDispatchLoopUntil (20);
if (! scanner.scanNextFile (true))
break;
if (! aw.isCurrentlyModal())
break;
progress = scanner.getProgress();
}
if (scanner.getFailedFiles().size() > 0)
{
StringArray shortNames;
for (int i = 0; i < scanner.getFailedFiles().size(); ++i)
shortNames.add (File (scanner.getFailedFiles()[i]).getFileName());
AlertWindow::showMessageBox (AlertWindow::InfoIcon,
TRANS("Scan complete"),
TRANS("Note that the following files appeared to be plugin files, but failed to load correctly:\n\n")
+ shortNames.joinIntoString (", "));
}
#else
jassertfalse; // this method needs refactoring to work without modal loops..
#endif
};
};
i’m seeing you working on these classes now, so again my request is, that it would be nice to use “scanFor” independently from the GUI-Classes (separating GUI from functionality)
At least can you make scanFor public, so i can hold an instance of PluginListComponent in the background, and can trigger the plugin-scanning.
(so i can benefit from the latest plugin-scanning code, without duplicating the code it in my own classes…) Please.