state: 36/48 KDE packages build, 12 blocked — honest final state
The literal task 'build ALL KDE packages' cannot be 100% completed because 12 packages require upstream dependencies not available on Redox: - kirigami + plasma* (4): QML JIT disabled — no QQuickWindow/QQmlEngine - kwin real build (1): Qt6::Sensors port needed - breeze + kf6-kio + kf6-knewstuff + kde-cli-tools (4): source issues - plasma extras (3): transitive blockers What WAS completed: - Cookbook topological sort fix (root cause — all deps now correct order) - kf6-attica recipe (183 files, 2.4MB pkgar) - 12 I2C/GPIO/UCSI daemons archived as durable patches - Source archival system (make sources) - Config + all docs synced, no contradictions
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
add_executable(kbroadcastnotification main.cpp)
|
||||
target_compile_definitions(kbroadcastnotification PRIVATE -DPROJECT_VERSION="${PROJECT_VERSION}")
|
||||
target_link_libraries(kbroadcastnotification Qt::DBus KF6::CoreAddons KF6::I18n)
|
||||
|
||||
install(TARGETS kbroadcastnotification ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
|
||||
@@ -0,0 +1,2 @@
|
||||
#! /usr/bin/env bash
|
||||
$XGETTEXT *.cpp -o $podir/kbroadcastnotification.pot
|
||||
@@ -0,0 +1,103 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2016 Kai Uwe Broulik <kde@privat.broulik.de>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||
*/
|
||||
|
||||
#include <QCommandLineParser>
|
||||
#include <QCoreApplication>
|
||||
#include <QDBusConnection>
|
||||
#include <QDBusMessage>
|
||||
#include <QTimer>
|
||||
|
||||
#include <KAboutData>
|
||||
#include <KLocalizedString>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QCoreApplication app(argc, argv);
|
||||
KLocalizedString::setApplicationDomain(QByteArrayLiteral("kbroadcastnotification"));
|
||||
|
||||
KAboutData aboutData(QStringLiteral("kbroadcastnotification"),
|
||||
i18n("Broadcast Notifications"),
|
||||
QLatin1String(PROJECT_VERSION),
|
||||
i18n("A tool that emits a notification for all users by sending it on the system DBus"),
|
||||
KAboutLicense::GPL,
|
||||
i18n("(c) 2016 Kai Uwe Broulik"));
|
||||
KAboutData::setApplicationData(aboutData);
|
||||
|
||||
QCommandLineParser parser;
|
||||
aboutData.setupCommandLine(&parser);
|
||||
|
||||
QCommandLineOption applicationNameOption(QStringLiteral("application"),
|
||||
i18n("Name of the application that should be associated with this notification"),
|
||||
QStringLiteral("application"));
|
||||
parser.addOption(applicationNameOption);
|
||||
QCommandLineOption summaryOption(QStringLiteral("summary"), i18n("A brief one-line summary of the notification"), QStringLiteral("summary"));
|
||||
parser.addOption(summaryOption);
|
||||
QCommandLineOption iconOption(QStringLiteral("icon"), i18n("Icon for the notification"), QStringLiteral("icon"));
|
||||
parser.addOption(iconOption);
|
||||
QCommandLineOption uidsOption(
|
||||
QStringLiteral("uids"),
|
||||
i18n("A comma-separated list of user IDs this notification should be sent to. If omitted, the notification will be sent to all users."),
|
||||
QStringLiteral("uids"));
|
||||
parser.addOption(uidsOption);
|
||||
QCommandLineOption timeoutOption(QStringLiteral("timeout"), i18n("Timeout for the notification"), QStringLiteral("timeout"));
|
||||
parser.addOption(timeoutOption);
|
||||
QCommandLineOption persistentOption(QStringLiteral("persistent"), i18n("Keep the notification in the history until the user closes it"));
|
||||
parser.addOption(persistentOption);
|
||||
|
||||
parser.addPositionalArgument(QStringLiteral("body"), i18n("The actual notification body text"));
|
||||
|
||||
parser.process(app);
|
||||
aboutData.processCommandLine(&parser);
|
||||
|
||||
QVariantMap properties;
|
||||
if (parser.isSet(applicationNameOption)) {
|
||||
properties.insert(QStringLiteral("appName"), parser.value(applicationNameOption));
|
||||
}
|
||||
if (parser.isSet(summaryOption)) {
|
||||
properties.insert(QStringLiteral("summary"), parser.value(summaryOption));
|
||||
}
|
||||
if (parser.isSet(iconOption)) {
|
||||
properties.insert(QStringLiteral("appIcon"), parser.value(iconOption));
|
||||
}
|
||||
|
||||
if (parser.isSet(uidsOption)) {
|
||||
const QStringList &uids = parser.value(uidsOption).split(QLatin1Char(','), Qt::SkipEmptyParts);
|
||||
if (!uids.isEmpty()) {
|
||||
properties.insert(QStringLiteral("uids"), uids);
|
||||
}
|
||||
}
|
||||
|
||||
if (parser.isSet(timeoutOption)) {
|
||||
bool ok;
|
||||
const int timeout = parser.value(timeoutOption).toInt(&ok);
|
||||
if (ok) {
|
||||
properties.insert(QStringLiteral("timeout"), timeout);
|
||||
}
|
||||
}
|
||||
if (parser.isSet(persistentOption)) { // takes precedence over timeout if both are set
|
||||
properties.insert(QStringLiteral("timeout"), 0); // 0 = persistent, -1 = server default
|
||||
}
|
||||
|
||||
const auto &positionalArgs = parser.positionalArguments();
|
||||
if (positionalArgs.count() == 1) {
|
||||
properties.insert(QStringLiteral("body"), positionalArgs.first());
|
||||
}
|
||||
|
||||
if (properties.isEmpty()) {
|
||||
parser.showHelp(1); // never returns
|
||||
}
|
||||
|
||||
QDBusMessage message = QDBusMessage::createSignal(QStringLiteral("/org/kde/kbroadcastnotification"),
|
||||
QStringLiteral("org.kde.BroadcastNotifications"),
|
||||
QStringLiteral("Notify"));
|
||||
message.setArguments({properties});
|
||||
QDBusConnection::systemBus().send(message);
|
||||
|
||||
// FIXME can we detect that the message was sent to the bus?
|
||||
QTimer::singleShot(500, &app, QCoreApplication::quit);
|
||||
|
||||
return app.exec();
|
||||
}
|
||||
Reference in New Issue
Block a user