1 /*
2 * %kadu copyright begin%
3 * Copyright 2011 Piotr Galiszewski (piotr.galiszewski@kadu.im)
4 * Copyright 2011 Sławomir Stępień (s.stepien@interia.pl)
5 * Copyright 2012, 2013 Bartosz Brachaczek (b.brachaczek@gmail.com)
6 * Copyright 2011, 2013, 2014 Rafał Przemysław Malinowski (rafal.przemyslaw.malinowski@gmail.com)
7 * %kadu copyright end%
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License as
11 * published by the Free Software Foundation; either version 2 of
12 * the License, or (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program. If not, see <http://www.gnu.org/licenses/>.
21 */
22
23 #include <QtCore/QFile>
24 #include <QtCore/QSettings>
25
26 #include "configuration/configuration.h"
27 #include "configuration/deprecated-configuration-api.h"
28 #include "gui/windows/main-configuration-window.h"
29 #include "plugin/metadata/plugin-metadata.h"
30 #include "plugin/state/plugin-state-service.h"
31 #include "plugin/state/plugin-state.h"
32
33 #include "plugins/mediaplayer/mediaplayer-plugin-object.h"
34 #include "plugins/mediaplayer/mediaplayer.h"
35
36 #include "mpris-player.h"
37
38 const QString MPRISPlayer::UserPlayersListFile = "mprisplayer-players.data";
39 const QString MPRISPlayer::GlobalPlayersListFile = "plugins/data/mprisplayer_mediaplayer/" + MPRISPlayer::UserPlayersListFile;
40
MPRISPlayer(QObject * parent)41 MPRISPlayer::MPRISPlayer(QObject *parent) :
42 MPRISMediaPlayer(parent)
43 {
44 }
45
~MPRISPlayer()46 MPRISPlayer::~MPRISPlayer()
47 {
48 }
49
setConfiguration(Configuration * configuration)50 void MPRISPlayer::setConfiguration(Configuration *configuration)
51 {
52 m_configuration = configuration;
53 }
54
setPathsProvider(PathsProvider * pathsProvider)55 void MPRISPlayer::setPathsProvider(PathsProvider *pathsProvider)
56 {
57 m_pathsProvider = pathsProvider;
58 }
59
setPluginStateService(PluginStateService * pluginStateService)60 void MPRISPlayer::setPluginStateService(PluginStateService *pluginStateService)
61 {
62 m_pluginStateService = pluginStateService;
63 }
64
init()65 void MPRISPlayer::init()
66 {
67 prepareUserPlayersFile();
68 replacePlugin();
69 }
70
prepareUserPlayersFile()71 void MPRISPlayer::prepareUserPlayersFile()
72 {
73 if (QFile::exists(MPRISPlayer::userPlayersListFileName(m_pathsProvider)))
74 return;
75
76 QFile userFile(MPRISPlayer::userPlayersListFileName(m_pathsProvider));
77 if (!userFile.open(QIODevice::ReadWrite))
78 return;
79
80 userFile.close();
81 }
82
replacePlugin()83 void MPRISPlayer::replacePlugin()
84 {
85 QMap<QString, QString> replaceMap;
86 replaceMap.insert("amarok2_mediaplayer", "Amarok");
87 replaceMap.insert("audacious_mediaplayer", "Audacious");
88 replaceMap.insert("bmpx_mediaplayer", "BMPx");
89 replaceMap.insert("dragon_mediaplayer", "Dragon Player");
90 replaceMap.insert("mpris_mediaplayer", "MPRIS Media Player");
91 replaceMap.insert("vlc_mediaplayer", "VLC");
92 replaceMap.insert("xmms2_mediaplayer", "XMMS2");
93
94 foreach (const QString &value, replaceMap)
95 {
96 QString key = replaceMap.key(value);
97 if (m_pluginStateService->pluginState(key) == PluginState::Enabled)
98 {
99 choosePlayer(key, value);
100 m_pluginStateService->setPluginState(key, PluginState::Disabled);
101 break;
102 }
103 }
104 }
105
choosePlayer(const QString & key,const QString & value)106 void MPRISPlayer::choosePlayer(const QString &key, const QString &value)
107 {
108 // Save service value from mpris_mediaplayer module
109 if (key == "mpris_mediaplayer")
110 {
111 QString oldMPRISService = m_configuration->deprecatedApi()->readEntry("MediaPlayer", "MPRISService");
112 QSettings userPlayersSettings(MPRISPlayer::userPlayersListFileName(m_pathsProvider), QSettings::IniFormat);
113 userPlayersSettings.setIniCodec("ISO8859-2");
114
115 userPlayersSettings.setValue(value + "/player", value);
116 userPlayersSettings.setValue(value + "/service", oldMPRISService);
117 userPlayersSettings.sync();
118
119 m_configuration->deprecatedApi()->writeEntry("MPRISPlayer", "Player", value);
120 m_configuration->deprecatedApi()->writeEntry("MPRISPlayer", "Service", oldMPRISService);
121 }
122 else // Choose player based on old module loaded.
123 {
124 QSettings globalPlayersSettings(MPRISPlayer::globalPlayersListFileName(m_pathsProvider), QSettings::IniFormat);
125 globalPlayersSettings.setIniCodec("ISO8859-2");
126
127 m_configuration->deprecatedApi()->writeEntry("MPRISPlayer", "Player", value);
128 m_configuration->deprecatedApi()->writeEntry("MPRISPlayer", "Service", globalPlayersSettings.value(value + "/service").toString());
129 }
130 }
131
configurationApplied()132 void MPRISPlayer::configurationApplied()
133 {
134 auto name = m_configuration->deprecatedApi()->readEntry("MPRISPlayer", "Player");
135 setName(name);
136 setService(m_configuration->deprecatedApi()->readEntry("MPRISPlayer", "Service"));
137
138 if (name == "Audacious")
139 m_mediaPlayer->setInterval(5);
140 else
141 m_mediaPlayer->setInterval(0);
142 }
143
144 #include "moc_mpris-player.cpp"
145