diff --git a/extension/content-script.js b/extension/content-script.js --- a/extension/content-script.js +++ b/extension/content-script.js @@ -256,6 +256,7 @@ addCallback("mpris", "setVolume", function (message) { if (activePlayer) { activePlayer.volume = message.volume; + activePlayer.muted = (message.volume == 0.0); } }); @@ -315,6 +316,7 @@ currentTime: player.currentTime, playbackRate: player.playbackRate, volume: player.volume, + muted: player.muted, loop: player.loop, metadata: playerMetadata, callbacks: playerCallbacks @@ -434,7 +436,8 @@ player.addEventListener("volumechange", function () { sendPlayerInfo(player, "volumechange", { - volume: player.volume + volume: player.volume, + muted: player.muted }); }); diff --git a/host/mprisplugin.h b/host/mprisplugin.h --- a/host/mprisplugin.h +++ b/host/mprisplugin.h @@ -158,6 +158,7 @@ QUrl m_artworkUrl; qreal m_volume = 1.0; + bool m_muted = false; qlonglong m_length = 0; qlonglong m_position = 0; diff --git a/host/mprisplugin.cpp b/host/mprisplugin.cpp --- a/host/mprisplugin.cpp +++ b/host/mprisplugin.cpp @@ -135,17 +135,21 @@ m_artist.clear(); m_artworkUrl.clear(); m_volume = 1.0; + m_muted = false; m_length = 0; m_position = 0; } else if (event == QLatin1String("playing")) { setPlaybackStatus(QStringLiteral("Playing")); m_pageTitle = data.value(QStringLiteral("tabTitle")).toString(); m_url = QUrl(data.value(QStringLiteral("url")).toString()); m_mediaSrc = QUrl(data.value(QStringLiteral("mediaSrc")).toString()); - const qreal volume = data.value(QStringLiteral("volume")).toDouble(1); - if (m_volume != volume) { - m_volume = volume; + const qreal oldVolume = volume(); + + m_volume = data.value(QStringLiteral("volume")).toDouble(1); + m_muted = data.value(QStringLiteral("muted")).toBool(); + + if (volume() != oldVolume) { emitPropertyChange(m_player, "Volume"); } @@ -208,6 +212,7 @@ setPosition(position * 1000 * 1000); } else if (event == QLatin1String("volumechange")) { m_volume = data.value(QStringLiteral("volume")).toDouble(1); + m_muted = data.value(QStringLiteral("muted")).toBool(); emitPropertyChange(m_player, "Volume"); } else if (event == QLatin1String("metadata")) { processMetadata(data.value(QStringLiteral("metadata")).toObject()); @@ -294,6 +299,9 @@ qreal MPrisPlugin::volume() const { + if (m_muted) { + return 0.0; + } return m_volume; }