Add function to display progress on taskbar

This commit is contained in:
Adam Hill 2024-02-03 19:03:21 -08:00
parent 42d6c79710
commit 04ceec0739
2 changed files with 29 additions and 0 deletions

View File

@ -73,6 +73,8 @@
#include <QToolButton> #include <QToolButton>
#include <QCheckBox> #include <QCheckBox>
#include <QClipboard> #include <QClipboard>
#include <QDBusConnection>
#include <QDBusMessage>
#include "core/logging.h" #include "core/logging.h"
@ -1269,6 +1271,9 @@ void MainWindow::Exit() {
return; // Don't quit the application now: wait for the fadeout finished signal return; // Don't quit the application now: wait for the fadeout finished signal
} }
} }
UpdateTaskbarProgress(false, 0, 0);
DoExit(); DoExit();
} }
@ -1321,6 +1326,8 @@ void MainWindow::MediaStopped() {
tray_icon_->SetProgress(0); tray_icon_->SetProgress(0);
tray_icon_->SetStopped(); tray_icon_->SetStopped();
UpdateTaskbarProgress(false, 0, 0);
song_playing_ = Song(); song_playing_ = Song();
song_ = Song(); song_ = Song();
album_cover_ = AlbumCoverImageResult(); album_cover_ = AlbumCoverImageResult();
@ -1397,6 +1404,8 @@ void MainWindow::SongChanged(const Song &song) {
setWindowTitle(song.PrettyTitleWithArtist()); setWindowTitle(song.PrettyTitleWithArtist());
tray_icon_->SetProgress(0); tray_icon_->SetProgress(0);
UpdateTaskbarProgress(false, 0, 0);
SendNowPlaying(); SendNowPlaying();
const bool enable_change_art = song.is_collection_song() && !song.effective_albumartist().isEmpty() && !song.album().isEmpty(); const bool enable_change_art = song.is_collection_song() && !song.effective_albumartist().isEmpty() && !song.album().isEmpty();
@ -1686,6 +1695,8 @@ void MainWindow::Seeked(const qint64 microseconds) {
const qint64 length = app_->player()->GetCurrentItem()->Metadata().length_nanosec() / kNsecPerSec; const qint64 length = app_->player()->GetCurrentItem()->Metadata().length_nanosec() / kNsecPerSec;
tray_icon_->SetProgress(static_cast<int>(static_cast<double>(position) / static_cast<double>(length) * 100.0)); tray_icon_->SetProgress(static_cast<int>(static_cast<double>(position) / static_cast<double>(length) * 100.0));
UpdateTaskbarProgress(true, position, length);
} }
void MainWindow::UpdateTrackPosition() { void MainWindow::UpdateTrackPosition() {
@ -1700,6 +1711,8 @@ void MainWindow::UpdateTrackPosition() {
// Update the tray icon every 10 seconds // Update the tray icon every 10 seconds
if (position % 10 == 0) tray_icon_->SetProgress(static_cast<int>(static_cast<double>(position) / static_cast<double>(length) * 100.0)); if (position % 10 == 0) tray_icon_->SetProgress(static_cast<int>(static_cast<double>(position) / static_cast<double>(length) * 100.0));
UpdateTaskbarProgress(true, position, length);
// Send Scrobble // Send Scrobble
if (app_->scrobbler()->enabled() && item->Metadata().is_metadata_good()) { if (app_->scrobbler()->enabled() && item->Metadata().is_metadata_good()) {
Playlist *playlist = app_->playlist_manager()->active(); Playlist *playlist = app_->playlist_manager()->active();
@ -1726,6 +1739,21 @@ void MainWindow::UpdateTrackSliderPosition() {
} }
void MainWindow::UpdateTaskbarProgress(const bool visible, const double position, const double length) {
QVariantMap map;
QDBusMessage msg = QDBusMessage::createSignal(QStringLiteral("/org/strawberrymusicplayer/strawberry"),
QStringLiteral("com.canonical.Unity.LauncherEntry"),
QStringLiteral("Update"));
map.insert(QStringLiteral("progress-visible"), visible);
map.insert(QStringLiteral("progress"), position / length);
msg << QString("application://org.strawberrymusicplayer.strawberry.desktop") << map;
QDBusConnection::sessionBus().send(msg);
}
void MainWindow::ApplyAddBehaviour(const BehaviourSettingsPage::AddBehaviour b, MimeData *mimedata) { void MainWindow::ApplyAddBehaviour(const BehaviourSettingsPage::AddBehaviour b, MimeData *mimedata) {
switch (b) { switch (b) {

View File

@ -202,6 +202,7 @@ class MainWindow : public QMainWindow, public PlatformInterface {
void Seeked(const qint64 microseconds); void Seeked(const qint64 microseconds);
void UpdateTrackPosition(); void UpdateTrackPosition();
void UpdateTrackSliderPosition(); void UpdateTrackSliderPosition();
void UpdateTaskbarProgress(const bool visible, const double position, const double length);
void TaskCountChanged(const int count); void TaskCountChanged(const int count);