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 : qAsConst(libraries))
115 library = library.right(library.length() - prefixLength);
116 library = library.left(library.length() - suffixLength);
122 LOG(VB_GENERAL, LOG_WARNING,
123 "No plugins directory " + filterDir.path());
135 int result =
m_dict[newname]->init(MYTH_BINARY_VERSION);
141 LOG(VB_GENERAL, LOG_ERR,
142 QString(
"Unable to initialize plugin '%1'.") .arg(plugname));
166 LOG(VB_GENERAL, LOG_ALERT,
167 QString(
"Unable to run plugin '%1': not initialized")
172 bool res =
m_dict[newname]->run() != 0;
184 LOG(VB_GENERAL, LOG_ALERT,
185 QString(
"Unable to configure plugin '%1': not initialized")
190 bool res =
m_dict[newname]->config() != 0;
201 LOG(VB_GENERAL, LOG_ALERT,
202 QString(
"Unable to destroy plugin '%1': not initialized")
207 m_dict[newname]->destroy();
223 for (
auto *it : qAsConst(
m_dict))
236 for (
auto *it : qAsConst(
m_dict))
237 ret << it->getName();