From f931fc8352af91864c2a02c580a5054c9e00a7e1 Mon Sep 17 00:00:00 2001 From: craig Date: Mon, 28 Nov 2011 19:10:04 +0000 Subject: [PATCH] Add replaygain support. --- ChangeLog | 1 + gui/playbacksettings.cpp | 17 +++++++++++++++-- gui/playbacksettings.ui | 13 +++++++++++++ lib/mpdconnection.cpp | 24 ++++++++++++++++++++++-- lib/mpdconnection.h | 4 +++- lib/mpdparseutils.cpp | 3 ++- lib/mpdstatus.cpp | 4 ++-- lib/mpdstatus.h | 4 ++-- 8 files changed, 60 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index b4ea71ce6..1a8db969a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -29,6 +29,7 @@ 21. Use QNetworkAccessManager for HTTP downloads. If compiled woth KDE support, use KIO::Integration::AccessManager so that we can gain access to KDE's proxy settings. 22. Use sidebar instead of tabbar. +23. Support replaygain setting. --------------QtMPC ChangeLog-------------------- diff --git a/gui/playbacksettings.cpp b/gui/playbacksettings.cpp index f31ce05f8..b6386ef40 100644 --- a/gui/playbacksettings.cpp +++ b/gui/playbacksettings.cpp @@ -5,14 +5,27 @@ PlaybackSettings::PlaybackSettings(QWidget *p) : QWidget(p) { setupUi(this); + replayGain->addItem(i18n("None"), QVariant("off")); + replayGain->addItem(i18n("Track"), QVariant("track")); + replayGain->addItem(i18n("Album"), QVariant("album")); }; void PlaybackSettings::load() { - crossfading->setValue(MPDStatus::self()->xfade()); + crossfading->setValue(MPDStatus::self()->crossFade()); + QString rg=MPDConnection::self()->getReplayGain(); + replayGain->setCurrentIndex(0); + + for(int i=0; icount(); ++i) { + if (replayGain->itemData(i).toString()==rg){ + replayGain->setCurrentIndex(i); + break; + } + } } void PlaybackSettings::save() { - MPDConnection::self()->setCrossfade(crossfading->value()); + MPDConnection::self()->setCrossFade(crossfading->value()); + MPDConnection::self()->setReplayGain(replayGain->itemData(replayGain->currentIndex()).toString()); } diff --git a/gui/playbacksettings.ui b/gui/playbacksettings.ui index 358fa360f..10463db6f 100644 --- a/gui/playbacksettings.ui +++ b/gui/playbacksettings.ui @@ -37,6 +37,19 @@ + + + + Replay Gain: + + + replayGain + + + + + + diff --git a/lib/mpdconnection.cpp b/lib/mpdconnection.cpp index 3593081d0..6123d353f 100644 --- a/lib/mpdconnection.cpp +++ b/lib/mpdconnection.cpp @@ -361,15 +361,35 @@ void MPDConnection::playListInfo() /* * Playback commands */ -void MPDConnection::setCrossfade(const quint8 secs) +void MPDConnection::setCrossFade(const quint8 secs) { QByteArray data = "crossfade "; data += QByteArray::number(secs); if (!sendCommand(data).ok) { - qDebug("Couldn't go to next track"); + qDebug("Couldn't set xfade"); } } +void MPDConnection::setReplayGain(const QString &v) +{ + QByteArray data = "replay_gain_mode "; + data += v.toLatin1(); + if (!sendCommand(data).ok) { + qDebug("Couldn't set replay_gain_mode"); + } +} + +QString MPDConnection::getReplayGain() +{ + QStringList lines=QString(sendCommand("replay_gain_status").data).split('\n', QString::SkipEmptyParts); + + if (2==lines.count() && "OK"==lines[1] && lines[0].startsWith(QLatin1String("replay_gain_mode: "))) { + return lines[0].mid(18); + } + + return QString(); +} + void MPDConnection::goToNext() { if (!sendCommand("next").ok) { diff --git a/lib/mpdconnection.h b/lib/mpdconnection.h index c91d4bb0d..be5e2286e 100644 --- a/lib/mpdconnection.h +++ b/lib/mpdconnection.h @@ -71,7 +71,9 @@ public Q_SLOTS: void shuffle(); // Playback - void setCrossfade(const quint8 secs); + void setCrossFade(const quint8 secs); + void setReplayGain(const QString &v); + QString getReplayGain(); void goToNext(); void setPause(const bool toggle); void startPlayingSong(const quint32 song = 0); diff --git a/lib/mpdparseutils.cpp b/lib/mpdparseutils.cpp index 1c968ab6c..948f0d957 100644 --- a/lib/mpdparseutils.cpp +++ b/lib/mpdparseutils.cpp @@ -109,6 +109,7 @@ void MPDParseUtils::parseStatus(const QByteArray &data) QList lines = data.split('\n'); QList tokens; + qWarning() << data; status->acquireWriteLock(); int amountOfLines = lines.size(); @@ -143,7 +144,7 @@ void MPDParseUtils::parseStatus(const QByteArray &data) } else if (tokens.at(0) == "playlistqueue") { status->setPlaylistQueue(tokens.at(1).toInt()); } else if (tokens.at(0) == "xfade") { - status->setXfade(tokens.at(1).toInt()); + status->setCrossFade(tokens.at(1).toInt()); } else if (tokens.at(0) == "state") { if (tokens.at(1).contains("play")) { status->setState(MPDStatus::State_Playing); diff --git a/lib/mpdstatus.cpp b/lib/mpdstatus.cpp index 423b26979..4adedc008 100644 --- a/lib/mpdstatus.cpp +++ b/lib/mpdstatus.cpp @@ -115,7 +115,7 @@ qint32 MPDStatus::playlistQueue() return playlist_queue; } -qint32 MPDStatus::xfade() +qint32 MPDStatus::crossFade() { m_lock.lockForRead(); qint32 xfade = m_xfade; @@ -247,7 +247,7 @@ void MPDStatus::setPlaylistQueue(qint32 playlist_queue) m_playlist_queue = playlist_queue; } -void MPDStatus::setXfade(qint32 xfade) +void MPDStatus::setCrossFade(qint32 xfade) { m_xfade = xfade; } diff --git a/lib/mpdstatus.h b/lib/mpdstatus.h index 3203626d6..b272759db 100644 --- a/lib/mpdstatus.h +++ b/lib/mpdstatus.h @@ -48,7 +48,7 @@ public: quint32 playlist(); qint32 playlistLength(); qint32 playlistQueue(); - qint32 xfade(); + qint32 crossFade(); State state(); qint32 song(); qint32 songId(); @@ -69,7 +69,7 @@ public: void setPlaylist(quint32 playlist); void setPlaylistLength(qint32 playlist_length); void setPlaylistQueue(qint32 playlist_queue); - void setXfade(qint32 xfade); + void setCrossFade(qint32 xfade); void setState(State state); void setSong(qint32 song); void setSongId(qint32 song_id);