From 49d571678567eb55454609b9b810adc6afabe7c0 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Wed, 22 Nov 2023 10:20:19 +0100 Subject: [PATCH] compile on qt5 --- localization/rssguard_en.ts | 28 +++---- src/librssguard/core/feeddownloader.cpp | 10 ++- .../notifications/articlelistnotification.cpp | 4 + src/librssguard/gui/reusable/mediaplayer.cpp | 75 ++++++++++++++++--- src/librssguard/gui/reusable/mediaplayer.h | 21 +++++- src/librssguard/gui/tabwidget.cpp | 5 ++ .../webviewers/webengine/webengineviewer.cpp | 8 +- 7 files changed, 117 insertions(+), 34 deletions(-) diff --git a/localization/rssguard_en.ts b/localization/rssguard_en.ts index c20512f8f..6796d6d63 100644 --- a/localization/rssguard_en.ts +++ b/localization/rssguard_en.ts @@ -4504,47 +4504,47 @@ Login tokens expiration: %2 - + No media - + Loading... - + Media loaded - + Media stalled - + Buffering... - + Loaded - + Ended - + Media is invalid - + Unknown @@ -7963,12 +7963,12 @@ Unread news: %2 Downloads - + Media player - + Web browser Web browser @@ -8497,17 +8497,17 @@ Last login on: %4 - + Open link as audio/video - + Open with external tool - + No external tools activated diff --git a/src/librssguard/core/feeddownloader.cpp b/src/librssguard/core/feeddownloader.cpp index 2727e8167..e26ec4cef 100644 --- a/src/librssguard/core/feeddownloader.cpp +++ b/src/librssguard/core/feeddownloader.cpp @@ -542,8 +542,14 @@ QString FeedDownloadResults::overview(int how_many_feeds) const { QStringList result; for (int i = 0, number_items_output = qMin(how_many_feeds, m_updatedFeeds.size()); i < number_items_output; i++) { - result.append(m_updatedFeeds.keys().at(i)->title() + QSL(": ") + - QString::number(m_updatedFeeds.value(m_updatedFeeds.keys().at(i)).size())); + auto* fd = m_updatedFeeds.keys().at(i); + auto msgs = m_updatedFeeds.value(fd); + + if (fd->isQuiet()) { + continue; + } + + result.append(fd->title() + QSL(": ") + QString::number(msgs.size())); } QString res_str = result.join(QSL("\n")); diff --git a/src/librssguard/gui/notifications/articlelistnotification.cpp b/src/librssguard/gui/notifications/articlelistnotification.cpp index f87941367..5a5092573 100644 --- a/src/librssguard/gui/notifications/articlelistnotification.cpp +++ b/src/librssguard/gui/notifications/articlelistnotification.cpp @@ -83,6 +83,10 @@ void ArticleListNotification::loadResults(const QHash>& ne }); for (Feed* fd : ks) { + if (fd->isQuiet()) { + continue; + } + m_ui.m_cmbFeeds->addItem(fd->sanitizedTitle(), QVariant::fromValue(fd)); } } diff --git a/src/librssguard/gui/reusable/mediaplayer.cpp b/src/librssguard/gui/reusable/mediaplayer.cpp index 5552908c3..5c8f2bd35 100644 --- a/src/librssguard/gui/reusable/mediaplayer.cpp +++ b/src/librssguard/gui/reusable/mediaplayer.cpp @@ -17,12 +17,15 @@ MediaPlayer::MediaPlayer(QWidget* parent) m_ui.setupUi(this); m_player->setVideoOutput(m_ui.m_video); + +#if QT_VERSION_MAJOR == 6 m_player->setAudioOutput(m_audio); +#endif setupIcons(); createConnections(); - onPlaybackStateChanged(QMediaPlayer::PlaybackState::StoppedState); + onPlaybackStateChanged(QMediaPlayer::PLAYBACK_STATE::StoppedState); onMediaStatusChanged(QMediaPlayer::MediaStatus::NoMedia); } @@ -33,14 +36,24 @@ WebBrowser* MediaPlayer::webBrowser() const { } void MediaPlayer::playUrl(const QString& url) { - setVolume(m_ui.m_slidVolume->value()); + if (m_muted) { + muteUnmute(); + } + else { + setVolume(m_ui.m_slidVolume->value()); + } +#if QT_VERSION_MAJOR == 6 m_player->setSource(url); +#else + m_player->setMedia(QUrl(url)); +#endif + m_player->play(); } void MediaPlayer::playPause() { - if (m_player->playbackState() != QMediaPlayer::PlaybackState::PlayingState) { + if (m_player->PLAYBACK_STATE_METHOD() != QMediaPlayer::PLAYBACK_STATE::PlayingState) { m_player->play(); } else { @@ -53,7 +66,13 @@ void MediaPlayer::stop() { } void MediaPlayer::download() { - emit urlDownloadRequested(m_player->source()); + emit urlDownloadRequested( +#if QT_VERSION_MAJOR == 6 + m_player->source() +#else + m_player->media().request().url() +#endif + ); } void MediaPlayer::muteUnmute() { @@ -64,12 +83,17 @@ void MediaPlayer::muteUnmute() { } void MediaPlayer::setVolume(int volume) { - m_player->audioOutput()->setVolume(volume / 100.0f); +#if QT_VERSION_MAJOR == 6 + m_player->audioOutput()->setVolume(convertSliderVolume(volume)); +#else + m_player->setVolume(volume); +#endif + m_ui.m_btnVolume->setIcon(volume <= 0 ? m_iconMute : m_iconUnmute); } void MediaPlayer::seek(int position) { - m_player->setPosition(position * 1000); + m_player->setPosition(convertSliderProgress(position)); } void MediaPlayer::onDurationChanged(qint64 duration) { @@ -95,19 +119,19 @@ void MediaPlayer::onMediaStatusChanged(QMediaPlayer::MediaStatus status) { m_ui.m_lblStatus->setText(mediaStatusToString(status)); } -void MediaPlayer::onPlaybackStateChanged(QMediaPlayer::PlaybackState state) { +void MediaPlayer::onPlaybackStateChanged(QMediaPlayer::PLAYBACK_STATE state) { switch (state) { - case QMediaPlayer::StoppedState: + case QMediaPlayer::PLAYBACK_STATE::StoppedState: m_ui.m_btnPlayPause->setIcon(m_iconPlay); m_ui.m_btnStop->setEnabled(false); break; - case QMediaPlayer::PlayingState: + case QMediaPlayer::PLAYBACK_STATE::PlayingState: m_ui.m_btnPlayPause->setIcon(m_iconPause); m_ui.m_btnStop->setEnabled(true); break; - case QMediaPlayer::PausedState: + case QMediaPlayer::PLAYBACK_STATE::PausedState: m_ui.m_btnPlayPause->setIcon(m_iconPlay); m_ui.m_btnStop->setEnabled(true); break; @@ -116,10 +140,14 @@ void MediaPlayer::onPlaybackStateChanged(QMediaPlayer::PlaybackState state) { void MediaPlayer::onPositionChanged(qint64 position) { m_ui.m_slidProgress->blockSignals(true); - m_ui.m_slidProgress->setValue(position / 1000); + m_ui.m_slidProgress->setValue(convertToSliderProgress(position)); m_ui.m_slidProgress->blockSignals(false); } +int MediaPlayer::convertToSliderProgress(qint64 player_progress) const { + return player_progress / 1000; +} + void MediaPlayer::onSeekableChanged(bool seekable) { m_ui.m_slidProgress->setEnabled(seekable); @@ -128,6 +156,14 @@ void MediaPlayer::onSeekableChanged(bool seekable) { } } +float MediaPlayer::convertSliderVolume(int slider_volume) const { + return slider_volume / 100.0f; +} + +qint64 MediaPlayer::convertSliderProgress(int slider_progress) const { + return qint64(slider_progress) * qint64(1000); +} + QString MediaPlayer::mediaStatusToString(QMediaPlayer::MediaStatus status) const { switch (status) { case QMediaPlayer::NoMedia: @@ -171,11 +207,26 @@ void MediaPlayer::setupIcons() { void MediaPlayer::createConnections() { connect(m_player, &QMediaPlayer::durationChanged, this, &MediaPlayer::onDurationChanged); + +#if QT_VERSION_MAJOR == 6 connect(m_player, &QMediaPlayer::errorOccurred, this, &MediaPlayer::onErrorOccurred); +#else + connect(m_player, QOverload::of(&QMediaPlayer::error), this, [this](QMediaPlayer::Error error) { + onErrorOccurred(error); + }); +#endif + +#if QT_VERSION_MAJOR == 6 connect(m_player, &QMediaPlayer::hasAudioChanged, this, &MediaPlayer::onAudioAvailable); connect(m_player, &QMediaPlayer::hasVideoChanged, this, &MediaPlayer::onVideoAvailable); - connect(m_player, &QMediaPlayer::mediaStatusChanged, this, &MediaPlayer::onMediaStatusChanged); connect(m_player, &QMediaPlayer::playbackStateChanged, this, &MediaPlayer::onPlaybackStateChanged); +#else + connect(m_player, &QMediaPlayer::audioAvailableChanged, this, &MediaPlayer::onAudioAvailable); + connect(m_player, &QMediaPlayer::videoAvailableChanged, this, &MediaPlayer::onVideoAvailable); + connect(m_player, &QMediaPlayer::stateChanged, this, &MediaPlayer::onPlaybackStateChanged); +#endif + + connect(m_player, &QMediaPlayer::mediaStatusChanged, this, &MediaPlayer::onMediaStatusChanged); connect(m_player, &QMediaPlayer::positionChanged, this, &MediaPlayer::onPositionChanged); connect(m_player, &QMediaPlayer::seekableChanged, this, &MediaPlayer::onSeekableChanged); diff --git a/src/librssguard/gui/reusable/mediaplayer.h b/src/librssguard/gui/reusable/mediaplayer.h index c19d531f9..86ac83ae0 100644 --- a/src/librssguard/gui/reusable/mediaplayer.h +++ b/src/librssguard/gui/reusable/mediaplayer.h @@ -9,6 +9,14 @@ #include +#if QT_VERSION_MAJOR == 6 +#define PLAYBACK_STATE PlaybackState +#define PLAYBACK_STATE_METHOD playbackState +#else +#define PLAYBACK_STATE State +#define PLAYBACK_STATE_METHOD state +#endif + class QAudioOutput; class MediaPlayer : public TabContent { @@ -29,7 +37,8 @@ class MediaPlayer : public TabContent { void download(); void muteUnmute(); - // NOTE: Volume is from 0 to 100. + // NOTE: Volume is from 0 to 100 taken directly from slider or + // elsewhere. void setVolume(int volume); // NOTE: Media is seekable in miliseconds, but that is too muc @@ -37,11 +46,13 @@ class MediaPlayer : public TabContent { void seek(int position); void onDurationChanged(qint64 duration); - void onErrorOccurred(QMediaPlayer::Error error, const QString& error_string); + void onErrorOccurred(QMediaPlayer::Error error, const QString& error_string = {}); void onAudioAvailable(bool available); void onVideoAvailable(bool available); void onMediaStatusChanged(QMediaPlayer::MediaStatus status); - void onPlaybackStateChanged(QMediaPlayer::PlaybackState state); + + void onPlaybackStateChanged(QMediaPlayer::PLAYBACK_STATE state); + void onPositionChanged(qint64 position); void onSeekableChanged(bool seekable); @@ -49,6 +60,10 @@ class MediaPlayer : public TabContent { void urlDownloadRequested(const QUrl& url); private: + float convertSliderVolume(int slider_volume) const; + qint64 convertSliderProgress(int slider_progress) const; + int convertToSliderProgress(qint64 player_progress) const; + QString mediaStatusToString(QMediaPlayer::MediaStatus status) const; void setupIcons(); diff --git a/src/librssguard/gui/tabwidget.cpp b/src/librssguard/gui/tabwidget.cpp index bce5ec166..c79756c38 100644 --- a/src/librssguard/gui/tabwidget.cpp +++ b/src/librssguard/gui/tabwidget.cpp @@ -227,6 +227,11 @@ int TabWidget::addEmptyBrowser() { int TabWidget::addMediaPlayer(const QString& url, bool make_active) { auto* player = new MediaPlayer(this); + connect(player, + &MediaPlayer::urlDownloadRequested, + qApp->downloadManager(), + QOverload::of(&DownloadManager::download)); + int index = addTab(player, qApp->icons()->fromTheme(QSL("player_play"), QSL("media-playback-start")), tr("Media player"), diff --git a/src/librssguard/gui/webviewers/webengine/webengineviewer.cpp b/src/librssguard/gui/webviewers/webengine/webengineviewer.cpp index 866898ef0..513d4f27a 100644 --- a/src/librssguard/gui/webviewers/webengine/webengineviewer.cpp +++ b/src/librssguard/gui/webviewers/webengine/webengineviewer.cpp @@ -101,9 +101,11 @@ void WebEngineViewer::contextMenuEvent(QContextMenuEvent* event) { } }); - menu->addAction(qApp->icons()->fromTheme(QSL("document-open")), tr("Open link as audio/video"), [link_url]() { - qApp->mainForm()->tabWidget()->addMediaPlayer(link_url, true); - }); + menu->addAction(qApp->icons()->fromTheme(QSL("player_play"), QSL("media-playback-start")), + tr("Open link as audio/video"), + [link_url]() { + qApp->mainForm()->tabWidget()->addMediaPlayer(link_url, true); + }); } if (menu_data.mediaUrl().isValid() || menu_data.linkUrl().isValid()) {