Files

119 lines
4.8 KiB
C++

#include "webradiodialog.h"
#include "ui_webradiodialog.h"
#include "mainwindow.h"
#include "zeiterfassungsettings.h"
WebRadioDialog::WebRadioDialog(QMediaPlayer &player, MainWindow &mainWindow) :
ZeiterfassungDialog(&mainWindow),
ui(new Ui::WebRadioDialog),
m_mainWindow(mainWindow),
m_settings(m_mainWindow.settings()),
m_player(player)
{
ui->setupUi(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<void(QMediaPlayer::*)(QMediaPlayer::Error)>(&QMediaPlayer::error), this, &WebRadioDialog::error);
for(const auto &url : m_settings.urls())
ui->comboBox->addItem(url, url);
ui->comboBox->setCurrentIndex(ui->comboBox->findData(m_settings.lastUrl()));
connect(ui->comboBox, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
this, &WebRadioDialog::currentIndexChanged);
connect(ui->comboBox, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
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);
ui->horizontalSlider->setValue(m_player.volume());
connect(ui->horizontalSlider, &QAbstractSlider::valueChanged, this, &WebRadioDialog::volumeChanged);
stateChanged(m_player.state());
mediaStatusChanged(m_player.mediaStatus());
updateWidgets();
}
WebRadioDialog::~WebRadioDialog()
{
delete ui;
}
void WebRadioDialog::stateChanged(QMediaPlayer::State newState)
{
switch(newState)
{
case QMediaPlayer::StoppedState: ui->labelState->setText(tr("Stopped")); break;
case QMediaPlayer::PlayingState: ui->labelState->setText(tr("Playing")); break;
case QMediaPlayer::PausedState: ui->labelState->setText(tr("Paused")); break;
default:
qWarning() << "unknown state" << newState;
ui->labelState->setText(tr("Unknown"));
}
}
void WebRadioDialog::mediaStatusChanged(QMediaPlayer::MediaStatus status)
{
switch(status)
{
case QMediaPlayer::UnknownMediaStatus: ui->labelMediaStatus->setText(tr("Unknown media")); break;
case QMediaPlayer::NoMedia: ui->labelMediaStatus->setText(tr("No media")); break;
case QMediaPlayer::LoadingMedia: ui->labelMediaStatus->setText(tr("Loading media...")); break;
case QMediaPlayer::LoadedMedia: ui->labelMediaStatus->setText(tr("Loaded media")); break;
case QMediaPlayer::StalledMedia: ui->labelMediaStatus->setText(tr("Stalled media")); break;
case QMediaPlayer::BufferingMedia: ui->labelMediaStatus->setText(tr("Buffering media")); break;
case QMediaPlayer::BufferedMedia: ui->labelMediaStatus->setText(tr("Buffered media")); break;
case QMediaPlayer::EndOfMedia: ui->labelMediaStatus->setText(tr("End of media")); break;
case QMediaPlayer::InvalidMedia: ui->labelMediaStatus->setText(tr("Invalid media")); break;
default:
qWarning() << "unknown mediaStatus" << status;
ui->labelMediaStatus->setText(tr("Unknown"));
}
}
void WebRadioDialog::error(QMediaPlayer::Error error)
{
qWarning() << error;
}
void WebRadioDialog::currentIndexChanged(int index)
{
if(index == -1)
m_player.setMedia(QMediaContent());
else
m_player.setMedia(QMediaContent(QUrl(ui->comboBox->currentData().toString())));
m_settings.setLastUrl(ui->comboBox->currentData().toString());
}
void WebRadioDialog::play()
{
if(ui->comboBox->currentIndex() == -1)
return;
m_player.play();
}
void WebRadioDialog::updateWidgets()
{
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);
}
void WebRadioDialog::volumeChanged(int volume)
{
m_settings.setVolume(volume);
m_player.setVolume(volume);
}