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