From 60989e52b3f3bc0a95d3e61bd8e59fa4d9b7ab83 Mon Sep 17 00:00:00 2001 From: Chris Xiong Date: Sun, 26 Nov 2023 01:10:36 -0500 Subject: The 2 year constipation. (mpris plugin) Probably buggy as hell. --- mpris-plugin/qmpmprisimpl.cpp | 206 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100644 mpris-plugin/qmpmprisimpl.cpp (limited to 'mpris-plugin/qmpmprisimpl.cpp') 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 + +#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(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().key(r); +} + +QString QMPPlayer::getLoopStatus() +{ + return QMetaEnum::fromType().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(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 QMPTrackList::GetTracksMetaData(QList trackIds) +{ + QList 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 QMPTrackList::getTracks() +{ + ::PlaybackStatus ps = api->getPlaybackStatus(); + if (ps.stopped) + return {}; + return {QDBusObjectPath("/org/chrisoft/qmidiplayer/dummylist/0")}; +} -- cgit v1.2.3