Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package pulseaudio-qt for openSUSE:Factory checked in at 2026-03-04 21:02:51 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/pulseaudio-qt (Old) and /work/SRC/openSUSE:Factory/.pulseaudio-qt.new.561 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "pulseaudio-qt" Wed Mar 4 21:02:51 2026 rev:10 rq:1335918 version:1.8.1 Changes: -------- --- /work/SRC/openSUSE:Factory/pulseaudio-qt/pulseaudio-qt.changes 2025-02-25 16:40:00.503911374 +0100 +++ /work/SRC/openSUSE:Factory/.pulseaudio-qt.new.561/pulseaudio-qt.changes 2026-03-04 21:03:24.223935825 +0100 @@ -1,0 +2,10 @@ +Mon Mar 2 21:08:58 UTC 2026 - Christophe Marin <[email protected]> + +- Update to 1.8.1 + * Guard against active_port or active_profile2 being null + * card,device: make sure to always have a "valid" index on port + and profile + * server: Expose the audio server and wireplumber versions + * Remove all qml import version numbers + +------------------------------------------------------------------- Old: ---- pulseaudio-qt-1.7.0.tar.xz pulseaudio-qt-1.7.0.tar.xz.sig New: ---- pulseaudio-qt-1.8.1.tar.xz pulseaudio-qt-1.8.1.tar.xz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ pulseaudio-qt.spec ++++++ --- /var/tmp/diff_new_pack.QAqTJU/_old 2026-03-04 21:03:24.899963767 +0100 +++ /var/tmp/diff_new_pack.QAqTJU/_new 2026-03-04 21:03:24.903963933 +0100 @@ -1,7 +1,7 @@ # # spec file for package pulseaudio-qt # -# Copyright (c) 2023 SUSE LLC +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -21,7 +21,7 @@ %define pkg_suffix 6 %define qt6 1 %define kf6_version 6.0.0 -%define qt6_version 6.6.0 +%define qt6_version 6.7.0 %define library_name libKF6PulseAudioQt5 %else ExclusiveArch: do_not_build @@ -30,7 +30,7 @@ %define rname pulseaudio-qt %bcond_without released Name: pulseaudio-qt%{?pkg_suffix} -Version: 1.7.0 +Version: 1.8.1 Release: 0 Summary: Qt bindings for PulseAudio License: LGPL-2.1-or-later ++++++ pulseaudio-qt-1.7.0.tar.xz -> pulseaudio-qt-1.8.1.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pulseaudio-qt-1.7.0/.gitlab-ci.yml new/pulseaudio-qt-1.8.1/.gitlab-ci.yml --- old/pulseaudio-qt-1.7.0/.gitlab-ci.yml 2025-01-09 18:08:04.000000000 +0100 +++ new/pulseaudio-qt-1.8.1/.gitlab-ci.yml 2026-03-02 21:19:57.000000000 +0100 @@ -6,3 +6,4 @@ file: - /gitlab-templates/linux-qt6.yml - /gitlab-templates/freebsd-qt6.yml + - /gitlab-templates/linux-qt6-next.yml diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pulseaudio-qt-1.7.0/.kde-ci.yml new/pulseaudio-qt-1.8.1/.kde-ci.yml --- old/pulseaudio-qt-1.7.0/.kde-ci.yml 2025-01-09 18:08:04.000000000 +0100 +++ new/pulseaudio-qt-1.8.1/.kde-ci.yml 2026-03-02 21:19:57.000000000 +0100 @@ -2,9 +2,10 @@ # SPDX-License-Identifier: CC0-1.0 Dependencies: -- 'on': ['Linux/Qt6', 'FreeBSD/Qt6'] +- 'on': ['Linux', 'FreeBSD'] 'require': 'frameworks/extra-cmake-modules': '@latest-kf6' Options: require-passing-tests-on: [ 'Linux', 'FreeBSD' ] + enable-lsan: True diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pulseaudio-qt-1.7.0/CMakeLists.txt new/pulseaudio-qt-1.8.1/CMakeLists.txt --- old/pulseaudio-qt-1.7.0/CMakeLists.txt 2025-01-09 18:08:04.000000000 +0100 +++ new/pulseaudio-qt-1.8.1/CMakeLists.txt 2026-03-02 21:19:57.000000000 +0100 @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.16) -set(PROJECT_VERSION 1.7.0) +set(PROJECT_VERSION 1.8.1) project(PulseAudioQt VERSION ${PROJECT_VERSION}) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pulseaudio-qt-1.7.0/src/card.cpp new/pulseaudio-qt-1.8.1/src/card.cpp --- old/pulseaudio-qt-1.7.0/src/card.cpp 2025-01-09 18:08:04.000000000 +0100 +++ new/pulseaudio-qt-1.8.1/src/card.cpp 2026-03-02 21:19:57.000000000 +0100 @@ -74,9 +74,21 @@ } } - for (Profile *profile : std::as_const(m_profiles)) { - if (QString::fromUtf8(info->active_profile2->name) == profile->name()) { - m_activeProfileIndex = m_profiles.indexOf(profile); + // Make sure it's -1 in the unlikely event that we don't have an active profile + // https://bugs.kde.org/show_bug.cgi?id=496067 + m_activeProfileIndex = -1; + + if (info->active_profile2) { + for (Profile *profile : std::as_const(m_profiles)) { + if (QString::fromUtf8(info->active_profile2->name) == profile->name()) { + m_activeProfileIndex = m_profiles.indexOf(profile); + } + } + if (m_activeProfileIndex == static_cast<quint32>(-1)) { + qCWarning(PULSEAUDIOQT) << "Failed to find active profile" << QString::fromUtf8(info->active_profile2->name); + for (const auto &profile : std::as_const(m_profiles)) { + qCWarning(PULSEAUDIOQT) << "Available profile:" << profile->name(); + } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pulseaudio-qt-1.7.0/src/device_p.h new/pulseaudio-qt-1.8.1/src/device_p.h --- old/pulseaudio-qt-1.7.0/src/device_p.h 2025-01-09 18:08:04.000000000 +0100 +++ new/pulseaudio-qt-1.8.1/src/device_p.h 2026-03-02 21:19:57.000000000 +0100 @@ -110,9 +110,21 @@ } // Set active port - for (Port *port : std::as_const(m_ports)) { - if (QString::fromUtf8(info->active_port->name) == port->name()) { - m_activePortIndex = m_ports.indexOf(port); + // Make sure it's -1 in the unlikely event that we don't have an active port + // https://bugs.kde.org/show_bug.cgi?id=496067 + m_activePortIndex = -1; + + if (info->active_port) { + for (Port *port : std::as_const(m_ports)) { + if (QString::fromUtf8(info->active_port->name) == port->name()) { + m_activePortIndex = m_ports.indexOf(port); + } + } + if (m_activePortIndex == static_cast<quint32>(-1)) { + qCWarning(PULSEAUDIOQT) << "Failed to find active port" << QString::fromUtf8(info->active_port->name); + for (const auto &port : std::as_const(m_ports)) { + qCWarning(PULSEAUDIOQT) << "Available port:" << port->name(); + } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pulseaudio-qt-1.7.0/src/server.cpp new/pulseaudio-qt-1.8.1/src/server.cpp --- old/pulseaudio-qt-1.7.0/src/server.cpp 2025-01-09 18:08:04.000000000 +0100 +++ new/pulseaudio-qt-1.8.1/src/server.cpp 2026-03-02 21:19:57.000000000 +0100 @@ -111,6 +111,15 @@ Q_EMIT q->isPipeWireChanged(); } + // Do not use the pulseaudio server version for pipewire + if (!isPw) { + const QString pulseVersion = QString::fromUtf8(info->server_version); + if (pulseVersion != m_version) { + m_version = pulseVersion; + Q_EMIT q->versionChanged(); + } + } + q->updateDefaultDevices(); Q_EMIT q->updated(); @@ -157,6 +166,11 @@ return d->m_isPipeWire; } +QString Server::version() const +{ + return d->m_version; +} + void ServerPrivate::findWirePlumber() { if (!m_isPipeWire) { @@ -164,21 +178,41 @@ } const auto clients = Context::instance()->clients(); + + // Get the actual PipeWire version by reading the `core.version` property + // from one of the clients in the list that exposes it + for (const auto &client : clients) { + if (client->properties().contains(QStringLiteral("core.version"))) { + const QString pwVersion = client->properties().value(QStringLiteral("core.version")).toString(); + if (pwVersion != m_version) { + m_version = pwVersion; + Q_EMIT q->versionChanged(); + break; + } + } + } + for (const auto &client : clients) { if (client->properties().value(QStringLiteral("wireplumber.daemon")) == QLatin1String("true")) { - m_hasWirePlumber = true; + m_wirePlumberVersion = client->properties().value(QStringLiteral("application.version")).toString(); Q_EMIT q->hasWirePlumberChanged(); return; } } - // Found no plumber, mark false - m_hasWirePlumber = false; + // Found no plumber, mark as not availabe + m_wirePlumberVersion = std::nullopt; Q_EMIT q->hasWirePlumberChanged(); } bool Server::hasWirePlumber() const { - return d->m_hasWirePlumber; + return d->m_wirePlumberVersion.has_value(); } + +QString Server::wirePlumberVersion() const +{ + return d->m_wirePlumberVersion.value_or(QString()); +} + } // PulseAudioQt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pulseaudio-qt-1.7.0/src/server.h new/pulseaudio-qt-1.8.1/src/server.h --- old/pulseaudio-qt-1.7.0/src/server.h 2025-01-09 18:08:04.000000000 +0100 +++ new/pulseaudio-qt-1.8.1/src/server.h 2026-03-02 21:19:57.000000000 +0100 @@ -28,6 +28,11 @@ Q_PROPERTY(bool isPipeWire READ isPipeWire NOTIFY isPipeWireChanged) /// Whether the connected PipeWire is driven by WirePlumber Q_PROPERTY(bool hasWirePlumber READ hasWirePlumber NOTIFY hasWirePlumberChanged) + /// The version string of the audio server + Q_PROPERTY(QString version READ version NOTIFY versionChanged) + /// The version string of the running WirePlumber daemon + Q_PROPERTY(QString wirePlumberVersion READ wirePlumberVersion NOTIFY hasWirePlumberChanged) + public: ~Server() override; @@ -49,12 +54,31 @@ */ [[nodiscard]] bool hasWirePlumber() const; + /** + * The version string of the audio server + * For PipeWire, it returns the actual PipeWire version, + * not the one reported the by the pipwire-pulse interface + * + * @since 1.8 + */ + [[nodiscard]] QString version() const; + + /** + * The version string of the WirePlumber daemon + * Returns an empty string if WirePlumber is not running + * + * @since 1.8 + */ + + [[nodiscard]] QString wirePlumberVersion() const; + Q_SIGNALS: void defaultSinkChanged(PulseAudioQt::Sink *sink); void defaultSourceChanged(PulseAudioQt::Source *source); void isPipeWireChanged(); void updated(); void hasWirePlumberChanged(); + void versionChanged(); private: explicit Server(Context *context); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pulseaudio-qt-1.7.0/src/server_p.h new/pulseaudio-qt-1.8.1/src/server_p.h --- old/pulseaudio-qt-1.7.0/src/server_p.h 2025-01-09 18:08:04.000000000 +0100 +++ new/pulseaudio-qt-1.8.1/src/server_p.h 2026-03-02 21:19:57.000000000 +0100 @@ -23,8 +23,9 @@ QString m_defaultSourceName; Sink *m_defaultSink; Source *m_defaultSource; + QString m_version; bool m_isPipeWire = true; - bool m_hasWirePlumber = true; + std::optional<QString> m_wirePlumberVersion; QTimer m_wirePlumberFindTimer; void update(const pa_server_info *info); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pulseaudio-qt-1.7.0/tests/painspector/CardDelegate.qml new/pulseaudio-qt-1.8.1/tests/painspector/CardDelegate.qml --- old/pulseaudio-qt-1.7.0/tests/painspector/CardDelegate.qml 2025-01-09 18:08:04.000000000 +0100 +++ new/pulseaudio-qt-1.8.1/tests/painspector/CardDelegate.qml 2026-03-02 21:19:57.000000000 +0100 @@ -3,11 +3,11 @@ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL */ -import QtQuick 2.7 -import QtQuick.Layouts 1.3 -import QtQuick.Controls 2.2 +import QtQuick +import QtQuick.Layouts +import QtQuick.Controls -import org.kde.kirigami 2.10 as Kirigami +import org.kde.kirigami as Kirigami Kirigami.FormLayout { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pulseaudio-qt-1.7.0/tests/painspector/DeviceDelegate.qml new/pulseaudio-qt-1.8.1/tests/painspector/DeviceDelegate.qml --- old/pulseaudio-qt-1.7.0/tests/painspector/DeviceDelegate.qml 2025-01-09 18:08:04.000000000 +0100 +++ new/pulseaudio-qt-1.8.1/tests/painspector/DeviceDelegate.qml 2026-03-02 21:19:57.000000000 +0100 @@ -3,11 +3,11 @@ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL */ -import QtQuick 2.7 -import QtQuick.Layouts 1.3 -import QtQuick.Controls 2.2 +import QtQuick +import QtQuick.Layouts +import QtQuick.Controls -import org.kde.kirigami 2.10 as Kirigami +import org.kde.kirigami as Kirigami Kirigami.FormLayout { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pulseaudio-qt-1.7.0/tests/painspector/Header.qml new/pulseaudio-qt-1.8.1/tests/painspector/Header.qml --- old/pulseaudio-qt-1.7.0/tests/painspector/Header.qml 2025-01-09 18:08:04.000000000 +0100 +++ new/pulseaudio-qt-1.8.1/tests/painspector/Header.qml 2026-03-02 21:19:57.000000000 +0100 @@ -3,11 +3,11 @@ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL */ -import QtQuick 2.7 -import QtQuick.Layouts 1.3 -import QtQuick.Controls 2.2 +import QtQuick +import QtQuick.Layouts +import QtQuick.Controls -import org.kde.kirigami 2.15 as Kirigami +import org.kde.kirigami as Kirigami Kirigami.FormLayout { property string text diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pulseaudio-qt-1.7.0/tests/painspector/ModuleDelegate.qml new/pulseaudio-qt-1.8.1/tests/painspector/ModuleDelegate.qml --- old/pulseaudio-qt-1.7.0/tests/painspector/ModuleDelegate.qml 2025-01-09 18:08:04.000000000 +0100 +++ new/pulseaudio-qt-1.8.1/tests/painspector/ModuleDelegate.qml 2026-03-02 21:19:57.000000000 +0100 @@ -3,11 +3,11 @@ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL */ -import QtQuick 2.7 -import QtQuick.Layouts 1.3 -import QtQuick.Controls 2.2 +import QtQuick +import QtQuick.Layouts +import QtQuick.Controls -import org.kde.kirigami 2.10 as Kirigami +import org.kde.kirigami as Kirigami Kirigami.FormLayout { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pulseaudio-qt-1.7.0/tests/painspector/PAPage.qml new/pulseaudio-qt-1.8.1/tests/painspector/PAPage.qml --- old/pulseaudio-qt-1.7.0/tests/painspector/PAPage.qml 2025-01-09 18:08:04.000000000 +0100 +++ new/pulseaudio-qt-1.8.1/tests/painspector/PAPage.qml 2026-03-02 21:19:57.000000000 +0100 @@ -3,13 +3,13 @@ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL */ -import QtQuick 2.7 -import QtQuick.Layouts 1.3 -import QtQuick.Controls 2.2 +import QtQuick +import QtQuick.Layouts +import QtQuick.Controls -import org.kde.pulseaudioqt.tests 0.1 as PulseAudioQt +import org.kde.pulseaudioqt.tests as PulseAudioQt -import org.kde.kirigami 2.15 as Kirigami +import org.kde.kirigami as Kirigami Kirigami.ScrollablePage { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pulseaudio-qt-1.7.0/tests/painspector/PortsItem.qml new/pulseaudio-qt-1.8.1/tests/painspector/PortsItem.qml --- old/pulseaudio-qt-1.7.0/tests/painspector/PortsItem.qml 2025-01-09 18:08:04.000000000 +0100 +++ new/pulseaudio-qt-1.8.1/tests/painspector/PortsItem.qml 2026-03-02 21:19:57.000000000 +0100 @@ -3,13 +3,13 @@ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL */ -import QtQuick 2.7 -import QtQuick.Layouts 1.3 -import QtQuick.Controls 2.2 +import QtQuick +import QtQuick.Layouts +import QtQuick.Controls -import org.kde.kirigami 2.10 as Kirigami +import org.kde.kirigami as Kirigami -import org.kde.pulseaudioqt.painspector 1.0 +import org.kde.pulseaudioqt.painspector Column { Kirigami.FormData.label: "Ports:" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pulseaudio-qt-1.7.0/tests/painspector/PropertiesItem.qml new/pulseaudio-qt-1.8.1/tests/painspector/PropertiesItem.qml --- old/pulseaudio-qt-1.7.0/tests/painspector/PropertiesItem.qml 2025-01-09 18:08:04.000000000 +0100 +++ new/pulseaudio-qt-1.8.1/tests/painspector/PropertiesItem.qml 2026-03-02 21:19:57.000000000 +0100 @@ -3,11 +3,11 @@ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL */ -import QtQuick 2.7 -import QtQuick.Layouts 1.3 -import QtQuick.Controls 2.2 +import QtQuick +import QtQuick.Layouts +import QtQuick.Controls -import org.kde.kirigami 2.10 as Kirigami +import org.kde.kirigami as Kirigami Column { Kirigami.FormData.label: "Properties:" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pulseaudio-qt-1.7.0/tests/painspector/StreamDelegate.qml new/pulseaudio-qt-1.8.1/tests/painspector/StreamDelegate.qml --- old/pulseaudio-qt-1.7.0/tests/painspector/StreamDelegate.qml 2025-01-09 18:08:04.000000000 +0100 +++ new/pulseaudio-qt-1.8.1/tests/painspector/StreamDelegate.qml 2026-03-02 21:19:57.000000000 +0100 @@ -3,11 +3,11 @@ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL */ -import QtQuick 2.7 -import QtQuick.Layouts 1.3 -import QtQuick.Controls 2.2 +import QtQuick +import QtQuick.Layouts +import QtQuick.Controls -import org.kde.kirigami 2.10 as Kirigami +import org.kde.kirigami as Kirigami Kirigami.FormLayout { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pulseaudio-qt-1.7.0/tests/painspector/main.qml new/pulseaudio-qt-1.8.1/tests/painspector/main.qml --- old/pulseaudio-qt-1.7.0/tests/painspector/main.qml 2025-01-09 18:08:04.000000000 +0100 +++ new/pulseaudio-qt-1.8.1/tests/painspector/main.qml 2026-03-02 21:19:57.000000000 +0100 @@ -3,13 +3,13 @@ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL */ -import QtQuick 2.7 -import QtQuick.Layouts 1.3 -import QtQuick.Controls 2.2 +import QtQuick +import QtQuick.Layouts +import QtQuick.Controls -import org.kde.pulseaudioqt.tests 0.1 as PulseAudioQt +import org.kde.pulseaudioqt.tests as PulseAudioQt -import org.kde.kirigami 2.20 as Kirigami +import org.kde.kirigami as Kirigami Kirigami.ApplicationWindow { id: root
