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