From cede1ab6a74b2ede91fc27f4791542dbaaeb0236 Mon Sep 17 00:00:00 2001 From: Carl Schwan Date: Sat, 24 Jul 2021 23:08:00 +0200 Subject: [PATCH] Overhaul SoundTestWidgets * Don't make it possible to play two sounds at the same time * Make it possible to pause the audio playing * Use a more correct list of available audio files --- src/filter/soundtestwidget.cpp | 31 ++++++++++++++++++++++++------- src/filter/soundtestwidget.h | 6 ++++++ 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/filter/soundtestwidget.cpp b/src/filter/soundtestwidget.cpp index 5f7ea40..bee7ea6 100644 --- a/src/filter/soundtestwidget.cpp +++ b/src/filter/soundtestwidget.cpp @@ -16,6 +16,7 @@ #include #include +#include #include using namespace MailCommon; @@ -27,7 +28,7 @@ SoundTestWidget::SoundTestWidget(QWidget *parent) layout->setContentsMargins(0, 0, 0, 0); m_playButton = new QPushButton(this); - m_playButton->setIcon(QIcon::fromTheme(QStringLiteral("arrow-right"))); + m_playButton->setIcon(QIcon::fromTheme(QStringLiteral("media-playback-start"))); m_playButton->setToolTip(i18n("Play")); layout->addWidget(m_playButton); @@ -62,9 +63,7 @@ void SoundTestWidget::openSoundDialog(KUrlRequester *) QFileDialog *fileDialog = m_urlRequester->fileDialog(); fileDialog->setWindowTitle(i18nc("@title:window", "Select Sound File")); - const QStringList filters{QStringLiteral("audio/x-wav"), QStringLiteral("application/ogg"), QStringLiteral("audio/x-adpcm")}; - - m_urlRequester->setMimeTypeFilters(filters); + m_urlRequester->setMimeTypeFilters(Phonon::BackendCapabilities::availableMimeTypes()); const QStringList soundDirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("sound/"), QStandardPaths::LocateDirectory); @@ -93,9 +92,27 @@ void SoundTestWidget::playSound() const QString file = QStringLiteral("file:"); const QString play = (parameter.startsWith(file) ? parameter.mid(file.length()) : parameter); - Phonon::MediaObject *player = Phonon::createPlayer(Phonon::NotificationCategory, QUrl::fromLocalFile(play)); - player->play(); - connect(player, &Phonon::MediaObject::finished, player, &Phonon::MediaObject::deleteLater); + if (m_player) { + if (m_player->state() == Phonon::PlayingState) { + m_player->pause(); + } else { + m_player->setCurrentSource(QUrl::fromLocalFile(play)); + m_player->play(); + } + } else { + m_player = Phonon::createPlayer(Phonon::NotificationCategory, QUrl::fromLocalFile(play)); + m_player->setParent(this); + m_player->play(); + connect(m_player, &Phonon::MediaObject::stateChanged, this, [this](Phonon::State newState, Phonon::State) { + if (newState == Phonon::PlayingState) { + m_playButton->setIcon(QIcon::fromTheme(QStringLiteral("media-playback-pause"))); + m_playButton->setToolTip(i18n("Pause")); + } else { + m_playButton->setIcon(QIcon::fromTheme(QStringLiteral("media-playback-start"))); + m_playButton->setToolTip(i18n("Play")); + } + }); + } } QString SoundTestWidget::url() const diff --git a/src/filter/soundtestwidget.h b/src/filter/soundtestwidget.h index 5b32263..ec857ad 100644 --- a/src/filter/soundtestwidget.h +++ b/src/filter/soundtestwidget.h @@ -10,6 +10,11 @@ #include +namespace Phonon +{ +class MediaObject; +} + class QPushButton; class KUrlRequester; @@ -69,6 +74,7 @@ private: void slotUrlChanged(const QString &); KUrlRequester *m_urlRequester = nullptr; QPushButton *m_playButton = nullptr; + Phonon::MediaObject *m_player = nullptr; }; }