Skip to content

Commit

Permalink
compile on qt5
Browse files Browse the repository at this point in the history
  • Loading branch information
martinrotter committed Nov 22, 2023
1 parent 5d96097 commit 49d5716
Show file tree
Hide file tree
Showing 7 changed files with 117 additions and 34 deletions.
28 changes: 14 additions & 14 deletions localization/rssguard_en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4504,47 +4504,47 @@ Login tokens expiration: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/librssguard/gui/reusable/mediaplayer.cpp" line="134"/>
<location filename="../src/librssguard/gui/reusable/mediaplayer.cpp" line="151"/>
<source>No media</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/librssguard/gui/reusable/mediaplayer.cpp" line="137"/>
<location filename="../src/librssguard/gui/reusable/mediaplayer.cpp" line="154"/>
<source>Loading...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/librssguard/gui/reusable/mediaplayer.cpp" line="140"/>
<location filename="../src/librssguard/gui/reusable/mediaplayer.cpp" line="157"/>
<source>Media loaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/librssguard/gui/reusable/mediaplayer.cpp" line="143"/>
<location filename="../src/librssguard/gui/reusable/mediaplayer.cpp" line="160"/>
<source>Media stalled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/librssguard/gui/reusable/mediaplayer.cpp" line="146"/>
<location filename="../src/librssguard/gui/reusable/mediaplayer.cpp" line="163"/>
<source>Buffering...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/librssguard/gui/reusable/mediaplayer.cpp" line="149"/>
<location filename="../src/librssguard/gui/reusable/mediaplayer.cpp" line="166"/>
<source>Loaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/librssguard/gui/reusable/mediaplayer.cpp" line="152"/>
<location filename="../src/librssguard/gui/reusable/mediaplayer.cpp" line="169"/>
<source>Ended</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/librssguard/gui/reusable/mediaplayer.cpp" line="155"/>
<location filename="../src/librssguard/gui/reusable/mediaplayer.cpp" line="172"/>
<source>Media is invalid</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/librssguard/gui/reusable/mediaplayer.cpp" line="158"/>
<location filename="../src/librssguard/gui/reusable/mediaplayer.cpp" line="175"/>
<source>Unknown</source>
<translation type="unfinished"></translation>
</message>
Expand Down Expand Up @@ -7963,12 +7963,12 @@ Unread news: %2</translation>
<translation>Downloads</translation>
</message>
<message>
<location filename="../src/librssguard/gui/tabwidget.cpp" line="232"/>
<location filename="../src/librssguard/gui/tabwidget.cpp" line="237"/>
<source>Media player</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/librssguard/gui/tabwidget.cpp" line="257"/>
<location filename="../src/librssguard/gui/tabwidget.cpp" line="262"/>
<source>Web browser</source>
<translation>Web browser</translation>
</message>
Expand Down Expand Up @@ -8497,17 +8497,17 @@ Last login on: %4</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/librssguard/gui/webviewers/webengine/webengineviewer.cpp" line="104"/>
<location filename="../src/librssguard/gui/webviewers/webengine/webengineviewer.cpp" line="105"/>
<source>Open link as audio/video</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/librssguard/gui/webviewers/webengine/webengineviewer.cpp" line="113"/>
<location filename="../src/librssguard/gui/webviewers/webengine/webengineviewer.cpp" line="115"/>
<source>Open with external tool</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/librssguard/gui/webviewers/webengine/webengineviewer.cpp" line="132"/>
<location filename="../src/librssguard/gui/webviewers/webengine/webengineviewer.cpp" line="134"/>
<source>No external tools activated</source>
<translation type="unfinished"></translation>
</message>
Expand Down
10 changes: 8 additions & 2 deletions src/librssguard/core/feeddownloader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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"));
Expand Down
4 changes: 4 additions & 0 deletions src/librssguard/gui/notifications/articlelistnotification.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,10 @@ void ArticleListNotification::loadResults(const QHash<Feed*, QList<Message>>& ne
});

for (Feed* fd : ks) {
if (fd->isQuiet()) {
continue;
}

m_ui.m_cmbFeeds->addItem(fd->sanitizedTitle(), QVariant::fromValue(fd));
}
}
Expand Down
75 changes: 63 additions & 12 deletions src/librssguard/gui/reusable/mediaplayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand All @@ -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 {
Expand All @@ -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() {
Expand All @@ -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) {
Expand All @@ -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;
Expand All @@ -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);

Expand All @@ -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:
Expand Down Expand Up @@ -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<QMediaPlayer::Error>::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);

Expand Down
21 changes: 18 additions & 3 deletions src/librssguard/gui/reusable/mediaplayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,14 @@

#include <QMediaPlayer>

#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 {
Expand All @@ -29,26 +37,33 @@ 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
// for "int" data type, therefore we seek by second.
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);

signals:
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();
Expand Down
5 changes: 5 additions & 0 deletions src/librssguard/gui/tabwidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<const QUrl&>::of(&DownloadManager::download));

int index = addTab(player,
qApp->icons()->fromTheme(QSL("player_play"), QSL("media-playback-start")),
tr("Media player"),
Expand Down
8 changes: 5 additions & 3 deletions src/librssguard/gui/webviewers/webengine/webengineviewer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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()) {
Expand Down

0 comments on commit 49d5716

Please sign in to comment.