/* ============================================================================== This file is part of the JUCE library. Copyright (c) 2020 - Raw Material Software Limited JUCE is an open source library subject to commercial or open-source licensing. By using JUCE, you agree to the terms of both the JUCE 6 End-User License Agreement and JUCE Privacy Policy (both effective as of the 16th June 2020). End User License Agreement: www.juce.com/juce-6-licence Privacy Policy: www.juce.com/juce-privacy-policy Or: You may also use this code under the terms of the GPL v3 (see www.gnu.org/licenses). JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE DISCLAIMED. ============================================================================== */ namespace juce { bool PluginDescription::isDuplicateOf (const PluginDescription& other) const noexcept { const auto tie = [] (const PluginDescription& d) { return std::tie (d.fileOrIdentifier, d.deprecatedUid, d.uniqueId); }; return tie (*this) == tie (other); } static String getPluginDescSuffix (const PluginDescription& d, int uid) { return "-" + String::toHexString (d.fileOrIdentifier.hashCode()) + "-" + String::toHexString (uid); } bool PluginDescription::matchesIdentifierString (const String& identifierString) const { const auto matches = [&] (int uid) { return identifierString.endsWithIgnoreCase (getPluginDescSuffix (*this, uid)); }; return matches (uniqueId) || matches (deprecatedUid); } String PluginDescription::createIdentifierString() const { return pluginFormatName + "-" + name + getPluginDescSuffix (*this, uniqueId); } std::unique_ptr PluginDescription::createXml() const { auto e = std::make_unique ("PLUGIN"); e->setAttribute ("name", name); if (descriptiveName != name) e->setAttribute ("descriptiveName", descriptiveName); e->setAttribute ("format", pluginFormatName); e->setAttribute ("category", category); e->setAttribute ("manufacturer", manufacturerName); e->setAttribute ("version", version); e->setAttribute ("file", fileOrIdentifier); e->setAttribute ("uniqueId", String::toHexString (uniqueId)); e->setAttribute ("isInstrument", isInstrument); e->setAttribute ("fileTime", String::toHexString (lastFileModTime.toMilliseconds())); e->setAttribute ("infoUpdateTime", String::toHexString (lastInfoUpdateTime.toMilliseconds())); e->setAttribute ("numInputs", numInputChannels); e->setAttribute ("numOutputs", numOutputChannels); e->setAttribute ("isShell", hasSharedContainer); e->setAttribute ("uid", String::toHexString (deprecatedUid)); return e; } bool PluginDescription::loadFromXml (const XmlElement& xml) { if (xml.hasTagName ("PLUGIN")) { name = xml.getStringAttribute ("name"); descriptiveName = xml.getStringAttribute ("descriptiveName", name); pluginFormatName = xml.getStringAttribute ("format"); category = xml.getStringAttribute ("category"); manufacturerName = xml.getStringAttribute ("manufacturer"); version = xml.getStringAttribute ("version"); fileOrIdentifier = xml.getStringAttribute ("file"); isInstrument = xml.getBoolAttribute ("isInstrument", false); lastFileModTime = Time (xml.getStringAttribute ("fileTime").getHexValue64()); lastInfoUpdateTime = Time (xml.getStringAttribute ("infoUpdateTime").getHexValue64()); numInputChannels = xml.getIntAttribute ("numInputs"); numOutputChannels = xml.getIntAttribute ("numOutputs"); hasSharedContainer = xml.getBoolAttribute ("isShell", false); deprecatedUid = xml.getStringAttribute ("uid").getHexValue32(); uniqueId = xml.getStringAttribute ("uniqueId", "0").getHexValue32(); return true; } return false; } } // namespace juce