Result findDescriptionsAndPerform()

in pedalboard/juce_overrides/juce_PatchedVST3PluginFormat.cpp [916:992]


  Result findDescriptionsAndPerform(const File &file) {
    StringArray foundNames;
    PFactoryInfo factoryInfo;
    factory->getFactoryInfo(&factoryInfo);
    auto companyName = toString(factoryInfo.vendor).trim();

    Result result(Result::ok());

    auto numClasses = factory->countClasses();

    for (Steinberg::int32 i = 0; i < numClasses; ++i) {
      PClassInfo info;
      factory->getClassInfo(i, &info);

      if (std::strcmp(info.category, kVstAudioEffectClass) != 0)
        continue;

      const String name(toString(info.name).trim());

      if (foundNames.contains(name, true))
        continue;

      std::unique_ptr<PClassInfo2> info2;
      std::unique_ptr<PClassInfoW> infoW;

      {
        VSTComSmartPtr<IPluginFactory2> pf2;
        VSTComSmartPtr<IPluginFactory3> pf3;

        if (pf2.loadFrom(factory)) {
          info2.reset(new PClassInfo2());
          pf2->getClassInfo2(i, info2.get());
        }

        if (pf3.loadFrom(factory)) {
          infoW.reset(new PClassInfoW());
          pf3->getClassInfoUnicode(i, infoW.get());
        }
      }

      foundNames.add(name);

      PluginDescription desc;

      {
        VSTComSmartPtr<Vst::IComponent> component;

        if (component.loadFrom(factory, info.cid)) {
          if (component->initialize(Patchedvst3HostContext->getFUnknown()) ==
              kResultOk) {
            auto numInputs =
                getNumSingleDirectionChannelsFor(component, true, true);
            auto numOutputs =
                getNumSingleDirectionChannelsFor(component, false, true);

            createPluginDescription(desc, file, companyName, name, info,
                                    info2.get(), infoW.get(), numInputs,
                                    numOutputs);

            component->terminate();
          } else {
            jassertfalse;
          }
        } else {
          jassertfalse;
        }
      }

      if (desc.uniqueId != 0)
        result = performOnDescription(desc);

      if (result.failed())
        break;
    }

    return result;
  }