diff --git a/src/desktopimporter.cpp b/src/desktopimporter.cpp index 30200c6..0e65f7d 100644 --- a/src/desktopimporter.cpp +++ b/src/desktopimporter.cpp @@ -40,7 +40,13 @@ QStringList DesktopImporter::getDesktopFilePaths() const // Add common system locations appDirs << QStringLiteral("/usr/share/applications"); appDirs << QStringLiteral("/usr/local/share/applications"); - appDirs << expandPath(QStringLiteral("~/.local/share/applications")); + + const QString xdgDataHome = qEnvironmentVariable("XDG_DATA_HOME"); + if (!xdgDataHome.isEmpty()) { + appDirs << QDir(xdgDataHome).absoluteFilePath(QStringLiteral("applications")); + } else { + appDirs << expandPath(QStringLiteral("~/.local/share/applications")); + } // Flatpak export directories appDirs << expandPath(QStringLiteral("~/.local/share/flatpak/exports/share/applications")); diff --git a/src/main.cpp b/src/main.cpp index 53e7e25..e88ad48 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,6 +8,8 @@ #include #include #include +#include +#include #include #include @@ -16,6 +18,7 @@ #include #include "alakarte-version.h" +#include "app.h" int main(int argc, char *argv[]) { @@ -47,15 +50,54 @@ int main(int argc, char *argv[]) QCommandLineParser parser; aboutData.setupCommandLine(&parser); + + QCommandLineOption importAllAndExitOption(QStringLiteral("import-all-and-exit"), i18n("Import all enabled sources and exit")); + QCommandLineOption importDesktopAndExitOption(QStringLiteral("import-desktop-and-exit"), i18n("Import desktop entries and exit")); + QCommandLineOption startupAndExitOption(QStringLiteral("startup-and-exit"), i18n("Start without UI and exit after startup auto-import (if enabled)")); + parser.addOption(importAllAndExitOption); + parser.addOption(importDesktopAndExitOption); + parser.addOption(startupAndExitOption); + parser.process(app); aboutData.processCommandLine(&parser); - KDBusService service(KDBusService::Unique); - if (qEnvironmentVariableIsEmpty("QT_QUICK_CONTROLS_STYLE")) { QQuickStyle::setStyle(QStringLiteral("org.kde.desktop")); } + if (parser.isSet(importAllAndExitOption) || parser.isSet(importDesktopAndExitOption) || parser.isSet(startupAndExitOption)) { + App *alakarteApp = App::instance(); + + QObject::connect(alakarteApp, &App::importCompleted, &app, [&app](int count) { + QTextStream(stdout) << count << Qt::endl; + app.exit(0); + }); + QObject::connect(alakarteApp, &App::importError, &app, [&app](const QString &error) { + QTextStream(stderr) << error << Qt::endl; + app.exit(1); + }); + + if (parser.isSet(importAllAndExitOption)) { + alakarteApp->importAllGames(); + } else if (parser.isSet(importDesktopAndExitOption)) { + alakarteApp->importFromDesktop(); + } else { + if (!alakarteApp->config() || !alakarteApp->config()->autoImportOnStartup()) { + QTextStream(stdout) << 0 << Qt::endl; + return 0; + } + + QTimer::singleShot(60000, &app, [&app]() { + QTextStream(stderr) << QStringLiteral("Timed out waiting for auto-import") << Qt::endl; + app.exit(2); + }); + } + + return app.exec(); + } + + KDBusService service(KDBusService::Unique); + QQmlApplicationEngine engine; engine.rootContext()->setContextObject(new KLocalizedContext(&engine));