diff --git a/src/elisa_core.kcfg b/src/elisa_core.kcfg --- a/src/elisa_core.kcfg +++ b/src/elisa_core.kcfg @@ -8,4 +8,8 @@ + + + + diff --git a/src/elisaapplication.h b/src/elisaapplication.h --- a/src/elisaapplication.h +++ b/src/elisaapplication.h @@ -73,6 +73,10 @@ READ manageHeaderBar NOTIFY manageHeaderBarChanged) + Q_PROPERTY(bool showProgressOnTaskBar + READ showProgressOnTaskBar + NOTIFY showProgressOnTaskBarChanged) + public: explicit ElisaApplication(QObject *parent = nullptr); @@ -100,6 +104,8 @@ ManageHeaderBar *manageHeaderBar() const; + bool showProgressOnTaskBar() const; + Q_SIGNALS: void argumentsChanged(); @@ -123,6 +129,8 @@ void initializationDone(); + void showProgressOnTaskBarChanged(); + public Q_SLOTS: void appHelpActivated(); @@ -159,6 +167,8 @@ void playPause(); + void configChanged(); + private: void initializeModels(); diff --git a/src/elisaapplication.cpp b/src/elisaapplication.cpp --- a/src/elisaapplication.cpp +++ b/src/elisaapplication.cpp @@ -59,6 +59,7 @@ #include #include #include +#include #include @@ -78,6 +79,8 @@ Elisa::ElisaConfiguration::instance(configurationFileName); Elisa::ElisaConfiguration::self()->load(); Elisa::ElisaConfiguration::self()->save(); + + mConfigFileWatcher.addPath(configurationFileName); } #if defined KF5XmlGui_FOUND && KF5XmlGui_FOUND @@ -98,10 +101,17 @@ std::unique_ptr mManageHeaderBar; + QFileSystemWatcher mConfigFileWatcher; + }; ElisaApplication::ElisaApplication(QObject *parent) : QObject(parent), d(std::make_unique(this)) { + connect(Elisa::ElisaConfiguration::self(), &Elisa::ElisaConfiguration::configChanged, + this, &ElisaApplication::configChanged); + + connect(&d->mConfigFileWatcher, &QFileSystemWatcher::fileChanged, + this, &ElisaApplication::configChanged); } ElisaApplication::~ElisaApplication() @@ -286,6 +296,18 @@ void ElisaApplication::playPause() {} +void ElisaApplication::configChanged() +{ + auto currentConfiguration = Elisa::ElisaConfiguration::self(); + + d->mConfigFileWatcher.addPath(currentConfiguration->config()->name()); + + currentConfiguration->load(); + currentConfiguration->read(); + + Q_EMIT showProgressOnTaskBarChanged(); +} + ElisaUtils::EntryDataList ElisaApplication::checkFileListAndMakeAbsolute(const ElisaUtils::EntryDataList &filesList, const QString &workingDirectory) const { @@ -486,4 +508,11 @@ return d->mManageHeaderBar.get(); } +bool ElisaApplication::showProgressOnTaskBar() const +{ + auto currentConfiguration = Elisa::ElisaConfiguration::self(); + + return currentConfiguration->showProgressOnTaskBar(); +} + #include "moc_elisaapplication.cpp" diff --git a/src/mpris2/mediaplayer2player.h b/src/mpris2/mediaplayer2player.h --- a/src/mpris2/mediaplayer2player.h +++ b/src/mpris2/mediaplayer2player.h @@ -63,6 +63,7 @@ ManageMediaPlayerControl* manageMediaPlayerControl, ManageHeaderBar * manageHeaderBar, AudioWrapper *audioPlayer, + bool showProgressOnTaskBar, QObject* parent = nullptr); ~MediaPlayer2Player() override; @@ -82,6 +83,9 @@ int currentTrack() const; int mediaPlayerPresent() const; + bool showProgressOnTaskBar() const; + void setShowProgressOnTaskBar(bool value); + Q_SIGNALS: void Seeked(qlonglong Position); @@ -163,6 +167,7 @@ ManageHeaderBar * m_manageHeaderBar = nullptr; AudioWrapper *m_audioPlayer = nullptr; mutable QDBusMessage mProgressIndicatorSignal; + bool mShowProgressOnTaskBar = true; }; #endif // MEDIAPLAYER2PLAYER_H diff --git a/src/mpris2/mediaplayer2player.cpp b/src/mpris2/mediaplayer2player.cpp --- a/src/mpris2/mediaplayer2player.cpp +++ b/src/mpris2/mediaplayer2player.cpp @@ -40,12 +40,14 @@ static const double MIN_RATE = 1.0; MediaPlayer2Player::MediaPlayer2Player(MediaPlayList *playListControler, ManageAudioPlayer *manageAudioPlayer, - ManageMediaPlayerControl *manageMediaPlayerControl, ManageHeaderBar *manageHeaderBar, AudioWrapper *audioPlayer, QObject* parent) + ManageMediaPlayerControl *manageMediaPlayerControl, ManageHeaderBar *manageHeaderBar, + AudioWrapper *audioPlayer, bool showProgressOnTaskBar, QObject* parent) : QDBusAbstractAdaptor(parent), m_playListControler(playListControler), m_manageAudioPlayer(manageAudioPlayer), m_manageMediaPlayerControl(manageMediaPlayerControl), m_manageHeaderBar(manageHeaderBar), m_audioPlayer(audioPlayer), mProgressIndicatorSignal(QDBusMessage::createSignal(QStringLiteral("/org/kde/elisa"), QStringLiteral("com.canonical.Unity.LauncherEntry"), - QStringLiteral("Update"))) + QStringLiteral("Update"))), + mShowProgressOnTaskBar(showProgressOnTaskBar) { if (!m_playListControler) { return; @@ -97,19 +99,21 @@ result = QStringLiteral("Paused"); } - QVariantMap parameters; + if (mShowProgressOnTaskBar) { + QVariantMap parameters; - if (m_manageAudioPlayer->playerPlaybackState() == QMediaPlayer::StoppedState || m_audioPlayer->duration() == 0) { - parameters.insert(QStringLiteral("progress-visible"), false); - parameters.insert(QStringLiteral("progress"), 0); - } else { - parameters.insert(QStringLiteral("progress-visible"), true); - parameters.insert(QStringLiteral("progress"), qRound(static_cast(m_position / m_audioPlayer->duration())) / 1000.0); - } + if (m_manageAudioPlayer->playerPlaybackState() == QMediaPlayer::StoppedState || m_audioPlayer->duration() == 0) { + parameters.insert(QStringLiteral("progress-visible"), false); + parameters.insert(QStringLiteral("progress"), 0); + } else { + parameters.insert(QStringLiteral("progress-visible"), true); + parameters.insert(QStringLiteral("progress"), qRound(static_cast(m_position / m_audioPlayer->duration())) / 1000.0); + } - mProgressIndicatorSignal.setArguments({QStringLiteral("application://org.kde.elisa.desktop"), parameters}); + mProgressIndicatorSignal.setArguments({QStringLiteral("application://org.kde.elisa.desktop"), parameters}); - QDBusConnection::sessionBus().send(mProgressIndicatorSignal); + QDBusConnection::sessionBus().send(mProgressIndicatorSignal); + } return result; } @@ -216,13 +220,15 @@ Q_EMIT Seeked(m_position); - QVariantMap parameters; - parameters.insert(QStringLiteral("progress-visible"), true); - parameters.insert(QStringLiteral("progress"), static_cast(newPositionInMs) / m_audioPlayer->duration()); + if (mShowProgressOnTaskBar) { + QVariantMap parameters; + parameters.insert(QStringLiteral("progress-visible"), true); + parameters.insert(QStringLiteral("progress"), static_cast(newPositionInMs) / m_audioPlayer->duration()); - mProgressIndicatorSignal.setArguments({QStringLiteral("application://org.kde.elisa.desktop"), parameters}); + mProgressIndicatorSignal.setArguments({QStringLiteral("application://org.kde.elisa.desktop"), parameters}); - QDBusConnection::sessionBus().send(mProgressIndicatorSignal); + QDBusConnection::sessionBus().send(mProgressIndicatorSignal); + } } double MediaPlayer2Player::Rate() const @@ -415,6 +421,30 @@ return m_mediaPlayerPresent; } +bool MediaPlayer2Player::showProgressOnTaskBar() const +{ + return mShowProgressOnTaskBar; +} + +void MediaPlayer2Player::setShowProgressOnTaskBar(bool value) +{ + mShowProgressOnTaskBar = value; + + QVariantMap parameters; + + if (!mShowProgressOnTaskBar || m_manageAudioPlayer->playerPlaybackState() == QMediaPlayer::StoppedState || m_audioPlayer->duration() == 0) { + parameters.insert(QStringLiteral("progress-visible"), false); + parameters.insert(QStringLiteral("progress"), 0); + } else { + parameters.insert(QStringLiteral("progress-visible"), true); + parameters.insert(QStringLiteral("progress"), qRound(static_cast(m_position / m_audioPlayer->duration())) / 1000.0); + } + + mProgressIndicatorSignal.setArguments({QStringLiteral("application://org.kde.elisa.desktop"), parameters}); + + QDBusConnection::sessionBus().send(mProgressIndicatorSignal); +} + void MediaPlayer2Player::setMediaPlayerPresent(int status) { if (m_mediaPlayerPresent != status) { @@ -438,7 +468,7 @@ properties[property] = value; const int ifaceIndex = metaObject()->indexOfClassInfo("D-Bus Interface"); QDBusMessage msg = QDBusMessage::createSignal(QStringLiteral("/org/mpris/MediaPlayer2"), - QStringLiteral("org.freedesktop.DBus.Properties"), QStringLiteral("PropertiesChanged")); + QStringLiteral("org.freedesktop.DBus.Properties"), QStringLiteral("PropertiesChanged")); msg << QLatin1String(metaObject()->classInfo(ifaceIndex).value()); msg << properties; diff --git a/src/mpris2/mpris2.h b/src/mpris2/mpris2.h --- a/src/mpris2/mpris2.h +++ b/src/mpris2/mpris2.h @@ -72,6 +72,11 @@ WRITE setAudioPlayer NOTIFY audioPlayerChanged) + Q_PROPERTY(bool showProgressOnTaskBar + READ showProgressOnTaskBar + WRITE setShowProgressOnTaskBar + NOTIFY showProgressOnTaskBarChanged) + public: explicit Mpris2(QObject* parent = nullptr); ~Mpris2() override; @@ -88,6 +93,8 @@ AudioWrapper* audioPlayer() const; + bool showProgressOnTaskBar() const; + public Q_SLOTS: void setPlayerName(const QString &playerName); @@ -102,6 +109,8 @@ void setAudioPlayer(AudioWrapper* audioPlayer); + void setShowProgressOnTaskBar(bool value); + Q_SIGNALS: void raisePlayer(); @@ -117,6 +126,8 @@ void audioPlayerChanged(); + void showProgressOnTaskBarChanged(); + private: void initDBusService(); @@ -129,6 +140,7 @@ ManageMediaPlayerControl* m_manageMediaPlayerControl = nullptr; ManageHeaderBar* m_manageHeaderBar = nullptr; AudioWrapper* m_audioPlayer = nullptr; + bool mShowProgressOnTaskBar = true; }; #endif //MEDIACENTER_MPRIS2_H diff --git a/src/mpris2/mpris2.cpp b/src/mpris2/mpris2.cpp --- a/src/mpris2/mpris2.cpp +++ b/src/mpris2/mpris2.cpp @@ -60,7 +60,7 @@ if (success) { m_mp2 = std::make_unique(this); - m_mp2p = std::make_unique(m_playListModel, m_manageAudioPlayer, m_manageMediaPlayerControl, m_manageHeaderBar, m_audioPlayer, this); + m_mp2p = std::make_unique(m_playListModel, m_manageAudioPlayer, m_manageMediaPlayerControl, m_manageHeaderBar, m_audioPlayer, mShowProgressOnTaskBar, this); QDBusConnection::sessionBus().registerObject(QStringLiteral("/org/mpris/MediaPlayer2"), this, QDBusConnection::ExportAdaptors); @@ -101,6 +101,11 @@ return m_audioPlayer; } +bool Mpris2::showProgressOnTaskBar() const +{ + return mShowProgressOnTaskBar; +} + void Mpris2::setPlayerName(const QString &playerName) { if (m_playerName == playerName) { @@ -201,4 +206,11 @@ emit audioPlayerChanged(); } +void Mpris2::setShowProgressOnTaskBar(bool value) +{ + m_mp2p->setShowProgressOnTaskBar(value); + mShowProgressOnTaskBar = value; + Q_EMIT showProgressOnTaskBarChanged(); +} + #include "moc_mpris2.cpp" diff --git a/src/qml/ElisaMainWindow.qml b/src/qml/ElisaMainWindow.qml --- a/src/qml/ElisaMainWindow.qml +++ b/src/qml/ElisaMainWindow.qml @@ -159,6 +159,8 @@ player: elisa.audioPlayer headerBarManager: elisa.manageHeaderBar manageMediaPlayerControl: elisa.playerControl + showProgressOnTaskBar: elisa.showProgressOnTaskBar + onRaisePlayer: { mainWindow.show() mainWindow.raise() diff --git a/src/qml/PlatformIntegration.qml b/src/qml/PlatformIntegration.qml --- a/src/qml/PlatformIntegration.qml +++ b/src/qml/PlatformIntegration.qml @@ -26,6 +26,7 @@ property alias player: mpris2Interface.audioPlayer property alias headerBarManager: mpris2Interface.headerBarManager property alias manageMediaPlayerControl: mpris2Interface.manageMediaPlayerControl + property alias showProgressOnTaskBar: mpris2Interface.showProgressOnTaskBar signal raisePlayer() diff --git a/src/windows/PlatformIntegration.qml b/src/windows/PlatformIntegration.qml --- a/src/windows/PlatformIntegration.qml +++ b/src/windows/PlatformIntegration.qml @@ -27,21 +27,32 @@ property var player property var headerBarManager property var manageMediaPlayerControl + property alias showProgressOnTaskBar: progressBar.active signal raisePlayer() Theme { id: elisaTheme } - TaskbarButton { - progress.minimum: 0 - progress.maximum: player.duration - progress.value: player.position - progress.visible: manageMediaPlayerControl.musicPlaying + Loader { + id: progressBar - overlay.iconSource: (manageMediaPlayerControl.musicPlaying ? - Qt.resolvedUrl(elisaTheme.playingIndicatorIcon) : Qt.resolvedUrl(elisaTheme.pausedIndicatorIcon)) + sourceComponent: taskBarComponent + } + + Component { + id:taskBarComponent + + TaskbarButton { + progress.minimum: 0 + progress.maximum: player.duration + progress.value: player.position + progress.visible: manageMediaPlayerControl.musicPlaying + + overlay.iconSource: (manageMediaPlayerControl.musicPlaying ? + Qt.resolvedUrl(elisaTheme.playingIndicatorIcon) : Qt.resolvedUrl(elisaTheme.pausedIndicatorIcon)) + } } ThumbnailToolBar {