#ifndef CustomPluginScanner_hpp #define CustomPluginScanner_hpp #include "common.h" #include class ScannerSuperprocess; class CustomPluginScanner final : public juce::KnownPluginList::CustomScanner { public: CustomPluginScanner(const juce::String& architecture, const std::list & skipIdentifiers); ~CustomPluginScanner() override; bool findPluginTypesFor (juce::AudioPluginFormat& format, juce::OwnedArray& result, const juce::String& fileOrIdentifier) override; void scanFinished() override; private: /* Scans for a plugin with format 'formatName' and ID 'fileOrIdentifier' using a subprocess, and adds discovered plugin descriptions to 'result'. Returns true on success. Failure indicates that the subprocess is unrecoverable and should be terminated. */ bool addPluginDescriptions (const juce::String& formatName, const juce::String& fileOrIdentifier, juce::OwnedArray& result); juce::String architecture; std::mutex threadSuperprocessMutex; std::map> threadSuperprocess; std::list skipIdentifiers; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CustomPluginScanner) }; #endif /* CustomPluginScanner_hpp */