File indexing completed on 2024-11-10 04:40:25

0001 /*
0002     SPDX-FileCopyrightText: 2010 Bertjan Broeksema <broeksema@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "agentpluginloader.h"
0008 #include "akonadiagentserver_debug.h"
0009 
0010 #include <QApplication>
0011 #include <QPluginLoader>
0012 
0013 int main(int argc, char *argv[])
0014 {
0015     QApplication app(argc, argv);
0016     app.setQuitOnLastWindowClosed(false);
0017 
0018     if (app.arguments().size() != 3) { // Expected usage: ./agent_launcher ${plugin_name} ${identifier}
0019         qCDebug(AKONADIAGENTSERVER_LOG) << "Invalid usage: expected: ./agent_launcher pluginName agentIdentifier";
0020         return 1;
0021     }
0022 
0023     const QString agentPluginName = app.arguments().at(1);
0024     const QString agentIdentifier = app.arguments().at(2);
0025 
0026     AgentPluginLoader loader;
0027     QPluginLoader *factory = loader.load(agentPluginName);
0028     if (!factory) {
0029         return 1;
0030     }
0031 
0032     QObject *instance = nullptr;
0033     // clang-format off
0034     const bool invokeSucceeded = QMetaObject::invokeMethod(factory->instance(),
0035                                                            "createInstance",
0036                                                            Qt::DirectConnection,
0037                                                            Q_RETURN_ARG(QObject *, instance),
0038                                                            Q_ARG(QString, agentIdentifier));
0039     // clang-format on
0040     if (invokeSucceeded) {
0041         qCDebug(AKONADIAGENTSERVER_LOG) << "Agent instance created in separate process.";
0042     } else {
0043         qCDebug(AKONADIAGENTSERVER_LOG) << "Agent instance creation in separate process failed";
0044         return 2;
0045     }
0046 
0047     const int rv = app.exec();
0048     delete instance;
0049     return rv;
0050 }