diff --git a/libguh/devicemanager.cpp b/libguh/devicemanager.cpp index b8505b55..80faf586 100644 --- a/libguh/devicemanager.cpp +++ b/libguh/devicemanager.cpp @@ -226,6 +226,35 @@ DeviceManager::~DeviceManager() } } +QList DeviceManager::pluginNames() +{ + QStringList searchDirs; + searchDirs << QCoreApplication::applicationDirPath() + "/../lib/guh/plugins"; + searchDirs << QCoreApplication::applicationDirPath() + "/../plugins/"; + searchDirs << QCoreApplication::applicationDirPath() + "/../plugins/deviceplugins"; + searchDirs << QCoreApplication::applicationDirPath() + "/../../../plugins/deviceplugins"; + + QList pluginList; + foreach (const QString &path, searchDirs) { + QDir dir(path); + qCDebug(dcDeviceManager) << "Loading plugins from:" << dir.absolutePath(); + foreach (const QString &entry, dir.entryList()) { + QFileInfo fi; + if (entry.startsWith("libguh_deviceplugin") && entry.endsWith(".so")) { + fi.setFile(path + "/" + entry); + } else { + fi.setFile(path + "/" + entry + "/libguh_deviceplugin" + entry + ".so"); + } + if (!fi.exists()) { + continue; + } + QPluginLoader loader(fi.absoluteFilePath()); + pluginList.append(loader.metaData().value("MetaData").toObject()); + } + } + return pluginList; +} + /*! Returns all the \l{DevicePlugin}{DevicePlugins} loaded in the system. */ QList DeviceManager::plugins() const { diff --git a/libguh/devicemanager.h b/libguh/devicemanager.h index 079a465a..87f0a477 100644 --- a/libguh/devicemanager.h +++ b/libguh/devicemanager.h @@ -34,6 +34,7 @@ #include #include +#include class Device; class DevicePlugin; @@ -87,6 +88,8 @@ public: explicit DeviceManager(QObject *parent = 0); ~DeviceManager(); + static QList pluginNames(); + QList plugins() const; DevicePlugin* plugin(const PluginId &id) const; DeviceError setPluginConfig(const PluginId &pluginId, const ParamList &pluginConfig); diff --git a/libguh/loggingcategories.cpp b/libguh/loggingcategories.cpp index d5956fab..bc13496c 100644 --- a/libguh/loggingcategories.cpp +++ b/libguh/loggingcategories.cpp @@ -48,4 +48,4 @@ Q_LOGGING_CATEGORY(dcUdpCommander, "UdpCommander") Q_LOGGING_CATEGORY(dcWakeOnLan, "WakeOnLan") Q_LOGGING_CATEGORY(dcWemo, "Wemo") Q_LOGGING_CATEGORY(dcWifiDetector, "WifiDetector") -Q_LOGGING_CATEGORY(dcKodi, "Kodi") +//Q_LOGGING_CATEGORY(dcKodi, "Kodi") diff --git a/libguh/loggingcategories.h b/libguh/loggingcategories.h index 0b7e848c..bdb1b6de 100644 --- a/libguh/loggingcategories.h +++ b/libguh/loggingcategories.h @@ -53,7 +53,7 @@ Q_DECLARE_LOGGING_CATEGORY(dcUdpCommander) Q_DECLARE_LOGGING_CATEGORY(dcWakeOnLan) Q_DECLARE_LOGGING_CATEGORY(dcWemo) Q_DECLARE_LOGGING_CATEGORY(dcWifiDetector) -Q_DECLARE_LOGGING_CATEGORY(dcKodi) +//Q_DECLARE_LOGGING_CATEGORY(dcKodi) diff --git a/plugins/deviceplugins/kodi/devicepluginkodi.json b/plugins/deviceplugins/kodi/devicepluginkodi.json index 82fb5662..f5e87817 100644 --- a/plugins/deviceplugins/kodi/devicepluginkodi.json +++ b/plugins/deviceplugins/kodi/devicepluginkodi.json @@ -1,5 +1,6 @@ { "name": "Kodi", + "idName": "Kodi", "id": "e7186890-99fa-4c5b-8247-09c6d450d490", "vendors": [ { diff --git a/plugins/deviceplugins/kodi/jsonhandler.cpp b/plugins/deviceplugins/kodi/jsonhandler.cpp index f3a7270e..5263bb12 100644 --- a/plugins/deviceplugins/kodi/jsonhandler.cpp +++ b/plugins/deviceplugins/kodi/jsonhandler.cpp @@ -19,7 +19,7 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "jsonhandler.h" -#include "loggingcategories.h" +#include "extern-plugininfo.h" #include diff --git a/plugins/deviceplugins/kodi/kodiconnection.cpp b/plugins/deviceplugins/kodi/kodiconnection.cpp index 95adf2a2..fd33dba5 100644 --- a/plugins/deviceplugins/kodi/kodiconnection.cpp +++ b/plugins/deviceplugins/kodi/kodiconnection.cpp @@ -21,6 +21,7 @@ #include "kodiconnection.h" #include "loggingcategories.h" #include "jsonhandler.h" +#include "extern-plugininfo.h" #include diff --git a/plugins/generateplugininfo.py b/plugins/generateplugininfo.py index d92760ac..91df4691 100755 --- a/plugins/generateplugininfo.py +++ b/plugins/generateplugininfo.py @@ -6,6 +6,7 @@ import sys inputFile = open(sys.argv[1], "r") outputfile = open(sys.argv[2], "w") +outputfile2 = open("extern-" + sys.argv[2], "w") variableNames = [] try: @@ -20,6 +21,9 @@ except ValueError as e: def out(line): outputfile.write("%s\n" % line) +def out2(line): + outputfile2.write("%s\n" % line) + def extractVendors(pluginMap): for vendor in pluginMap['vendors']: try: @@ -117,12 +121,37 @@ out(" */") out("#ifndef PLUGININFO_H") out("#define PLUGININFO_H") out("#include \"typeutils.h\"") +out("#include ") + out("") out("PluginId pluginId = PluginId(\"%s\");" % pluginMap['id']) extractVendors(pluginMap) +out("") + +if 'idName' in pluginMap: + out("Q_DECLARE_LOGGING_CATEGORY(dc%s)" % pluginMap['idName']) + out("Q_LOGGING_CATEGORY(dc%s, \"dc%s\")" % (pluginMap['idName'], pluginMap['idName'])) out("") out("#endif") + +out2("/* This file is generated by the guh build system. Any changes to this file will") +out2(" * be lost.") +out2(" *") +out2(" * If you want to change this file, edit the plugin's json file and add") +out2(" * idName tags where appropriate.") +out2(" */") +out2("#ifndef PLUGININFO_H") +out2("#define PLUGININFO_H") +out2("#include \"typeutils.h\"") +out2("#include ") +out2("") +if 'idName' in pluginMap: + out2("Q_DECLARE_LOGGING_CATEGORY(dc%s)" % pluginMap['idName']) +out2("") +out2("#endif") + + print " --> finished writing \"%s\"" % (sys.argv[2]) diff --git a/server/main.cpp b/server/main.cpp index 953b325d..b078e537 100644 --- a/server/main.cpp +++ b/server/main.cpp @@ -62,27 +62,9 @@ int main(int argc, char *argv[]) s_loggingFilters.insert("Hardware", false); s_loggingFilters.insert("LogEngine", false); - // plugins - #ifdef boblight - s_loggingFilters.insert("Boblight", false); - #endif - s_loggingFilters.insert("CommandLauncher", false); - s_loggingFilters.insert("RF433", false); - s_loggingFilters.insert("DateTime", false); - s_loggingFilters.insert("EQ-3", false); - s_loggingFilters.insert("LgSmartTv", false); - s_loggingFilters.insert("Lircd", false); - s_loggingFilters.insert("MailNotification", false); - s_loggingFilters.insert("Mock", false); - s_loggingFilters.insert("Openweahtermap", false); - s_loggingFilters.insert("PhilipsHue", false); - s_loggingFilters.insert("Tune", false); - s_loggingFilters.insert("UdpCommander", false); - s_loggingFilters.insert("WakeOnLan", false); - s_loggingFilters.insert("Wemo", false); - s_loggingFilters.insert("WifiDetector", false); - s_loggingFilters.insert("Kodi", false); - + foreach (const QJsonObject &object, DeviceManager::pluginNames()) { + s_loggingFilters.insert("dc" + object.value("idName").toString(), false); + } QCommandLineParser parser; parser.addHelpOption();