From 28d1bc1c6b043e8a830c581dec53ad9dc3fbc1a1 Mon Sep 17 00:00:00 2001
From: Daniel Brunner <0xFEEDC0DE64@gmail.com>
Date: Sun, 18 Nov 2018 15:27:07 +0100
Subject: [PATCH] Moved WebRadioDialog from heap to stack
---
translations/webradioplugin_de.ts | 30 ++++++++---------
translations/webradioplugin_en.ts | 30 ++++++++---------
webradiodialog.cpp | 56 +++++++++++++------------------
webradiodialog.h | 4 +--
webradioplugin.cpp | 16 +++++++--
5 files changed, 69 insertions(+), 67 deletions(-)
diff --git a/translations/webradioplugin_de.ts b/translations/webradioplugin_de.ts
index 4a2a2cc..9041744 100644
--- a/translations/webradioplugin_de.ts
+++ b/translations/webradioplugin_de.ts
@@ -24,68 +24,68 @@
Stop
-
+
Stopped
Gestoppt
-
+
Playing
Wird abgespielt
-
+
Paused
Pausiert
-
-
+
+
Unknown
Unbekannt
-
+
Unknown media
Unbekanntes Medium
-
+
No media
Kein Medium
-
+
Loading media...
Lade Medium...
-
+
Loaded media
Medium geladen
-
+
Stalled media
Medium angehalten
-
+
Buffering media
Puffere Medium
-
+
Buffered media
Medium gepuffert
-
+
End of media
Ende des Mediums
-
+
Invalid media
Ungültiges Medium
@@ -93,7 +93,7 @@
WebRadioPlugin
-
+
Play webradio
Webradio spielen
diff --git a/translations/webradioplugin_en.ts b/translations/webradioplugin_en.ts
index 858b50e..c3c65ce 100644
--- a/translations/webradioplugin_en.ts
+++ b/translations/webradioplugin_en.ts
@@ -24,68 +24,68 @@
-
+
Stopped
-
+
Playing
-
+
Paused
-
-
+
+
Unknown
-
+
Unknown media
-
+
No media
-
+
Loading media...
-
+
Loaded media
-
+
Stalled media
-
+
Buffering media
-
+
Buffered media
-
+
End of media
-
+
Invalid media
@@ -93,7 +93,7 @@
WebRadioPlugin
-
+
Play webradio
diff --git a/webradiodialog.cpp b/webradiodialog.cpp
index 236ee90..2805cc8 100644
--- a/webradiodialog.cpp
+++ b/webradiodialog.cpp
@@ -4,20 +4,20 @@
#include "mainwindow.h"
#include "zeiterfassungsettings.h"
-WebRadioDialog::WebRadioDialog(MainWindow &mainWindow) :
+WebRadioDialog::WebRadioDialog(QMediaPlayer &player, MainWindow &mainWindow) :
ZeiterfassungDialog(&mainWindow),
ui(new Ui::WebRadioDialog),
m_mainWindow(mainWindow),
- m_settings(m_mainWindow.settings())
+ m_settings(m_mainWindow.settings()),
+ m_player(player)
{
ui->setupUi(this);
- m_player = new QMediaPlayer(this);
- connect(m_player, &QMediaPlayer::stateChanged, this, &WebRadioDialog::stateChanged);
- connect(m_player, &QMediaPlayer::stateChanged, this, &WebRadioDialog::updateWidgets);
- connect(m_player, &QMediaPlayer::mediaStatusChanged, this, &WebRadioDialog::mediaStatusChanged);
- connect(m_player, &QMediaPlayer::mediaStatusChanged, this, &WebRadioDialog::updateWidgets);
- connect(m_player, static_cast(&QMediaPlayer::error), this, &WebRadioDialog::error);
+ connect(&m_player, &QMediaPlayer::stateChanged, this, &WebRadioDialog::stateChanged);
+ connect(&m_player, &QMediaPlayer::stateChanged, this, &WebRadioDialog::updateWidgets);
+ connect(&m_player, &QMediaPlayer::mediaStatusChanged, this, &WebRadioDialog::mediaStatusChanged);
+ connect(&m_player, &QMediaPlayer::mediaStatusChanged, this, &WebRadioDialog::updateWidgets);
+ connect(&m_player, static_cast(&QMediaPlayer::error), this, &WebRadioDialog::error);
for(const auto &url : m_settings.urls())
ui->comboBox->addItem(url, url);
@@ -31,28 +31,19 @@ WebRadioDialog::WebRadioDialog(MainWindow &mainWindow) :
this, &WebRadioDialog::updateWidgets);
connect(ui->pushButtonPlay, &QAbstractButton::pressed, this, &WebRadioDialog::play);
- connect(ui->pushButtonPause, &QAbstractButton::pressed, m_player, &QMediaPlayer::pause);
- connect(ui->pushButtonStop, &QAbstractButton::pressed, m_player, &QMediaPlayer::stop);
+ connect(ui->pushButtonPause, &QAbstractButton::pressed, &m_player, &QMediaPlayer::pause);
+ connect(ui->pushButtonStop, &QAbstractButton::pressed, &m_player, &QMediaPlayer::stop);
- m_player->setVolume(m_settings.volume());
- ui->horizontalSlider->setValue(m_player->volume());
+ ui->horizontalSlider->setValue(m_player.volume());
connect(ui->horizontalSlider, &QAbstractSlider::valueChanged, this, &WebRadioDialog::volumeChanged);
- stateChanged(m_player->state());
- mediaStatusChanged(m_player->mediaStatus());
- currentIndexChanged(ui->comboBox->currentIndex());
+ stateChanged(m_player.state());
+ mediaStatusChanged(m_player.mediaStatus());
updateWidgets();
}
WebRadioDialog::~WebRadioDialog()
{
- // To avoid crash on app close
- disconnect(m_player, &QMediaPlayer::stateChanged, this, &WebRadioDialog::stateChanged);
- disconnect(m_player, &QMediaPlayer::stateChanged, this, &WebRadioDialog::updateWidgets);
- disconnect(m_player, &QMediaPlayer::mediaStatusChanged, this, &WebRadioDialog::mediaStatusChanged);
- disconnect(m_player, &QMediaPlayer::mediaStatusChanged, this, &WebRadioDialog::updateWidgets);
- disconnect(m_player, static_cast(&QMediaPlayer::error), this, &WebRadioDialog::error);
-
delete ui;
}
@@ -96,9 +87,10 @@ void WebRadioDialog::error(QMediaPlayer::Error error)
void WebRadioDialog::currentIndexChanged(int index)
{
if(index == -1)
- m_player->setMedia(QMediaContent());
+ m_player.setMedia(QMediaContent());
else
- m_player->setMedia(QMediaContent(QUrl(ui->comboBox->currentData().toString())));
+ m_player.setMedia(QMediaContent(QUrl(ui->comboBox->currentData().toString())));
+ m_settings.setLastUrl(ui->comboBox->currentData().toString());
}
void WebRadioDialog::play()
@@ -106,23 +98,21 @@ void WebRadioDialog::play()
if(ui->comboBox->currentIndex() == -1)
return;
- m_settings.setLastUrl(ui->comboBox->currentData().toString());
-
- m_player->play();
+ m_player.play();
}
void WebRadioDialog::updateWidgets()
{
- ui->comboBox->setEnabled(m_player->state() != QMediaPlayer::PlayingState);
+ ui->comboBox->setEnabled(m_player.state() != QMediaPlayer::PlayingState);
ui->pushButtonPlay->setEnabled(ui->comboBox->currentIndex() > -1 &&
- (m_player->state() == QMediaPlayer::StoppedState || m_player->state() == QMediaPlayer::PausedState) &&
- (m_player->mediaStatus() == QMediaPlayer::LoadedMedia || m_player->mediaStatus() == QMediaPlayer::BufferedMedia));
- ui->pushButtonPause->setEnabled(m_player->state() == QMediaPlayer::PlayingState || m_player->state() == QMediaPlayer::PausedState);
- ui->pushButtonStop->setEnabled(m_player->state() == QMediaPlayer::PlayingState || m_player->state() == QMediaPlayer::PausedState);
+ (m_player.state() == QMediaPlayer::StoppedState || m_player.state() == QMediaPlayer::PausedState) &&
+ (m_player.mediaStatus() == QMediaPlayer::LoadedMedia || m_player.mediaStatus() == QMediaPlayer::BufferedMedia));
+ ui->pushButtonPause->setEnabled(m_player.state() == QMediaPlayer::PlayingState || m_player.state() == QMediaPlayer::PausedState);
+ ui->pushButtonStop->setEnabled(m_player.state() == QMediaPlayer::PlayingState || m_player.state() == QMediaPlayer::PausedState);
}
void WebRadioDialog::volumeChanged(int volume)
{
m_settings.setVolume(volume);
- m_player->setVolume(volume);
+ m_player.setVolume(volume);
}
diff --git a/webradiodialog.h b/webradiodialog.h
index b1c6c73..745a972 100644
--- a/webradiodialog.h
+++ b/webradiodialog.h
@@ -15,7 +15,7 @@ class WebRadioDialog : public ZeiterfassungDialog
Q_OBJECT
public:
- explicit WebRadioDialog(MainWindow &mainWindow);
+ explicit WebRadioDialog(QMediaPlayer &player, MainWindow &mainWindow);
~WebRadioDialog();
private Q_SLOTS:
@@ -34,5 +34,5 @@ private:
MainWindow &m_mainWindow;
WebRadioSettings m_settings;
- QMediaPlayer *m_player;
+ QMediaPlayer &m_player;
};
diff --git a/webradioplugin.cpp b/webradioplugin.cpp
index 44f5451..6c11504 100644
--- a/webradioplugin.cpp
+++ b/webradioplugin.cpp
@@ -4,6 +4,7 @@
#include
#include
#include
+#include
#include
#include
@@ -11,6 +12,7 @@
#include "mainwindow.h"
+#include "webradiosettings.h"
#include "webradiodialog.h"
#include "webradiosettingswidget.h"
@@ -34,9 +36,19 @@ WebRadioPlugin::WebRadioPlugin(QObject *parent) :
void WebRadioPlugin::attachTo(MainWindow &mainWindow)
{
- auto dialog = new WebRadioDialog(mainWindow);
+ auto mediaPlayer = [&mainWindow](){
+ auto mediaPlayer = new QMediaPlayer(&mainWindow);
+ WebRadioSettings settings(mainWindow.settings());
+ mediaPlayer->setVolume(settings.volume());
+ mediaPlayer->setMedia(QMediaContent(QUrl(settings.lastUrl())));
+ return mediaPlayer;
+ }();
+
mainWindow.menuTools()->addAction(QIcon(QStringLiteral(":/zeiterfassung/plugins/webradioplugin/images/web-radio.png")),
- tr("Play webradio"), dialog, &QWidget::show);
+ tr("Play webradio"), &mainWindow, [mediaPlayer, &mainWindow](){
+ WebRadioDialog dialog(*mediaPlayer, mainWindow);
+ dialog.exec();
+ });
}
SettingsWidget *WebRadioPlugin::settingsWidget(ZeiterfassungSettings &settings, QWidget *parent) const