The JUCE cross-platform C++ framework, with DISTRHO/KXStudio specific changes
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
3.7KB

  1. /*
  2. ==============================================================================
  3. This file is part of the JUCE library.
  4. Copyright (c) 2017 - ROLI Ltd.
  5. JUCE is an open source library subject to commercial or open-source
  6. licensing.
  7. By using JUCE, you agree to the terms of both the JUCE 5 End-User License
  8. Agreement and JUCE 5 Privacy Policy (both updated and effective as of the
  9. 27th April 2017).
  10. End User License Agreement: www.juce.com/juce-5-licence
  11. Privacy Policy: www.juce.com/juce-5-privacy-policy
  12. Or: You may also use this code under the terms of the GPL v3 (see
  13. www.gnu.org/licenses).
  14. JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
  15. EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
  16. DISCLAIMED.
  17. ==============================================================================
  18. */
  19. namespace juce
  20. {
  21. bool PluginDescription::isDuplicateOf (const PluginDescription& other) const noexcept
  22. {
  23. return fileOrIdentifier == other.fileOrIdentifier
  24. && uid == other.uid;
  25. }
  26. static String getPluginDescSuffix (const PluginDescription& d)
  27. {
  28. return "-" + String::toHexString (d.fileOrIdentifier.hashCode())
  29. + "-" + String::toHexString (d.uid);
  30. }
  31. bool PluginDescription::matchesIdentifierString (const String& identifierString) const
  32. {
  33. return identifierString.endsWithIgnoreCase (getPluginDescSuffix (*this));
  34. }
  35. String PluginDescription::createIdentifierString() const
  36. {
  37. return pluginFormatName + "-" + name + getPluginDescSuffix (*this);
  38. }
  39. std::unique_ptr<XmlElement> PluginDescription::createXml() const
  40. {
  41. auto e = std::make_unique<XmlElement> ("PLUGIN");
  42. e->setAttribute ("name", name);
  43. if (descriptiveName != name)
  44. e->setAttribute ("descriptiveName", descriptiveName);
  45. e->setAttribute ("format", pluginFormatName);
  46. e->setAttribute ("category", category);
  47. e->setAttribute ("manufacturer", manufacturerName);
  48. e->setAttribute ("version", version);
  49. e->setAttribute ("file", fileOrIdentifier);
  50. e->setAttribute ("uid", String::toHexString (uid));
  51. e->setAttribute ("isInstrument", isInstrument);
  52. e->setAttribute ("fileTime", String::toHexString (lastFileModTime.toMilliseconds()));
  53. e->setAttribute ("infoUpdateTime", String::toHexString (lastInfoUpdateTime.toMilliseconds()));
  54. e->setAttribute ("numInputs", numInputChannels);
  55. e->setAttribute ("numOutputs", numOutputChannels);
  56. e->setAttribute ("isShell", hasSharedContainer);
  57. return e;
  58. }
  59. bool PluginDescription::loadFromXml (const XmlElement& xml)
  60. {
  61. if (xml.hasTagName ("PLUGIN"))
  62. {
  63. name = xml.getStringAttribute ("name");
  64. descriptiveName = xml.getStringAttribute ("descriptiveName", name);
  65. pluginFormatName = xml.getStringAttribute ("format");
  66. category = xml.getStringAttribute ("category");
  67. manufacturerName = xml.getStringAttribute ("manufacturer");
  68. version = xml.getStringAttribute ("version");
  69. fileOrIdentifier = xml.getStringAttribute ("file");
  70. uid = xml.getStringAttribute ("uid").getHexValue32();
  71. isInstrument = xml.getBoolAttribute ("isInstrument", false);
  72. lastFileModTime = Time (xml.getStringAttribute ("fileTime").getHexValue64());
  73. lastInfoUpdateTime = Time (xml.getStringAttribute ("infoUpdateTime").getHexValue64());
  74. numInputChannels = xml.getIntAttribute ("numInputs");
  75. numOutputChannels = xml.getIntAttribute ("numOutputs");
  76. hasSharedContainer = xml.getBoolAttribute ("isShell", false);
  77. return true;
  78. }
  79. return false;
  80. }
  81. } // namespace juce