Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package knighttime6 for openSUSE:Factory checked in at 2026-05-13 21:37:35 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/knighttime6 (Old) and /work/SRC/openSUSE:Factory/.knighttime6.new.1966 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "knighttime6" Wed May 13 21:37:35 2026 rev:12 rq:1352841 version:6.6.5 Changes: -------- --- /work/SRC/openSUSE:Factory/knighttime6/knighttime6.changes 2026-04-10 17:49:59.586344149 +0200 +++ /work/SRC/openSUSE:Factory/.knighttime6.new.1966/knighttime6.changes 2026-05-13 21:38:04.416580881 +0200 @@ -1,0 +2,10 @@ +Tue May 12 13:58:07 UTC 2026 - Fabian Vogt <[email protected]> + +- Update to 6.6.5: + * New bugfix release + * For more details see https://kde.org/announcements/plasma/6/6.6.5 +- Changes since 6.6.4: + * Update version for new release 6.6.5 + * Resubscribe to the daemon if it is restarted + +------------------------------------------------------------------- Old: ---- knighttime-6.6.4.tar.xz knighttime-6.6.4.tar.xz.sig New: ---- knighttime-6.6.5.tar.xz knighttime-6.6.5.tar.xz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ knighttime6.spec ++++++ --- /var/tmp/diff_new_pack.b6HEwh/_old 2026-05-13 21:38:06.616671237 +0200 +++ /var/tmp/diff_new_pack.b6HEwh/_new 2026-05-13 21:38:06.640672223 +0200 @@ -26,7 +26,7 @@ %{!?_plasma6_version: %define _plasma6_version %(echo %{_plasma6_bugfix} | awk -F. '{print $1"."$2}')} %bcond_without released Name: knighttime6 -Version: 6.6.4 +Version: 6.6.5 Release: 0 Summary: Day-night cycle helper library License: LGPL-2.1-or-later ++++++ knighttime-6.6.4.tar.xz -> knighttime-6.6.5.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knighttime-6.6.4/CMakeLists.txt new/knighttime-6.6.5/CMakeLists.txt --- old/knighttime-6.6.4/CMakeLists.txt 2026-04-07 09:55:26.000000000 +0200 +++ new/knighttime-6.6.5/CMakeLists.txt 2026-05-12 12:25:05.000000000 +0200 @@ -4,13 +4,13 @@ cmake_minimum_required(VERSION 3.16) -set(PROJECT_VERSION "6.6.4") +set(PROJECT_VERSION "6.6.5") project(KNightTime VERSION ${PROJECT_VERSION}) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(PROJECT_DEP_VERSION "6.6.4") +set(PROJECT_DEP_VERSION "6.6.5") set(QT_MIN_VERSION "6.10.0") set(KF6_MIN_VERSION "6.22.0") set(KDE_COMPILERSETTINGS_LEVEL "5.82") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knighttime-6.6.4/src/daemon/org.kde.knighttimed.desktop.in new/knighttime-6.6.5/src/daemon/org.kde.knighttimed.desktop.in --- old/knighttime-6.6.4/src/daemon/org.kde.knighttimed.desktop.in 2026-04-07 09:55:26.000000000 +0200 +++ new/knighttime-6.6.5/src/daemon/org.kde.knighttimed.desktop.in 2026-05-12 12:25:05.000000000 +0200 @@ -7,6 +7,7 @@ Name[ar]=خدمة وقت الليل Name[ca]=Servei d'hora de nit Name[ca@valencia]=Servei prompte de nit +Name[cs]=Noční služba Name[de]=Nachtzeit-Dienst Name[es]=Servicio de hora nocturna Name[eu]=Gaueko ordu zerbitzua @@ -28,6 +29,7 @@ Name[pl]=Usługa nocnych barw Name[pt_BR]=Serviço de hora noturna Name[ro]=Serviciu de oră nocturnă +Name[sk]=Služba nočného času Name[sl]=Storitev nočnega časa Name[sv]=Nattjänst Name[ta]=இரவு நேர செவை diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knighttime-6.6.4/src/kdarklightschedulesubscription.cpp new/knighttime-6.6.5/src/kdarklightschedulesubscription.cpp --- old/knighttime-6.6.4/src/kdarklightschedulesubscription.cpp 2026-04-07 09:55:26.000000000 +0200 +++ new/knighttime-6.6.5/src/kdarklightschedulesubscription.cpp 2026-05-12 12:25:05.000000000 +0200 @@ -31,31 +31,16 @@ KDarkLightScheduleSubscription::KDarkLightScheduleSubscription(QObject *parent) : QObject(parent) { - QDBusConnection::sessionBus().connect(QStringLiteral("org.kde.NightTime"), QStringLiteral("/org/kde/NightTime/Manager"), QStringLiteral("org.kde.NightTime.Manager"), QStringLiteral("Refreshed"), this, SLOT(OnRefreshed(QVariantMap))); + auto bus = QDBusConnection::sessionBus(); + bus.connect(QStringLiteral("org.kde.NightTime"), QStringLiteral("/org/kde/NightTime/Manager"), QStringLiteral("org.kde.NightTime.Manager"), QStringLiteral("Refreshed"), this, SLOT(OnRefreshed(QVariantMap))); - auto message = QDBusMessage::createMethodCall(QStringLiteral("org.kde.NightTime"), QStringLiteral("/org/kde/NightTime/Manager"), QStringLiteral("org.kde.NightTime.Manager"), QStringLiteral("Subscribe")); - message.setArguments({QVariantMap()}); - auto pendingCall = QDBusConnection::sessionBus().asyncCall(message); + m_daemonWatcher = std::make_unique<QDBusServiceWatcher>(QStringLiteral("org.kde.NightTime"), bus); + connect(m_daemonWatcher.get(), &QDBusServiceWatcher::serviceRegistered, + this, &KDarkLightScheduleSubscription::OnDaemonRegistered); + connect(m_daemonWatcher.get(), &QDBusServiceWatcher::serviceUnregistered, + this, &KDarkLightScheduleSubscription::OnDaemonUnregistered); - auto watcher = new QDBusPendingCallWatcher(pendingCall); - auto self = QPointer(this); - connect(watcher, &QDBusPendingCallWatcher::finished, qApp, [self](QDBusPendingCallWatcher *watcher) { - watcher->deleteLater(); - - if (watcher->isError()) { - qCWarning(KNIGHTTIME) << "Subscribe() failed:" << watcher->error(); - return; - } - - QDBusPendingReply<QVariantMap> reply = *watcher; - if (self) { - self->OnSubscribed(reply.value()); - } else { - auto message = QDBusMessage::createMethodCall(QStringLiteral("org.kde.NightTime"), QStringLiteral("/org/kde/NightTime/Manager"), QStringLiteral("org.kde.NightTime.Manager"), QStringLiteral("Unsubscribe")); - message.setArguments({reply.value().value(QStringLiteral("Cookie"))}); - QDBusConnection::sessionBus().asyncCall(message); - } - }); + subscribe(); } KDarkLightScheduleSubscription::~KDarkLightScheduleSubscription() @@ -99,6 +84,59 @@ } } +void KDarkLightScheduleSubscription::OnDaemonRegistered() +{ + // Usually, if we start the daemon, we will get the reply for the Subscribe request first, then + // we will get notified that the daemon service has become available. However, just to be sure, + // this code also handles when things are vice versa. + // + // If there is an in-flight subscribe request (but it fails) and the daemon dies and it is started + // again, this code assumes that the error reply will be processed before this slot gets called. + + if (!m_cookie && !m_cookieWatcher) { + subscribe(); + } +} + +void KDarkLightScheduleSubscription::OnDaemonUnregistered() +{ + m_cookie.reset(); + + // Avoid resetting the cookie watcher. The subscribe request could have been sent around the + // same time the daemon has been unregistered. In which case, the daemon will be started again. +} + +void KDarkLightScheduleSubscription::subscribe() +{ + auto message = QDBusMessage::createMethodCall(QStringLiteral("org.kde.NightTime"), QStringLiteral("/org/kde/NightTime/Manager"), QStringLiteral("org.kde.NightTime.Manager"), QStringLiteral("Subscribe")); + message.setArguments({QVariantMap()}); + auto pendingCall = QDBusConnection::sessionBus().asyncCall(message); + + m_cookieWatcher = new QDBusPendingCallWatcher(pendingCall); + connect(m_cookieWatcher, &QDBusPendingCallWatcher::finished, qApp, [self = QPointer(this)](QDBusPendingCallWatcher *watcher) { + watcher->deleteLater(); + + if (watcher->isError()) { + if (self && self->m_cookieWatcher == watcher) { + self->m_cookieWatcher = nullptr; + } + qCWarning(KNIGHTTIME) << "Subscribe() failed:" << watcher->error(); + return; + } + + QDBusPendingReply<QVariantMap> reply = *watcher; + if (self && self->m_cookieWatcher == watcher) { + self->m_cookieWatcher = nullptr; + + self->OnSubscribed(reply.value()); + } else { + auto message = QDBusMessage::createMethodCall(QStringLiteral("org.kde.NightTime"), QStringLiteral("/org/kde/NightTime/Manager"), QStringLiteral("org.kde.NightTime.Manager"), QStringLiteral("Unsubscribe")); + message.setArguments({reply.value().value(QStringLiteral("Cookie"))}); + QDBusConnection::sessionBus().asyncCall(message); + } + }); +} + void KDarkLightScheduleSubscription::update(const QVariant &data) { const auto dbusSchedule = qdbus_cast<KNightTimeDbusSchedule>(data.value<QDBusArgument>()); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knighttime-6.6.4/src/kdarklightschedulesubscription_p.h new/knighttime-6.6.5/src/kdarklightschedulesubscription_p.h --- old/knighttime-6.6.4/src/kdarklightschedulesubscription_p.h 2026-04-07 09:55:26.000000000 +0200 +++ new/knighttime-6.6.5/src/kdarklightschedulesubscription_p.h 2026-05-12 12:25:05.000000000 +0200 @@ -8,6 +8,8 @@ #include "kdarklightschedule.h" +#include <QDBusPendingCallWatcher> +#include <QDBusServiceWatcher> #include <QObject> class KDarkLightScheduleSubscription : public QObject @@ -29,11 +31,16 @@ private Q_SLOTS: void OnSubscribed(const QVariantMap &data); void OnRefreshed(const QVariantMap &data); + void OnDaemonRegistered(); + void OnDaemonUnregistered(); private: + void subscribe(); void update(const QVariant &data); + std::unique_ptr<QDBusServiceWatcher> m_daemonWatcher; std::optional<KDarkLightSchedule> m_schedule; QString m_state; + QDBusPendingCallWatcher *m_cookieWatcher = nullptr; std::optional<uint> m_cookie; };
