diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,6 +50,9 @@ option(BUILD_QCH "Build API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)" OFF) add_feature_info(QCH ${BUILD_QCH} "API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)") +option(BUILD_EXPERIMENTAL "Build experimental features" OFF) +add_feature_info(EXP ${BUILD_EXPERIMENTAL} "Build experimental features") + # set up build dependencies find_package(Qt5 ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE COMPONENTS Core DBus Widgets Qml Quick Test) diff --git a/src/engine/CMakeLists.txt b/src/engine/CMakeLists.txt --- a/src/engine/CMakeLists.txt +++ b/src/engine/CMakeLists.txt @@ -19,14 +19,17 @@ queryparser.cpp termgenerator.cpp transaction.cpp - databasesanitizer.cpp vectorpostingiterator.cpp vectorpositioninfoiterator.cpp writetransaction.cpp global.cpp fsutils.cpp ) +if(${BUILD_EXPERIMENTAL}) + set(BALOO_ENGINE_SRCS ${BALOO_ENGINE_SRCS} experimental/databasesanitizer.cpp) +endif() + add_library(KF5BalooEngine ${BALOO_ENGINE_SRCS}) add_library(KF5::BalooEngine ALIAS KF5BalooEngine) diff --git a/src/engine/databasesanitizer.h b/src/engine/experimental/databasesanitizer.h rename from src/engine/databasesanitizer.h rename to src/engine/experimental/databasesanitizer.h diff --git a/src/engine/databasesanitizer.cpp b/src/engine/experimental/databasesanitizer.cpp rename from src/engine/databasesanitizer.cpp rename to src/engine/experimental/databasesanitizer.cpp diff --git a/src/tools/CMakeLists.txt b/src/tools/CMakeLists.txt --- a/src/tools/CMakeLists.txt +++ b/src/tools/CMakeLists.txt @@ -1,4 +1,6 @@ add_subdirectory(baloosearch) add_subdirectory(balooshow) add_subdirectory(balooctl) -add_subdirectory(baloodb) +if(${BUILD_EXPERIMENTAL}) + add_subdirectory(experimental/baloodb) +endif() diff --git a/src/tools/baloodb/CMakeLists.txt b/src/tools/experimental/baloodb/CMakeLists.txt rename from src/tools/baloodb/CMakeLists.txt rename to src/tools/experimental/baloodb/CMakeLists.txt diff --git a/src/tools/baloodb/Messages.sh b/src/tools/experimental/baloodb/Messages.sh rename from src/tools/baloodb/Messages.sh rename to src/tools/experimental/baloodb/Messages.sh diff --git a/src/tools/baloodb/main.cpp b/src/tools/experimental/baloodb/main.cpp rename from src/tools/baloodb/main.cpp rename to src/tools/experimental/baloodb/main.cpp --- a/src/tools/baloodb/main.cpp +++ b/src/tools/experimental/baloodb/main.cpp @@ -20,7 +20,7 @@ */ #include "global.h" -#include "databasesanitizer.h" +#include "experimental/databasesanitizer.h" #include #include @@ -59,14 +59,14 @@ "\nOnly applies to \"%1\" command", QStringLiteral("prune")) }, QCommandLineOption{ - QStringList{QStringLiteral("m"), QStringLiteral("missing-only")}, + QStringList{QStringLiteral("m"), QStringLiteral("missing-only")}, i18n("List only inaccessible entries.\nOnly applies to \"%1\"", QStringLiteral("list")) } }; const auto commands = std::vector{ Command{ - QStringLiteral("list"), + QStringLiteral("list"), i18n("List database contents. Use a regular expression as argument to filter output"), QStringList{ QStringLiteral("pattern") @@ -78,16 +78,16 @@ }, /*TODO: Command{ - QStringLiteral("check"), + QStringLiteral("check"), i18n("Check database contents. " "Beware this may take very long to execute"), QStringList{}, QStringList{} }, */ /*TODO: Command{ - QStringLiteral("prune"), + QStringLiteral("prune"), i18n("Remove stale database entries"), QStringList{ QStringLiteral("pattern") @@ -99,7 +99,7 @@ }, */ Command{ - QStringLiteral("devices"), + QStringLiteral("devices"), i18n("List devices"), QStringList{}, QStringList{QStringLiteral("missing-only")} @@ -114,24 +114,24 @@ } return names; } -const QStringList getOptions(const QString& name) +const QStringList getOptions(const QString& name) { for (const auto& c : commands) { if (c.name == name) { return c.options; } } return QStringList(); } -QString createDescription() +QString createDescription() { QStringList allowedcommands; for (const auto& c: commands) { auto options = getOptions(c.name); const QString optionStr = options.isEmpty() ? QString() : QStringLiteral(" [--%1]").arg(options.join(QLatin1Literal("] [--"))); - + QString argumentStr; if (!c.args.isEmpty() ) { argumentStr = QStringLiteral(" [%1]").arg(c.args.join(QStringLiteral("] ["))); @@ -141,11 +141,11 @@ .arg(c.name) .arg(optionStr) .arg(argumentStr); - + const QString str = QStringLiteral("%1 %2") .arg(commandStr, -48) .arg(c.description); - + allowedcommands.append(str); } const QString allCommandsStr = allowedcommands.join(QStringLiteral("\n ")); @@ -163,22 +163,22 @@ i18n("(c) 2018, Michael Heidelbach")); aboutData.addAuthor(i18n("Michael Heidelbach"), i18n("Maintainer"), QStringLiteral("ottwolt@gmail.com")); KAboutData::setApplicationData(aboutData); - + QCommandLineParser parser; parser.addOptions(options); - parser.addPositionalArgument(QStringLiteral("command"), - i18n("The command to execute"), + parser.addPositionalArgument(QStringLiteral("command"), + i18n("The command to execute"), allowedCommands().join(QStringLiteral("|")) ); - parser.addPositionalArgument(QStringLiteral("pattern"), + parser.addPositionalArgument(QStringLiteral("pattern"), i18nc("Command", "A regular expression applied to the URL of database items" "\nExample: %1" , "baloodb list '^/media/videos/series'" ) ); const QString warnExperiment = QStringLiteral( - "===\nPlease note: This is an experimental tool. Command line switches or their meaning may change.\n==="); - + "===\nPlease note: This is an experimental tool. Command line switches or their meaning may change.\n==="); + parser.setApplicationDescription(warnExperiment + createDescription()); parser.addVersionOption(); parser.addHelpOption(); @@ -188,29 +188,29 @@ qDebug() << "No command"; parser.showHelp(1); } - + auto args = parser.positionalArguments(); auto command = args.at(0); args.removeFirst(); - + if(!allowedCommands().contains(command)) { qDebug() << "Unknown command" << command; parser.showHelp(1); } - + const auto optNames = parser.optionNames(); const auto allowedOptions = getOptions(command); - + QVector deviceIds; for (const auto& dev : parser.values(QStringLiteral("device-id"))) { deviceIds.append(dev.toInt()); } const bool missingOnly = parser.isSet(QStringLiteral("missing-only")); const QString pattern = args.isEmpty() ? QString() : args.at(0); - const QSharedPointer urlFilter(pattern.isEmpty() - ? nullptr + const QSharedPointer urlFilter(pattern.isEmpty() + ? nullptr : new QRegularExpression{pattern}); auto db = globalDatabaseInstance(); @@ -234,11 +234,11 @@ DatabaseSanitizer san(db, Transaction::ReadOnly); err << i18n("Listing database contents...") << endl; san.printDevices(deviceIds); - + } else if (command == QStringLiteral("clean")) { /* TODO: add prune command */ parser.showHelp(1); - + } else if (command == QStringLiteral("check")) { parser.showHelp(1); /* TODO: After check methods are improved