Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
plugin_manager.h
1// SPDX-FileCopyrightText: © 2018-2025 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#pragma once
5
6#include <filesystem>
7
8#include "gui/backend/backend/settings/plugin_configuration_manager.h"
9#include "gui/backend/plugin_collections.h"
10#include "plugins/plugin_descriptor.h"
11#include "plugins/plugin_descriptor_list.h"
12#include "plugins/plugin_scan_manager.h"
13
14namespace zrythm::gui::old_dsp::plugins
15{
16
21class PluginManager final : public QObject
22{
23 Q_OBJECT
24 QML_ELEMENT
25 Q_PROPERTY (
27 getPluginDescriptors CONSTANT FINAL)
28 Q_PROPERTY (
29 ::zrythm::plugins::PluginScanManager * scanner READ getScanner CONSTANT FINAL)
30 Q_PROPERTY (
31 QString currentlyScanningPlugin READ getCurrentlyScanningPlugin NOTIFY
32 currentlyScanningPluginChanged FINAL)
33public:
34 using Protocol = zrythm::plugins::Protocol;
35 using PluginConfiguration = zrythm::plugins::PluginConfiguration;
36
37 PluginManager (QObject * parent = nullptr);
38
39 QString getCurrentlyScanningPlugin () const
40 {
41 return scanner_->getCurrentlyScanningPlugin ();
42 }
43
44 ::zrythm::plugins::PluginScanManager * getScanner () const
45 {
46 return scanner_.get ();
47 }
48
50 getPluginDescriptors () const
51 {
52 return plugin_descriptors_.get ();
53 }
54
55 Q_INVOKABLE void beginScan ();
56
57 Q_INVOKABLE void
58 createPluginInstance (const zrythm::plugins::PluginDescriptor * descr) const;
59
64
65 static PluginManager * get_active_instance ();
66
70 std::unique_ptr<zrythm::plugins::PluginDescriptor>
72
76 std::unique_ptr<zrythm::plugins::PluginDescriptor> find_from_descriptor (
77 const zrythm::plugins::PluginDescriptor &src_descr) const;
78
82 static bool
84
88 std::unique_ptr<zrythm::plugins::PluginDescriptor> pick_instrument () const;
89
90 void clear_plugins ();
91
96 int get_num_new_plugins () const { return num_new_plugins_; }
97
98 Q_SIGNAL void scanFinished ();
99 Q_SIGNAL void currentlyScanningPluginChanged (const QString &plugin);
100
104 Q_SLOT void onScannerScanFinished ();
105
106private:
111 void add_category_and_author (
112 const utils::Utf8String &category,
113 const utils::Utf8String &author);
114
115 static fs::path get_known_plugins_xml_path ();
116 void serialize_known_plugins ();
117 void deserialize_known_plugins ();
118
119private:
121 std::vector<utils::Utf8String> plugin_categories_;
122
124 std::vector<utils::Utf8String> plugin_authors_;
125
126 std::shared_ptr<juce::AudioPluginFormatManager> format_manager_;
127
129 std::shared_ptr<juce::KnownPluginList> known_plugin_list_;
130
134 std::unique_ptr<zrythm::plugins::discovery::PluginDescriptorList>
135 plugin_descriptors_;
136
138 std::unique_ptr<PluginCollections> collections_;
139
140 std::unique_ptr<::zrythm::plugins::PluginScanManager> scanner_;
141
143 bool setup_ = false;
144
146 int num_new_plugins_ = 0;
147};
148
149} // namespace zrythm::gui::old_dsp::plugins
static bool supports_protocol(zrythm::plugins::Protocol::ProtocolType protocol)
Returns if the plugin manager supports the given plugin protocol.
int get_num_new_plugins() const
Returns the number of new plugins scanned this time (as opposed to known ones).
Q_SLOT void onScannerScanFinished()
Called by the scanner when it has finished scanning.
std::unique_ptr< zrythm::plugins::PluginDescriptor > find_plugin_from_uri(const utils::Utf8String &uri) const
Returns a PluginDescriptor for the given URI.
std::unique_ptr< zrythm::plugins::PluginDescriptor > pick_instrument() const
Returns an instrument plugin, if any.
std::unique_ptr< zrythm::plugins::PluginDescriptor > find_from_descriptor(const zrythm::plugins::PluginDescriptor &src_descr) const
Finds and returns a PluginDescriptor matching the given descriptor.
void add_descriptor(const zrythm::plugins::PluginDescriptor &descr)
Adds a new descriptor.
Configuration for instantiating a plugin descriptor.
The PluginDescriptor class provides a set of static utility functions and member functions to work wi...
Scans for plugins and manages the scanning process.
Lightweight UTF-8 string wrapper with safe conversions.
Definition string.h:39