|
- #pragma once
- #include <common.hpp>
-
- #include <jansson.h>
-
- #include <list>
-
-
- namespace rack {
- namespace plugin {
-
-
- struct Model;
-
-
- // Subclass this and return a pointer to a new one when init() is called
- struct Plugin {
- /** List of models contained in this plugin.
- Add with addModel().
- */
- std::list<Model*> models;
- /** The file path to the plugin's directory.
- */
- std::string path;
- /** OS-dependent library handle.
- */
- void* handle = NULL;
-
- /** Must be unique. Used for saving patches. Never change this after releasing your plugin.
- To guarantee uniqueness, it is a good idea to prefix the slug by your "company name" if available, e.g. "MyCompany-MyPlugin"
- */
- std::string slug;
- /** Your plugin's latest version.
- Do not include the "v" prefix.
- */
- std::string version;
- /** The license type of your plugin. Use "proprietary" if all rights are reserved. If your license is in the [SPDX license list](https://spdx.org/licenses/), use its abbreviation in the "Identifier" column.
- */
- std::string license;
- /** Human-readable display name for your plugin. You can change this on a whim, unlike slugs.
- */
- std::string name;
- /** Prefix of each module name in the Module Browser.
- If blank, `name` is used.
- */
- std::string brand;
- /** A one-line summary of the plugin's purpose.
- If your plugin doesn't follow a theme, it’s probably best to omit this.
- */
- std::string description;
- /** Your name, company, alias, or GitHub username.
- */
- std::string author;
- /** Your email address for support inquiries.
- */
- std::string authorEmail;
- /** Homepage of the author.
- */
- std::string authorUrl;
- /** Homepage featuring the plugin itself.
- */
- std::string pluginUrl;
- /** The manual of your plugin. HTML, PDF, or GitHub readme/wiki are fine.
- */
- std::string manualUrl;
- /** The source code homepage. E.g. GitHub repo.
- */
- std::string sourceUrl;
- /** Link to donation page for users who wish to donate. E.g. PayPal URL.
- */
- std::string donateUrl;
- /** Link to the changelog of the plugin.
- */
- std::string changelogUrl;
- /** Last modified timestamp of the plugin directory.
- */
- double modifiedTimestamp = -INFINITY;
-
- ~Plugin();
- void addModel(Model* model);
- Model* getModel(const std::string& slug);
- void fromJson(json_t* rootJ);
- void modulesFromJson(json_t* rootJ);
- std::string getBrand();
- };
-
-
- } // namespace plugin
- } // namespace rack
|