File indexing completed on 2024-05-05 04:50:35
0001 /*************************************************************************** 0002 SPDX-FileCopyrightText: 2014 (c) Sujith Haridasan <sujith.haridasan@kdemail.net> 0003 SPDX-FileCopyrightText: 2014 (c) Ashish Madeti <ashishmadeti@gmail.com> 0004 SPDX-FileCopyrightText: 2016 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr> 0005 0006 SPDX-License-Identifier: GPL-3.0-or-later 0007 ***************************************************************************/ 0008 0009 #include "mpris2.h" 0010 #include "mediaplayer2.h" 0011 #include "mediaplayer2player.h" 0012 #include "mediaplaylistproxymodel.h" 0013 0014 #include <QDBusConnection> 0015 0016 0017 #if defined Q_OS_WIN 0018 #include <Windows.h> 0019 #else 0020 #include <unistd.h> 0021 #endif 0022 0023 Mpris2::Mpris2(QObject* parent) 0024 : QObject(parent) 0025 { 0026 } 0027 0028 void Mpris2::initDBusService() 0029 { 0030 QString mspris2Name(QStringLiteral("org.mpris.MediaPlayer2.") + m_playerName); 0031 0032 bool success = QDBusConnection::sessionBus().registerService(mspris2Name); 0033 0034 // If the above failed, it's likely because we're not the first instance 0035 // or the name is already taken. In that event the MPRIS2 spec wants the 0036 // following: 0037 if (!success) { 0038 #if defined Q_OS_WIN 0039 success = QDBusConnection::sessionBus().registerService(mspris2Name + QLatin1String(".instance") + QString::number(GetCurrentProcessId())); 0040 #else 0041 success = QDBusConnection::sessionBus().registerService(mspris2Name + QLatin1String(".instance") + QString::number(getpid())); 0042 #endif 0043 } 0044 0045 if (success) { 0046 m_mp2 = std::make_unique<MediaPlayer2>(this); 0047 m_mp2p = std::make_unique<MediaPlayer2Player>(m_playListModel, m_manageAudioPlayer, m_manageMediaPlayerControl, m_manageHeaderBar, m_audioPlayer, mShowProgressOnTaskBar, this); 0048 0049 QDBusConnection::sessionBus().registerObject(QStringLiteral("/org/mpris/MediaPlayer2"), this, QDBusConnection::ExportAdaptors); 0050 0051 connect(m_mp2.get(), &MediaPlayer2::raisePlayer, this, &Mpris2::raisePlayer); 0052 } 0053 } 0054 0055 Mpris2::~Mpris2() 0056 = default; 0057 0058 QString Mpris2::playerName() const 0059 { 0060 return m_playerName; 0061 } 0062 0063 MediaPlayListProxyModel *Mpris2::playListModel() const 0064 { 0065 return m_playListModel; 0066 } 0067 0068 ManageAudioPlayer *Mpris2::audioPlayerManager() const 0069 { 0070 return m_manageAudioPlayer; 0071 } 0072 0073 ManageMediaPlayerControl *Mpris2::manageMediaPlayerControl() const 0074 { 0075 return m_manageMediaPlayerControl; 0076 } 0077 0078 ManageHeaderBar *Mpris2::headerBarManager() const 0079 { 0080 return m_manageHeaderBar; 0081 } 0082 0083 AudioWrapper *Mpris2::audioPlayer() const 0084 { 0085 return m_audioPlayer; 0086 } 0087 0088 bool Mpris2::showProgressOnTaskBar() const 0089 { 0090 return mShowProgressOnTaskBar; 0091 } 0092 0093 void Mpris2::setPlayerName(const QString &playerName) 0094 { 0095 if (m_playerName == playerName) { 0096 return; 0097 } 0098 0099 m_playerName = playerName; 0100 0101 if (m_playListModel && m_manageAudioPlayer && m_manageMediaPlayerControl && m_manageHeaderBar && m_audioPlayer && !m_playerName.isEmpty()) { 0102 if (!m_mp2) { 0103 initDBusService(); 0104 } 0105 } 0106 0107 Q_EMIT playerNameChanged(); 0108 } 0109 0110 void Mpris2::setPlayListModel(MediaPlayListProxyModel *playListModel) 0111 { 0112 if (m_playListModel == playListModel) { 0113 return; 0114 } 0115 0116 m_playListModel = playListModel; 0117 0118 if (m_playListModel && m_manageAudioPlayer && m_manageMediaPlayerControl && m_manageHeaderBar && m_audioPlayer && !m_playerName.isEmpty()) { 0119 if (!m_mp2) { 0120 initDBusService(); 0121 } 0122 } 0123 0124 Q_EMIT playListModelChanged(); 0125 } 0126 0127 void Mpris2::setAudioPlayerManager(ManageAudioPlayer *manageAudioPlayer) 0128 { 0129 if (m_manageAudioPlayer == manageAudioPlayer) { 0130 return; 0131 } 0132 0133 m_manageAudioPlayer = manageAudioPlayer; 0134 0135 if (m_playListModel && m_manageAudioPlayer && m_manageMediaPlayerControl && m_manageHeaderBar && m_audioPlayer && !m_playerName.isEmpty()) { 0136 if (!m_mp2) { 0137 initDBusService(); 0138 } 0139 } 0140 0141 Q_EMIT audioPlayerManagerChanged(); 0142 } 0143 0144 void Mpris2::setManageMediaPlayerControl(ManageMediaPlayerControl *manageMediaPlayerControl) 0145 { 0146 if (m_manageMediaPlayerControl == manageMediaPlayerControl) { 0147 return; 0148 } 0149 0150 m_manageMediaPlayerControl = manageMediaPlayerControl; 0151 0152 if (m_playListModel && m_manageAudioPlayer && m_manageMediaPlayerControl && m_manageHeaderBar && m_audioPlayer && !m_playerName.isEmpty()) { 0153 if (!m_mp2) { 0154 initDBusService(); 0155 } 0156 } 0157 0158 Q_EMIT manageMediaPlayerControlChanged(); 0159 } 0160 0161 void Mpris2::setHeaderBarManager(ManageHeaderBar *manageHeaderBar) 0162 { 0163 if (m_manageHeaderBar == manageHeaderBar) 0164 return; 0165 0166 m_manageHeaderBar = manageHeaderBar; 0167 0168 if (m_playListModel && m_manageAudioPlayer && m_manageMediaPlayerControl && m_manageHeaderBar && m_audioPlayer && !m_playerName.isEmpty()) { 0169 if (!m_mp2) { 0170 initDBusService(); 0171 } 0172 } 0173 0174 Q_EMIT headerBarManagerChanged(); 0175 } 0176 0177 void Mpris2::setAudioPlayer(AudioWrapper *audioPlayer) 0178 { 0179 if (m_audioPlayer == audioPlayer) 0180 return; 0181 0182 m_audioPlayer = audioPlayer; 0183 0184 if (m_playListModel && m_manageAudioPlayer && m_manageMediaPlayerControl && m_manageHeaderBar && m_audioPlayer && !m_playerName.isEmpty()) { 0185 if (!m_mp2) { 0186 initDBusService(); 0187 } 0188 } 0189 0190 Q_EMIT audioPlayerChanged(); 0191 } 0192 0193 void Mpris2::setShowProgressOnTaskBar(bool value) 0194 { 0195 m_mp2p->setShowProgressOnTaskBar(value); 0196 mShowProgressOnTaskBar = value; 0197 Q_EMIT showProgressOnTaskBarChanged(); 0198 } 0199 0200 #include "moc_mpris2.cpp"