diff --git a/src/core/mainwindow.cpp b/src/core/mainwindow.cpp index 350c9828..3c42c34c 100644 --- a/src/core/mainwindow.cpp +++ b/src/core/mainwindow.cpp @@ -73,6 +73,8 @@ #include #include #include +#include +#include #include "core/logging.h" @@ -1269,6 +1271,9 @@ void MainWindow::Exit() { return; // Don't quit the application now: wait for the fadeout finished signal } } + + UpdateTaskbarProgress(false, 0, 0); + DoExit(); } @@ -1321,6 +1326,8 @@ void MainWindow::MediaStopped() { tray_icon_->SetProgress(0); tray_icon_->SetStopped(); + UpdateTaskbarProgress(false, 0, 0); + song_playing_ = Song(); song_ = Song(); album_cover_ = AlbumCoverImageResult(); @@ -1397,6 +1404,8 @@ void MainWindow::SongChanged(const Song &song) { setWindowTitle(song.PrettyTitleWithArtist()); tray_icon_->SetProgress(0); + UpdateTaskbarProgress(false, 0, 0); + SendNowPlaying(); 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; tray_icon_->SetProgress(static_cast(static_cast(position) / static_cast(length) * 100.0)); + UpdateTaskbarProgress(true, position, length); + } void MainWindow::UpdateTrackPosition() { @@ -1700,6 +1711,8 @@ void MainWindow::UpdateTrackPosition() { // Update the tray icon every 10 seconds if (position % 10 == 0) tray_icon_->SetProgress(static_cast(static_cast(position) / static_cast(length) * 100.0)); + UpdateTaskbarProgress(true, position, length); + // Send Scrobble if (app_->scrobbler()->enabled() && item->Metadata().is_metadata_good()) { 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) { switch (b) { diff --git a/src/core/mainwindow.h b/src/core/mainwindow.h index 31a71017..49eb0fd0 100644 --- a/src/core/mainwindow.h +++ b/src/core/mainwindow.h @@ -202,6 +202,7 @@ class MainWindow : public QMainWindow, public PlatformInterface { void Seeked(const qint64 microseconds); void UpdateTrackPosition(); void UpdateTrackSliderPosition(); + void UpdateTaskbarProgress(const bool visible, const double position, const double length); void TaskCountChanged(const int count);