114 Q_PROPERTY (QString name READ getName CONSTANT FINAL)
115 Q_PROPERTY (QString format READ getFormat CONSTANT FINAL)
118 static std::unique_ptr<PluginDescriptor>
119 from_juce_description (
const juce::PluginDescription &juce_desc);
121 std::unique_ptr<juce::PluginDescription> to_juce_description ()
const;
126 bool is_instrument ()
const;
127 bool is_effect ()
const;
128 bool is_modulator ()
const;
129 bool is_midi_modifier ()
const;
154 [[nodiscard]] QString getName ()
const {
return name_.to_qstring (); }
155 QString getFormat ()
const;
162 static constexpr auto kAuthorKey =
"author"sv;
163 static constexpr auto kNameKey =
"name"sv;
164 static constexpr auto kWebsiteKey =
"website"sv;
165 static constexpr auto kCategoryKey =
"category"sv;
166 static constexpr auto kCategoryStringKey =
"categoryString"sv;
167 static constexpr auto kNumAudioInsKey =
"numAudioIns"sv;
168 static constexpr auto kNumAudioOutsKey =
"numAudioOuts"sv;
169 static constexpr auto kNumMidiInsKey =
"numMidiIns"sv;
170 static constexpr auto kNumMidiOutsKey =
"numMidiOuts"sv;
171 static constexpr auto kNumCtrlInsKey =
"numCtrlIns"sv;
172 static constexpr auto kNumCtrlOutsKey =
"numCtrlOuts"sv;
173 static constexpr auto kNumCvInsKey =
"numCvIns"sv;
174 static constexpr auto kNumCvOutsKey =
"numCvOuts"sv;
175 static constexpr auto kUniqueIdKey =
"uniqueId"sv;
176 static constexpr auto kDeprecatedUniqueIdKey =
"deprecatedUniqueId"sv;
177 static constexpr auto kArchitectureKey =
"architecture"sv;
178 static constexpr auto kProtocolKey =
"protocol"sv;
179 static constexpr auto kPathOrIdKey =
"pathOrId"sv;
180 static constexpr auto kMinBridgeModeKey =
"minBridgeMode"sv;
181 static constexpr auto kHasCustomUIKey =
"hasCustomUI"sv;
185 { kAuthorKey, p.author_ },
186 { kNameKey, p.name_ },
187 { kWebsiteKey, p.website_ },
188 { kCategoryKey, p.category_ },
200 { kArchitectureKey, p.
arch_ },
204 { kHasCustomUIKey, p.has_custom_ui_ },
207 friend void from_json (
const nlohmann::json &j, PluginDescriptor &p)
209 j.at (kAuthorKey).get_to (p.author_);
210 j.at (kNameKey).get_to (p.name_);
211 j.at (kWebsiteKey).get_to (p.website_);
212 j.at (kCategoryKey).get_to (p.category_);
213 j.at (kCategoryStringKey).get_to (p.category_str_);
214 j.at (kNumAudioInsKey).get_to (p.num_audio_ins_);
215 j.at (kNumAudioOutsKey).get_to (p.num_audio_outs_);
216 j.at (kNumMidiInsKey).get_to (p.num_midi_ins_);
217 j.at (kNumMidiOutsKey).get_to (p.num_midi_outs_);
218 j.at (kNumCtrlInsKey).get_to (p.num_ctrl_ins_);
219 j.at (kNumCtrlOutsKey).get_to (p.num_ctrl_outs_);
220 j.at (kNumCvInsKey).get_to (p.num_cv_ins_);
221 j.at (kNumCvOutsKey).get_to (p.num_cv_outs_);
222 j.at (kUniqueIdKey).get_to (p.unique_id_);
223 j.at (kArchitectureKey).get_to (p.arch_);
224 j.at (kProtocolKey).get_to (p.protocol_);
226 const auto val = j.at (kPathOrIdKey);
227 if (val[zrythm::utils::serialization::kVariantIndexKey] == 0)
230 val[zrythm::utils::serialization::kVariantValueKey].get<fs::path> ();
235 val[zrythm::utils::serialization::kVariantValueKey]
236 .get<utils::Utf8String> ();
239 j.at (kMinBridgeModeKey).get_to (p.min_bridge_mode_);
240 j.at (kHasCustomUIKey).get_to (p.has_custom_ui_);
243 friend bool operator== (
const PluginDescriptor &a,
const PluginDescriptor &b)
245 constexpr auto tie = [] (
const auto &p) {
247 p.arch_, p.protocol_, p.path_or_id_, p.unique_id_,
248 p.juce_compat_deprecated_unique_id_, p.min_bridge_mode_,
251 return tie (a) == tie (b);
255 utils::Utf8String author_;
256 utils::Utf8String name_;
257 utils::Utf8String website_;
258 PluginCategory category_ = PluginCategory::None;
278 PluginArchitecture
arch_ = PluginArchitecture::ARCH_64_BIT;
297 bool has_custom_ui_{};
299 BOOST_DESCRIBE_CLASS (