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 : 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 auto &get_format_manager () const { return format_manager_; }
58
63
64 static PluginManager * get_active_instance ();
69 std::unique_ptr<zrythm::plugins::PluginDescriptor>
71
75 std::unique_ptr<zrythm::plugins::PluginDescriptor> find_from_descriptor (
76 const zrythm::plugins::PluginDescriptor &src_descr) const;
81 static bool
83
87 std::unique_ptr<zrythm::plugins::PluginDescriptor> pick_instrument () const;
88
89 void clear_plugins ();
95 int get_num_new_plugins () const { return num_new_plugins_; }
96
97 Q_SIGNAL void scanFinished ();
98 Q_SIGNAL void currentlyScanningPluginChanged (const QString &plugin);
99
103 Q_SLOT void onScannerScanFinished ();
104
105private:
110 void add_category_and_author (
111 const utils::Utf8String &category,
112 const utils::Utf8String &author);
113
114 static fs::path get_known_plugins_xml_path ();
115 void serialize_known_plugins ();
116 void deserialize_known_plugins ();
117
118private:
120 std::vector<utils::Utf8String> plugin_categories_;
121
123 std::vector<utils::Utf8String> plugin_authors_;
124
125 std::shared_ptr<juce::AudioPluginFormatManager> format_manager_;
126
128 std::shared_ptr<juce::KnownPluginList> known_plugin_list_;
129
133 std::unique_ptr<zrythm::plugins::discovery::PluginDescriptorList>
134 plugin_descriptors_;
135
137 std::unique_ptr<PluginCollections> collections_;
138
139 std::unique_ptr<::zrythm::plugins::PluginScanManager> scanner_;
140
142 bool setup_ = false;
143
145 int num_new_plugins_ = 0;
146};
147
148} // namespace zrythm::gui::old_dsp::plugins
The PluginManager is responsible for scanning and keeping track of available Plugin's.
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 utf8_string.h:38