117 Q_PROPERTY (QString name READ name CONSTANT FINAL)
118 Q_PROPERTY (QString vendor READ vendor CONSTANT FINAL)
119 Q_PROPERTY (QString format READ format CONSTANT FINAL)
120 Q_PROPERTY (QString category READ category CONSTANT FINAL)
124 static std::unique_ptr<PluginDescriptor>
125 from_juce_description (
const juce::PluginDescription &juce_desc);
127 std::unique_ptr<juce::PluginDescription> to_juce_description ()
const;
136 [[nodiscard]] QString name ()
const {
return name_.to_qstring (); }
137 QString format ()
const;
138 QString vendor ()
const;
139 QString category ()
const;
148 Q_INVOKABLE
bool isInstrument ()
const;
149 Q_INVOKABLE
bool isEffect ()
const;
150 Q_INVOKABLE
bool isModulator ()
const;
151 Q_INVOKABLE
bool isMidiModifier ()
const;
178 friend void init_from (
184 static constexpr auto kAuthorKey =
"author"sv;
185 static constexpr auto kNameKey =
"name"sv;
186 static constexpr auto kWebsiteKey =
"website"sv;
187 static constexpr auto kCategoryKey =
"category"sv;
188 static constexpr auto kCategoryStringKey =
"categoryString"sv;
189 static constexpr auto kNumAudioInsKey =
"numAudioIns"sv;
190 static constexpr auto kNumAudioOutsKey =
"numAudioOuts"sv;
191 static constexpr auto kNumMidiInsKey =
"numMidiIns"sv;
192 static constexpr auto kNumMidiOutsKey =
"numMidiOuts"sv;
193 static constexpr auto kNumCtrlInsKey =
"numCtrlIns"sv;
194 static constexpr auto kNumCtrlOutsKey =
"numCtrlOuts"sv;
195 static constexpr auto kNumCvInsKey =
"numCvIns"sv;
196 static constexpr auto kNumCvOutsKey =
"numCvOuts"sv;
197 static constexpr auto kUniqueIdKey =
"uniqueId"sv;
198 static constexpr auto kDeprecatedUniqueIdKey =
"deprecatedUniqueId"sv;
199 static constexpr auto kArchitectureKey =
"architecture"sv;
200 static constexpr auto kProtocolKey =
"protocol"sv;
201 static constexpr auto kPathOrIdKey =
"pathOrId"sv;
202 static constexpr auto kMinBridgeModeKey =
"minBridgeMode"sv;
203 static constexpr auto kHasCustomUIKey =
"hasCustomUI"sv;
207 { kAuthorKey, p.author_ },
208 { kNameKey, p.name_ },
209 { kWebsiteKey, p.website_ },
210 { kCategoryKey, p.category_ },
222 { kArchitectureKey, p.
arch_ },
226 { kHasCustomUIKey, p.has_custom_ui_ },
229 friend void from_json (
const nlohmann::json &j, PluginDescriptor &p)
231 j.at (kAuthorKey).get_to (p.author_);
232 j.at (kNameKey).get_to (p.name_);
233 j.at (kWebsiteKey).get_to (p.website_);
234 j.at (kCategoryKey).get_to (p.category_);
235 j.at (kCategoryStringKey).get_to (p.category_str_);
236 j.at (kNumAudioInsKey).get_to (p.num_audio_ins_);
237 j.at (kNumAudioOutsKey).get_to (p.num_audio_outs_);
238 j.at (kNumMidiInsKey).get_to (p.num_midi_ins_);
239 j.at (kNumMidiOutsKey).get_to (p.num_midi_outs_);
240 j.at (kNumCtrlInsKey).get_to (p.num_ctrl_ins_);
241 j.at (kNumCtrlOutsKey).get_to (p.num_ctrl_outs_);
242 j.at (kNumCvInsKey).get_to (p.num_cv_ins_);
243 j.at (kNumCvOutsKey).get_to (p.num_cv_outs_);
244 j.at (kUniqueIdKey).get_to (p.unique_id_);
245 j.at (kArchitectureKey).get_to (p.arch_);
246 j.at (kProtocolKey).get_to (p.protocol_);
248 const auto val = j.at (kPathOrIdKey);
249 if (val[zrythm::utils::serialization::kVariantIndexKey] == 0)
252 val[zrythm::utils::serialization::kVariantValueKey].get<fs::path> ();
257 val[zrythm::utils::serialization::kVariantValueKey]
258 .get<utils::Utf8String> ();
261 j.at (kMinBridgeModeKey).get_to (p.min_bridge_mode_);
262 j.at (kHasCustomUIKey).get_to (p.has_custom_ui_);
265 friend bool operator== (
const PluginDescriptor &a,
const PluginDescriptor &b)
267 constexpr auto tie = [] (
const auto &p) {
269 p.arch_, p.protocol_, p.path_or_id_, p.unique_id_,
270 p.juce_compat_deprecated_unique_id_, p.min_bridge_mode_,
273 return tie (a) == tie (b);
277 utils::Utf8String author_;
278 utils::Utf8String name_;
279 utils::Utf8String website_;
280 PluginCategory category_ = PluginCategory::None;
300 PluginArchitecture
arch_ = PluginArchitecture::ARCH_64_BIT;
319 bool has_custom_ui_{};
321 BOOST_DESCRIBE_CLASS (