1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
/*
* SPDX-FileCopyrightText: 2019 Aleix Pol Gonzalez <aleixpol@blue-systems.com>
*
* SPDX-License-Identifier: LGPL-2.0-or-later
*/
#include "../DiscoverVersion.h"
#include <KAboutData>
#include <KConfig>
#include <KConfigGroup>
#include <KCrash>
#include <KDBusService>
#include <KLocalizedString>
#include <KSharedConfig>
#include <QApplication>
#include <QCommandLineParser>
#include <QDBusConnection>
#include <QDBusConnectionInterface>
#include <QDBusMessage>
#include <QDebug>
#include <QMenu>
#include "NotifierItem.h"
using namespace std::chrono_literals;
using namespace Qt::StringLiterals;
int main(int argc, char **argv)
{
QApplication app(argc, argv);
app.setOrganizationDomain(QStringLiteral("kde.org"));
KCrash::setFlags(KCrash::AutoRestart);
std::chrono::seconds checkDelay = 0s;
bool hide = false;
KDBusService::StartupOptions startup = {};
{
KAboutData about(QStringLiteral("discover.notifier"),
i18n("Discover Notifier"),
version,
i18n("System update status notifier"),
KAboutLicense::GPL,
i18n("© 2010-2025 Plasma Development Team"));
about.addAuthor(QStringLiteral("Aleix Pol Gonzalez"), {}, QStringLiteral("aleixpol@kde.org"));
about.setProductName("discover/discover");
about.setProgramLogo(app.windowIcon());
about.setTranslator(i18nc("NAME OF TRANSLATORS", "Your names"), i18nc("EMAIL OF TRANSLATORS", "Your emails"));
KAboutData::setApplicationData(about);
KCrash::initialize();
QCommandLineParser parser;
QCommandLineOption replaceOption({QStringLiteral("replace")}, i18n("Replace an existing instance"));
parser.addOption(replaceOption);
QCommandLineOption checkDelayOption({QStringLiteral("check-delay")}, u"Delay checking for updates by N seconds"_s, u"seconds"_s, QStringLiteral("0"));
parser.addOption(checkDelayOption);
QCommandLineOption hideOption({QStringLiteral("hide")}, i18n("Do not show the notifier"), i18n("hidden"), QStringLiteral("false"));
parser.addOption(hideOption);
about.setupCommandLine(&parser);
parser.process(app);
about.processCommandLine(&parser);
if (parser.isSet(replaceOption)) {
startup |= KDBusService::Replace;
}
const auto config = KSharedConfig::openConfig();
KConfigGroup group(config, u"Behavior"_s);
if (parser.isSet(hideOption)) {
hide = parser.value(hideOption) == QLatin1String("true");
group.writeEntry<bool>("Hide", hide);
config->sync();
} else {
hide = group.readEntry<bool>("Hide", false);
}
if (parser.isSet(checkDelayOption)) {
checkDelay = std::chrono::seconds(parser.value(checkDelayOption).toInt());
}
}
KDBusService service(KDBusService::Unique | startup);
// Otherwise the QEventLoopLocker in KStatusNotifierItem quits the
// application when the status notifier is destroyed
app.setQuitLockEnabled(false);
NotifierItem notifier(checkDelay);
notifier.setStatusNotifierEnabled(!hide);
return app.exec();
}
|