Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
plugin_configuration_manager.h
1// SPDX-FileCopyrightText: © 2021-2022, 2024-2025 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#pragma once
5
6#include "zrythm-config.h"
7
8#include <memory>
9
10#include "plugins/plugin_configuration.h"
11
12#include <boost/describe.hpp>
13
14namespace zrythm::gui::old_dsp::plugins
15{
16class Plugin;
17}
18
19using namespace zrythm;
20
26
28{
29public:
30 using PluginConfiguration = zrythm::plugins::PluginConfiguration;
31
40 std::unique_ptr<PluginConfiguration>
42
47 static std::unique_ptr<PluginConfigurationManager> read_or_new ();
48
55
61 {
62 try
63 {
65 }
66 catch (const ZrythmException &e)
67 {
68 z_warning (e.what ());
69 }
70 }
71
72 int get_format_major_version () const { return 7; }
73 int get_format_minor_version () const { return 0; }
74 std::string get_document_type () const
75 {
76 return "PluginConfigurationCollection";
77 }
78
84 PluginConfiguration * find (const zrythm::plugins::PluginDescriptor &descr);
85
93 void set (const PluginConfiguration &setting, bool serialize);
94
99 const plugins::PluginDescriptor &descr);
100
113 const PluginConfiguration &config,
114 bool autoroute_multiout,
115 bool has_stereo_outputs);
116
121 void activate_plugin_configuration_async (const PluginConfiguration &config);
122
123private:
124 static constexpr auto kSettingsKey = "settings"sv;
125 friend void to_json (nlohmann::json &j, const PluginConfigurationManager &p)
126 {
127 j[kSettingsKey] = p.settings_;
128 }
129 friend void from_json (const nlohmann::json &j, PluginConfigurationManager &p)
130 {
131 j.at (kSettingsKey).get_to (p.settings_);
132 }
133
134 static fs::path get_file_path ();
135
141 static void delete_file ();
142
143private:
145 std::vector<std::unique_ptr<PluginConfiguration>> settings_;
146
148 using NumInstantiations = int;
149
152 using LastInstantiatedTimeAsMSecsSinceEpoch = std::int64_t;
153
158 std::unordered_map<
159 plugins::PluginDescriptor,
160 std::pair<NumInstantiations, LastInstantiatedTimeAsMSecsSinceEpoch>>
161 instantiations_;
162};
163
void serialize_to_file_no_throw()
Wrapper over serialize_to_file that ignores exceptions.
static std::unique_ptr< PluginConfigurationManager > read_or_new()
Reads the file and fills up the object, or creates an empty object if the file could not be read.
PluginConfiguration * find(const zrythm::plugins::PluginDescriptor &descr)
Finds a setting for the given plugin descriptor.
std::unique_ptr< PluginConfiguration > create_configuration_for_descriptor(const plugins::PluginDescriptor &descr)
Creates a configuration for the given descriptor based on an existing configuration if it exists,...
void increment_num_instantiations_for_plugin(const plugins::PluginDescriptor &descr)
void set(const PluginConfiguration &setting, bool serialize)
Replaces a setting or appends a setting to the cache.
void activate_plugin_configuration(const PluginConfiguration &config, bool autoroute_multiout, bool has_stereo_outputs)
Creates necessary tracks at the end of the tracklist.
void activate_plugin_configuration_async(const PluginConfiguration &config)
Asks the user a few things via dialogs then calls activate_plugin_configuration().
void serialize_to_file()
Serializes the current settings.
Configuration for instantiating a plugin descriptor.
The PluginDescriptor class provides a set of static utility functions and member functions to work wi...
Base class for exceptions in Zrythm.
Definition exceptions.h:20