Plugin Class
Core types
The plugin API centers around two types:
Plugins::HostPlugins::Plugin
Host is the client-side bridge. Plugin is your implementation.
Plugins::Plugin
cpp
class Plugin {
public:
virtual ~Plugin() = default;
virtual PluginInfo info() const = 0;
virtual void onLoad() {}
virtual void onUnload() {}
};PluginInfo
PluginInfo is runtime metadata returned by info():
cpp
struct PluginInfo {
QString id;
QString name;
QString version;
QString author;
QString description;
QString website;
};Entry point
Every plugin must export TgdPluginEntry through TGD_PLUGIN_ENTRY.
cpp
TGD_PLUGIN_ENTRY {
if (apiVersion != Plugins::kApiVersion) {
return nullptr;
}
return new MyPlugin(host);
}Binary info
Astrogram also exports binary metadata through TgdPluginBinaryInfo, which is generated by TGD_PLUGIN_ENTRY.
This carries:
- API version
- pointer size
- Qt version
- compiler ID/version
- platform ID
Cleanup rules
Anything registered in onLoad() should be unregistered in onUnload():
cpp
void onUnload() override {
if (_commandId) _host->unregisterCommand(_commandId);
if (_actionId) _host->unregisterAction(_actionId);
if (_panelId) _host->unregisterPanel(_panelId);
if (_outgoingId) _host->unregisterOutgoingTextInterceptor(_outgoingId);
if (_observerId) _host->unregisterMessageObserver(_observerId);
if (_settingsPageId) _host->unregisterSettingsPage(_settingsPageId);
}Do not leave live callbacks behind after unload.
