File indexing completed on 2024-04-28 03:56:49

0001 /*
0002     SPDX-FileCopyrightText: 2023 Alexander Lohnau <alexander.lohnau@gmx.de>
0003     SPDX-License-Identifier: LGPL-2.0-or-later
0004 */
0005 #include "runnermanager.h"
0006 #include <QCommandLineParser>
0007 #include <QCoreApplication>
0008 #include <QTimer>
0009 
0010 #include <iostream>
0011 
0012 static void runQuery(const QString &runnerId, const QString &query, int iterations)
0013 {
0014     QEventLoop loop;
0015     KRunner::RunnerManager manager;
0016     manager.setAllowedRunners({runnerId});
0017     manager.launchQuery("test");
0018     qWarning() << "Following runners are loaded" << manager.runners();
0019     QObject::connect(&manager, &KRunner::RunnerManager::queryFinished, &loop, &QEventLoop::quit);
0020     for (int i = 0; i < iterations; ++i) {
0021         // Setup of match session is done for first query automatically
0022         for (int j = 1; j <= query.size(); ++j) {
0023             manager.launchQuery(query.mid(0, j));
0024             loop.exec();
0025         }
0026         manager.matchSessionComplete();
0027     }
0028 }
0029 
0030 int main(int argv, char **argc)
0031 {
0032     QCoreApplication app(argv, argc);
0033     QCommandLineOption iterationsOption("iterations", "Number of iterations where the query will be run", "iterations");
0034 
0035     QCommandLineParser parser;
0036     parser.addOption(iterationsOption);
0037     parser.addPositionalArgument("runner", "The runnerId you want to load");
0038     parser.addPositionalArgument("query", "The query to run, each letter is launched as it's own query");
0039     parser.process(app);
0040 
0041     const QStringList positionalArguments = parser.positionalArguments();
0042     if (positionalArguments.size() != 2) {
0043         qWarning() << "The runnerId and query must be specified as the only positional arguments";
0044         exit(1);
0045     }
0046     const QString runner = positionalArguments.at(0);
0047     const QString query = positionalArguments.at(1);
0048     int iterations = parser.isSet(iterationsOption) ? parser.value(iterationsOption).toInt() : 1;
0049     if (iterations < 1) {
0050         qWarning() << "invalid iterations value set, it must be more than 1" << iterations;
0051     }
0052 
0053     QTimer::singleShot(0, &app, [&app, runner, query, iterations]() {
0054         runQuery(runner, query, iterations);
0055         QTimer::singleShot(10, &app, &QCoreApplication::quit);
0056         std::cout << "Finished running queries" << std::endl;
0057     });
0058 
0059     return app.exec();
0060 }