18#include "mythversion.h"
23 using PluginInitFunc = int (*)(
const char *);
24 auto ifunc = (PluginInitFunc)QLibrary::resolve(
"mythplugin_init");
26 return ifunc(libversion);
29 if (error_msg.isEmpty())
31 QByteArray libname = QLibrary::fileName().toLatin1();
36 LOG(VB_GENERAL, LOG_EMERG, QString(
"MythPlugin::init() dlerror: %1")
44 using PluginRunFunc = int (*)();
47 auto rfunc = (PluginRunFunc)QLibrary::resolve(
"mythplugin_run");
57 using PluginConfigFunc = int (*)();
60 auto rfunc = (PluginConfigFunc)QLibrary::resolve(
"mythplugin_config");
74 auto rfunc = (PluginTypeFunc)QLibrary::resolve(
"mythplugin_type");
84 using PluginDestFunc = void (*)();
85 PluginDestFunc rfunc = QLibrary::resolve(
"mythplugin_destroy");
95 QDir filterDir(pluginprefix);
97 filterDir.setFilter(QDir::Files | QDir::Readable);
99 filterDir.setNameFilters(QStringList(filter));
101 if (filterDir.exists())
103 int prefixLength = filter.indexOf(
"*");
104 int suffixLength = filter.length() - prefixLength - 1;
106 QStringList libraries = filterDir.entryList();
107 if (libraries.isEmpty())
108 LOG(VB_GENERAL, LOG_WARNING,
109 "No libraries in plugins directory " + filterDir.path());
112 for (
auto library : std::as_const(libraries))
115 library = library.right(library.length() - prefixLength);
116 library = library.left(library.length() - suffixLength);
123 LOG(VB_GENERAL, LOG_WARNING,
124 "No plugins directory " + filterDir.path());
137 int result =
m_dict[newname]->init(MYTH_BINARY_VERSION);
143 LOG(VB_GENERAL, LOG_ERR,
144 QString(
"Unable to initialize plugin '%1'.") .arg(plugname));
168 LOG(VB_GENERAL, LOG_ALERT,
169 QString(
"Unable to run plugin '%1': not initialized")
174 bool res =
m_dict[newname]->run() != 0;
186 LOG(VB_GENERAL, LOG_ALERT,
187 QString(
"Unable to configure plugin '%1': not initialized")
192 bool res =
m_dict[newname]->config() != 0;
203 LOG(VB_GENERAL, LOG_ALERT,
204 QString(
"Unable to destroy plugin '%1': not initialized")
209 m_dict[newname]->destroy();
225 for (
auto *it : std::as_const(
m_dict))
238 for (
auto *it : std::as_const(
m_dict))
239 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_)