2#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
3#include <QtSystemDetection>
23#include "mythversion.h"
28 using PluginInitFunc = int (*)(
const char *);
29 auto ifunc = (PluginInitFunc)QLibrary::resolve(
"mythplugin_init");
31 return ifunc(libversion);
34 if (error_msg.isEmpty())
36 QByteArray libname = QLibrary::fileName().toLatin1();
41 LOG(VB_GENERAL, LOG_EMERG, QString(
"MythPlugin::init() dlerror: %1")
49 using PluginRunFunc = int (*)();
52 auto rfunc = (PluginRunFunc)QLibrary::resolve(
"mythplugin_run");
62 using PluginConfigFunc = int (*)();
65 auto rfunc = (PluginConfigFunc)QLibrary::resolve(
"mythplugin_config");
79 auto rfunc = (PluginTypeFunc)QLibrary::resolve(
"mythplugin_type");
89 using PluginDestFunc = void (*)();
90 PluginDestFunc rfunc = QLibrary::resolve(
"mythplugin_destroy");
100 QDir filterDir(pluginprefix);
102 filterDir.setFilter(QDir::Files | QDir::Readable);
104 filterDir.setNameFilters(QStringList(filter));
106 if (filterDir.exists())
108 int prefixLength = filter.indexOf(
"*");
109 int suffixLength = filter.length() - prefixLength - 1;
111 QStringList libraries = filterDir.entryList();
112 if (libraries.isEmpty())
113 LOG(VB_GENERAL, LOG_WARNING,
114 "No libraries in plugins directory " + filterDir.path());
117 for (
auto library : std::as_const(libraries))
120 library = library.right(library.length() - prefixLength);
121 library = library.left(library.length() - suffixLength);
128 LOG(VB_GENERAL, LOG_WARNING,
129 "No plugins directory " + filterDir.path());
142 int result =
m_dict[newname]->init(MYTH_BINARY_VERSION);
148 LOG(VB_GENERAL, LOG_ERR,
149 QString(
"Unable to initialize plugin '%1'.") .arg(plugname));
173 LOG(VB_GENERAL, LOG_ALERT,
174 QString(
"Unable to run plugin '%1': not initialized")
179 bool res =
m_dict[newname]->run() != 0;
191 LOG(VB_GENERAL, LOG_ALERT,
192 QString(
"Unable to configure plugin '%1': not initialized")
197 bool res =
m_dict[newname]->config() != 0;
208 LOG(VB_GENERAL, LOG_ALERT,
209 QString(
"Unable to destroy plugin '%1': not initialized")
214 m_dict[newname]->destroy();
230 for (
auto *it : std::as_const(
m_dict))
243 for (
auto *it : std::as_const(
m_dict))
244 ret << it->getName();
void ClearSettingsCache(const QString &myKey=QString(""))
bool init_plugin(const QString &plugname)
bool config_plugin(const QString &plugname)
QMap< QString, MythPlugin * > m_moduleMap
bool destroy_plugin(const QString &plugname)
MythPlugin * GetPlugin(const QString &plugname)
bool run_plugin(const QString &plugname)
QStringList EnumeratePlugins(void)
QHash< QString, MythPlugin * > m_dict
int init(const char *libversion)
MythPluginType type(void)
static void load(const QString &module_name)
Load a QTranslator for the user's preferred language.
const char * dlerror(void)
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
QString GetPluginsNameFilter(void)
QString FindPluginName(const QString &plugname)
QString GetPluginsDir(void)
#define LOG(_MASK_, _LEVEL_, _QSTRING_)