From cc4a33a2ae65ae8be11a51a4285b8fa503bbae59 Mon Sep 17 00:00:00 2001 From: Sebastian Palencsar Date: Mon, 25 May 2026 14:50:11 +0200 Subject: [PATCH] Fix metadata overwrite and Wayland DBus crash --- src/bearplayer.cpp | 5 +++++ src/icyreader.cpp | 5 +++++ src/notificationmanager.cpp | 20 +++++++++++++------- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/bearplayer.cpp b/src/bearplayer.cpp index 3aa8370..a82d928 100644 --- a/src/bearplayer.cpp +++ b/src/bearplayer.cpp @@ -131,6 +131,11 @@ void BearPlayer::onMetaDataChanged() QString title = meta.stringValue(QMediaMetaData::Title); + // Ignore completely empty metadata from QMediaPlayer so we don't overwrite IcyReader + if (artist.isEmpty() && title.isEmpty()) { + return; + } + if (m_currentTrackArtist == artist && m_currentTrackTitle == title) { return; } diff --git a/src/icyreader.cpp b/src/icyreader.cpp index 61f2fa9..c89fbd0 100644 --- a/src/icyreader.cpp +++ b/src/icyreader.cpp @@ -56,8 +56,10 @@ void IcyReader::onReadyRead() if (m_metaInt == 0) { if (m_reply->hasRawHeader("icy-metaint")) { m_metaInt = m_reply->rawHeader("icy-metaint").toInt(); + qDebug() << "ICYREADER: Found icy-metaint =" << m_metaInt; } else { // No ICY metadata supported by stream + qDebug() << "ICYREADER: No icy-metaint header found!"; return; } } @@ -132,6 +134,9 @@ void IcyReader::parseMetaData(const QByteArray &metaData) title = fullTitle; } + qDebug() << "ICYREADER: PARSED METADATA -> Artist:" << artist << "Title:" << title; emit metaDataReceived(artist, title); + } else { + qDebug() << "ICYREADER: Regex failed on string:" << metaString; } } diff --git a/src/notificationmanager.cpp b/src/notificationmanager.cpp index f823816..e02142a 100644 --- a/src/notificationmanager.cpp +++ b/src/notificationmanager.cpp @@ -6,6 +6,8 @@ #include #include #include +#include +#include #include #include #include @@ -230,17 +232,21 @@ void NotificationManager::showNotification(const QString &station, const QString << hints << -1; - QDBusReply dbusReply = notifyInterface.callWithArgumentList( - QDBus::Block, + QDBusPendingCall pcall = notifyInterface.asyncCallWithArgumentList( QStringLiteral("Notify"), args ); - if (dbusReply.isValid()) { - m_lastNotificationId = dbusReply.value(); - } else { - qWarning() << "Failed to send notification via DBus:" << dbusReply.error().message(); - } + QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pcall, this); + connect(watcher, &QDBusPendingCallWatcher::finished, this, [this](QDBusPendingCallWatcher *watcher) { + watcher->deleteLater(); + QDBusPendingReply reply = *watcher; + if (reply.isValid()) { + m_lastNotificationId = reply.value(); + } else { + qWarning() << "Failed to send notification via DBus:" << reply.error().message(); + } + }); } void NotificationManager::closeNotification()