From c3c1b486ba193b4d415863e77332ee92b94d27f4 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Fri, 22 Dec 2017 20:14:01 +0100 Subject: [PATCH] WebRadioDialog now stores last used radio station in config --- plugins/webradioplugin/webradiodialog.cpp | 67 ++++++--- plugins/webradioplugin/webradiodialog.h | 11 +- plugins/webradioplugin/webradiodialog.ui | 169 ++++++++++------------ plugins/webradioplugin/webradioplugin.cpp | 2 +- 4 files changed, 134 insertions(+), 115 deletions(-) diff --git a/plugins/webradioplugin/webradiodialog.cpp b/plugins/webradioplugin/webradiodialog.cpp index 39dd264..81dcab3 100644 --- a/plugins/webradioplugin/webradiodialog.cpp +++ b/plugins/webradioplugin/webradiodialog.cpp @@ -1,16 +1,22 @@ #include "webradiodialog.h" #include "ui_webradiodialog.h" -#include +#include "mainwindow.h" +#include "zeiterfassungsettings.h" -WebRadioDialog::WebRadioDialog(QWidget *parent) : - QDialog(parent), +WebRadioDialog::WebRadioDialog(MainWindow &mainWindow) : + QDialog(&mainWindow), ui(new Ui::WebRadioDialog), + m_mainWindow(mainWindow), m_player(new QMediaPlayer(this)) { ui->setupUi(this); - for(const auto &url : QStringList { + connect(m_player, &QMediaPlayer::stateChanged, this, &WebRadioDialog::stateChanged); + connect(m_player, &QMediaPlayer::mediaStatusChanged, this, &WebRadioDialog::mediaStatusChanged); + connect(m_player, static_cast(&QMediaPlayer::error), this, &WebRadioDialog::error); + + for(const auto &url : m_mainWindow.settings().value(QStringLiteral("WebRadioPlugin/urls"), QStringList { QStringLiteral("http://stream.drumandbass.fm:9002"), QStringLiteral("http://stream.trap.fm:6002"), QStringLiteral("http://stream.dubbase.fm:7002"), @@ -22,27 +28,24 @@ WebRadioDialog::WebRadioDialog(QWidget *parent) : QStringLiteral("http://lw1.mp3.tb-group.fm/ct.mp3"), QStringLiteral("http://lw1.mp3.tb-group.fm/clt.mp3"), QStringLiteral("https://live.helsinki.at:8088/live160.ogg") - }) + }).toStringList()) { - ui->comboBox->addItem(url); + ui->comboBox->addItem(url, url); } - connect(ui->comboBox, &QComboBox::currentTextChanged, this, [=](const QString &url){ m_player->setMedia(QMediaContent(QUrl(url))); }); + auto lastUrl = m_mainWindow.settings().value(QStringLiteral("WebRadioPlugin/lastUrl")).toString(); + qDebug() << lastUrl; + auto index = ui->comboBox->findData(lastUrl); + qDebug() << index; + ui->comboBox->setCurrentIndex(index); - Q_EMIT ui->comboBox->currentTextChanged(ui->comboBox->currentText()); - - connect(ui->pushButtonPlay, &QAbstractButton::pressed, m_player, &QMediaPlayer::play); + 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->horizontalSlider, &QAbstractSlider::valueChanged, m_player, &QMediaPlayer::setVolume); - connect(m_player, &QMediaPlayer::stateChanged, [](QMediaPlayer::State newState){ qDebug() << newState; }); - connect(m_player, &QMediaPlayer::mediaStatusChanged, [](QMediaPlayer::MediaStatus status){ qDebug() << status; }); - connect(m_player, static_cast(&QMediaPlayer::error), - [](QMediaPlayer::Error error){ qDebug() << error; }); - connect(m_player, SIGNAL(volumeChanged(int)), ui->horizontalSlider, SLOT(setValue(int))); - - Q_EMIT m_player->volumeChanged(m_player->volume()); + m_player->setVolume(m_mainWindow.settings().value(QStringLiteral("WebRadioPlugin/volume"), 100).toInt()); + ui->horizontalSlider->setValue(m_player->volume()); + connect(ui->horizontalSlider, &QAbstractSlider::valueChanged, this, &WebRadioDialog::volumeChanged); } WebRadioDialog::~WebRadioDialog() @@ -50,7 +53,35 @@ WebRadioDialog::~WebRadioDialog() delete ui; } +void WebRadioDialog::stateChanged(QMediaPlayer::State newState) +{ + qDebug() << newState; +} + +void WebRadioDialog::mediaStatusChanged(QMediaPlayer::MediaStatus status) +{ + qDebug() << status; +} + +void WebRadioDialog::error(QMediaPlayer::Error error) +{ + qDebug() << error; +} + void WebRadioDialog::play() { + qDebug() << "called"; + if(ui->comboBox->currentIndex() == -1) + return; + m_mainWindow.settings().setValue(QStringLiteral("WebRadioPlugin/lastUrl"), ui->comboBox->currentData().toString()); + + m_player->setMedia(QMediaContent(QUrl(ui->comboBox->currentData().toString()))); + m_player->play(); +} + +void WebRadioDialog::volumeChanged(int volume) +{ + m_mainWindow.settings().setValue(QStringLiteral("WebRadioPlugin/volume"), volume); + m_player->setVolume(volume); } diff --git a/plugins/webradioplugin/webradiodialog.h b/plugins/webradioplugin/webradiodialog.h index 2bdd804..6a2d1df 100644 --- a/plugins/webradioplugin/webradiodialog.h +++ b/plugins/webradioplugin/webradiodialog.h @@ -2,8 +2,9 @@ #define WEBRADIODIALOG_H #include +#include -class QMediaPlayer; +class MainWindow; namespace Ui { class WebRadioDialog; } @@ -12,15 +13,21 @@ class WebRadioDialog : public QDialog Q_OBJECT public: - explicit WebRadioDialog(QWidget *parent = 0); + explicit WebRadioDialog(MainWindow &mainWindow); ~WebRadioDialog(); private Q_SLOTS: + void stateChanged(QMediaPlayer::State newState); + void mediaStatusChanged(QMediaPlayer::MediaStatus status); + void error(QMediaPlayer::Error error); + + void volumeChanged(int volume); void play(); private: Ui::WebRadioDialog *ui; + MainWindow &m_mainWindow; QMediaPlayer *m_player; }; diff --git a/plugins/webradioplugin/webradiodialog.ui b/plugins/webradioplugin/webradiodialog.ui index 8d7d9eb..07f2387 100644 --- a/plugins/webradioplugin/webradiodialog.ui +++ b/plugins/webradioplugin/webradiodialog.ui @@ -6,104 +6,85 @@ 0 0 - 539 - 300 + 494 + 155 - Dialog + Radio - - - - 30 - 240 - 341 - 32 - - - - Qt::Horizontal - - - QDialogButtonBox::Close - - - - - - 20 - 60 - 131 - 51 - - - - play() - - - - - - 50 - 160 - 351 - 23 - - - - 24 - - - - - - 160 - 60 - 131 - 51 - - - - pause() - - - - - - 300 - 60 - 131 - 51 - - - - stop() - - - - - - 270 - 130 - 160 - 16 - - - - Qt::Horizontal - - - - - - 40 - 20 - 271 - 25 - - - + + + + + + + + + + + 0 + 50 + + + + play() + + + + + + + + 0 + 50 + + + + pause() + + + + + + + + 0 + 50 + + + + stop() + + + + + + + Qt::Horizontal + + + + + + + + + TextLabel + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Close + + + + diff --git a/plugins/webradioplugin/webradioplugin.cpp b/plugins/webradioplugin/webradioplugin.cpp index d6bd079..9a749d7 100644 --- a/plugins/webradioplugin/webradioplugin.cpp +++ b/plugins/webradioplugin/webradioplugin.cpp @@ -33,7 +33,7 @@ WebRadioPlugin::WebRadioPlugin(QObject *parent) : void WebRadioPlugin::attachTo(MainWindow &mainWindow) { - auto dialog = new WebRadioDialog(&mainWindow); + auto dialog = new WebRadioDialog(mainWindow); mainWindow.menuTools()->addAction(QIcon(QStringLiteral(":/zeiterfassung/plugins/webradioplugin/images/web-radio.png")), tr("Play webradio"), dialog, &QWidget::show); }