aboutsummaryrefslogtreecommitdiff
path: root/mpris-plugin/qmpmprisimpl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mpris-plugin/qmpmprisimpl.cpp')
-rw-r--r--mpris-plugin/qmpmprisimpl.cpp206
1 files changed, 206 insertions, 0 deletions
diff --git a/mpris-plugin/qmpmprisimpl.cpp b/mpris-plugin/qmpmprisimpl.cpp
new file mode 100644
index 0000000..335a638
--- /dev/null
+++ b/mpris-plugin/qmpmprisimpl.cpp
@@ -0,0 +1,206 @@
+#include <QMetaEnum>
+
+#include "../include/qmpcorepublic.hpp"
+#include "../qmidiplayer-desktop/qmpmainwindow.hpp"
+#include "qmpmprisimpl.hpp"
+
+inline QVariantMap get_metadata(qmpPluginAPI *api)
+{
+ ::PlaybackStatus ps = api->getPlaybackStatus();
+ return {
+ {"mpris:trackid", QDBusObjectPath("/org/chrisoft/qmidiplayer/dummylist/0")},
+ {"xesam:url", QString::fromStdWString(api->getWFilePath())},
+ {"xesam:title", QString::fromStdWString(api->getWTitle())},
+ {"mpris:length", qlonglong(ps.maxtime_ms * 1000)}
+ };
+}
+
+QMPPlayer::QMPPlayer(qmpPluginAPI *_api, QObject *parent) :
+ api(_api),
+ QMPrisPlayer(parent)
+{
+ qmw = static_cast<qmpMainWindow*>(api->getMainWindow());
+}
+
+QString QMPPlayer::getPlaybackStatus()
+{
+ ::PlaybackStatus ps = api->getPlaybackStatus();
+ QMPrisPlayer::PlaybackStatus r = QMPrisPlayer::PlaybackStatus::Stopped;
+ if (!ps.stopped)
+ r = ps.paused ? QMPrisPlayer::PlaybackStatus::Paused : QMPrisPlayer::PlaybackStatus::Playing;
+ return QMetaEnum::fromType<QMPrisPlayer::PlaybackStatus>().key(r);
+}
+
+QString QMPPlayer::getLoopStatus()
+{
+ return QMetaEnum::fromType<QMPrisPlayer::LoopStatus>().key(QMPrisPlayer::LoopStatus::None);
+}
+
+double QMPPlayer::getRate()
+{
+ return 1;
+}
+
+bool QMPPlayer::getShuffle()
+{
+ return false;
+}
+
+QVariantMap QMPPlayer::getMetadata()
+{
+ ::PlaybackStatus ps = api->getPlaybackStatus();
+ if (ps.stopped) return {};
+ return get_metadata(api);
+}
+
+qlonglong QMPPlayer::getPosition()
+{
+ ::PlaybackStatus ps = api->getPlaybackStatus();
+ fprintf(stderr, "%lu\n", ps.curtime_ms);
+ return ps.curtime_ms * 1000;
+}
+
+bool QMPPlayer::getCanGoNext()
+{
+ return getCanPlay();
+}
+
+bool QMPPlayer::getCanGoPrevious()
+{
+ return getCanPlay();
+}
+
+bool QMPPlayer::getCanPlay()
+{
+ ::PlaybackStatus ps = api->getPlaybackStatus();
+ return !ps.stopped;
+}
+
+bool QMPPlayer::getCanPause()
+{
+ ::PlaybackStatus ps = api->getPlaybackStatus();
+ return !ps.stopped && !ps.paused;
+}
+
+bool QMPPlayer::getCanSeek()
+{
+ return getCanPlay();
+}
+
+bool QMPPlayer::getCanControl()
+{
+ return true;
+}
+
+void QMPPlayer::Pause()
+{
+ api->playbackControl(PlaybackControlCommand::Pause, nullptr);
+}
+
+void QMPPlayer::PlayPause()
+{
+ api->playbackControl(PlaybackControlCommand::TogglePause, nullptr);
+}
+
+void QMPPlayer::Stop()
+{
+ api->playbackControl(PlaybackControlCommand::Stop, nullptr);
+}
+
+void QMPPlayer::Play()
+{
+ api->playbackControl(PlaybackControlCommand::Play, nullptr);
+}
+
+void QMPPlayer::Next()
+{
+ api->playbackControl(PlaybackControlCommand::NextTrack, nullptr);
+}
+
+void QMPPlayer::Previous()
+{
+ api->playbackControl(PlaybackControlCommand::PrevTrack, nullptr);
+}
+
+void QMPPlayer::Seek(qlonglong t)
+{
+ double td = t / 1e6;
+ api->playbackControl(PlaybackControlCommand::SeekAbs, &td);
+}
+
+void QMPPlayer::SetPosition(QDBusObjectPath o, qlonglong t)
+{
+ if (o.path() == QString("/org/chrisoft/qmidiplayer/dummylist/0"))
+ {
+ double td = t / 1e6;
+ api->playbackControl(PlaybackControlCommand::SeekAbs, &td);
+ }
+}
+
+QMPMediaPlayer2::QMPMediaPlayer2(qmpPluginAPI *_api, QObject *parent) :
+ api(_api),
+ QMPrisMediaPlayer2(parent)
+{
+ qmw = static_cast<qmpMainWindow*>(api->getMainWindow());
+}
+
+void QMPMediaPlayer2::Raise()
+{
+ qmw->raise();
+}
+
+void QMPMediaPlayer2::Quit()
+{
+ qmw->close();
+}
+
+bool QMPMediaPlayer2::getCanQuit()
+{
+ return true;
+}
+
+bool QMPMediaPlayer2::getCanRaise()
+{
+ return true;
+}
+
+QString QMPMediaPlayer2::getIdentity()
+{
+ return QString("QMidiPlayer");
+}
+
+QString QMPMediaPlayer2::getDesktopEntry()
+{
+ return QString("qmidiplayer");
+}
+
+bool QMPMediaPlayer2::getHasTrackList()
+{
+ return true;
+}
+
+QMPTrackList::QMPTrackList(qmpPluginAPI *_api, QObject *parent) :
+ api(_api),
+ QMPrisTrackList(parent)
+{
+}
+
+QList<QVariantMap> QMPTrackList::GetTracksMetaData(QList<QDBusObjectPath> trackIds)
+{
+ QList<QVariantMap> ret;
+ for (auto &i : trackIds)
+ {
+ if (i.path() == QString("/org/chrisoft/qmidiplayer/dummylist/0"))
+ ret.push_back(get_metadata(api));
+ else ret.push_back({});
+ }
+ return ret;
+}
+
+QList<QDBusObjectPath> QMPTrackList::getTracks()
+{
+ ::PlaybackStatus ps = api->getPlaybackStatus();
+ if (ps.stopped)
+ return {};
+ return {QDBusObjectPath("/org/chrisoft/qmidiplayer/dummylist/0")};
+}