27
27
#include "applet-musicplayer.h"
30
gboolean cd_musicplayer_dbus_connect_to_bus (void)
32
if (cairo_dock_dbus_is_enabled ())
34
myData.dbus_proxy_player = cairo_dock_create_new_session_proxy (
35
myData.DBus_commands.service,
36
myData.DBus_commands.path,
37
myData.DBus_commands.interface);
38
return (myData.dbus_proxy_player != NULL);
43
gboolean musicplayer_dbus_connect_to_bus_Shell (void)
45
if (cairo_dock_dbus_is_enabled ())
47
myData.dbus_proxy_shell = cairo_dock_create_new_session_proxy (
48
myData.DBus_commands.service,
49
myData.DBus_commands.path2,
50
myData.DBus_commands.interface2);
51
return (myData.dbus_proxy_shell != NULL);
56
void musicplayer_dbus_disconnect_from_bus (void)
30
gboolean cd_musicplayer_dbus_connect_handler (MusicPlayerHandler *pHandler)
32
g_return_val_if_fail (pHandler != NULL && pHandler->cMprisService != NULL, FALSE);
33
if (cairo_dock_dbus_is_enabled ())
35
if (pHandler->path != NULL)
37
myData.dbus_proxy_player = cairo_dock_create_new_session_proxy (
38
pHandler->cMprisService,
42
if (pHandler->path2 != NULL)
44
myData.dbus_proxy_shell = cairo_dock_create_new_session_proxy (
45
pHandler->cMprisService,
47
pHandler->interface2);
49
return (myData.dbus_proxy_player != NULL || myData.dbus_proxy_shell != NULL);
55
void cd_musicplayer_dbus_disconnect_from_bus (void)
58
57
if (myData.dbus_proxy_player != NULL)
80
static void _on_detect_player (gboolean bPresent, GVoidFunc pCallback)
82
myData.bIsRunning = bPresent;
85
void cd_musicplayer_dbus_detect_player_async (GVoidFunc pCallback)
87
myData.bIsRunning = FALSE;
88
if (myData.pDetectPlayerCall != NULL)
90
DBusGProxy *pProxy = cairo_dock_get_main_proxy ();
91
dbus_g_proxy_cancel_call (pProxy, myData.pDetectPlayerCall);
93
myData.pDetectPlayerCall = cairo_dock_dbus_detect_application_async (myData.DBus_commands.service, (CairoDockOnAppliPresentOnDbus) _on_detect_player, pCallback);
96
void cd_musicplayer_dbus_detect_player (void)
98
myData.bIsRunning = cairo_dock_dbus_detect_application (myData.DBus_commands.service);
102
//*********************************************************************************
103
// musicplayer_getStatus_*() : Test si musicplayer joue de la musique ou non
104
//*********************************************************************************
105
void cd_musicplayer_getStatus_string (const char *status_paused, const char *status_playing, const char* status_stopped )
108
status = cairo_dock_dbus_get_string (myData.dbus_proxy_player, myData.DBus_commands.get_status);
109
myData.pPreviousPlayingStatus = myData.iPlayingStatus;
110
if ((! g_ascii_strcasecmp(status, status_playing)) || (!g_ascii_strcasecmp(status, "1")))
112
//cd_debug("MP : le lecteur est en statut PLAY");
113
myData.iPlayingStatus = PLAYER_PLAYING;
115
else if (! g_ascii_strcasecmp(status, status_paused))
117
//cd_debug("MP : le lecteur est en statut PAUSED");
118
myData.iPlayingStatus = PLAYER_PAUSED;
120
else if ((status_stopped) &&(! g_ascii_strcasecmp(status, status_stopped)))
122
//cd_debug("MP : le lecteur est en statut STOPPED");
123
myData.iPlayingStatus = PLAYER_STOPPED;
132
void cd_musicplayer_getStatus_integer (int status_paused, int status_playing)
136
status=cairo_dock_dbus_get_integer(myData.dbus_proxy_player, myData.DBus_commands.get_status);
137
//cd_debug("MP : Statut du lecteur : %d",status);
138
if (status == status_paused) myData.iPlayingStatus = PLAYER_PAUSED;
139
else if (status == status_playing) myData.iPlayingStatus = PLAYER_PLAYING;
140
else myData.iPlayingStatus = PLAYER_STOPPED;
143
//*********************************************************************************
144
// musicplayer_getCoverPath() : Retourne l'adresse de la pochette
145
//*********************************************************************************
147
void cd_musicplayer_getCoverPath (void)
149
if (myData.cCoverPath != NULL) {
150
g_free (myData.cCoverPath);
151
myData.cCoverPath = NULL;
154
myData.cCoverPath = cairo_dock_dbus_get_string (myData.dbus_proxy_player, myData.DBus_commands.get_cover_path);
155
if (myData.cCoverPath != NULL)
156
cd_message("MP : Couverture -> %s", myData.cCoverPath);
158
cd_message("MP : Pas de couverture dispo");
162
MusicPlayerHandeler *cd_musicplayer_dbus_find_opened_player (void)
164
// on recupere la liste des services existants.
76
MusicPlayerHandler *cd_musicplayer_dbus_find_opened_player (void)
78
if (myData.pCurrentHandler != NULL && myData.bIsRunning)
79
return myData.pCurrentHandler;
81
// get the list of services.
82
MusicPlayerHandler *pHandler = NULL;
165
83
gchar **name_list = cairo_dock_dbus_get_services ();
85
if (name_list != NULL)
168
// on teste chaque lecteur.
169
MusicPlayerHandeler *pHandler = NULL;
87
// check if an MPRIS2 service is present.
172
for (h = myData.pHandelers; h != NULL; h = h->next)
175
//cd_debug ("%s : %s\n", pHandler->name, pHandler->cMprisService);
176
if (pHandler->cMprisService == NULL)
89
for (i = 0; name_list[i] != NULL; i ++)
91
if (strncmp (name_list[i], CD_MPRIS2_SERVICE_BASE, strlen (CD_MPRIS2_SERVICE_BASE)) == 0) // it's an MPRIS2 player.
93
pHandler = cd_musicplayer_get_handler_by_name ("Mpris2");
94
g_free ((gchar*)pHandler->cMprisService);
95
pHandler->cMprisService = g_strdup (name_list[i]);
96
pHandler->launch = g_strdup (name_list[i] + strlen (CD_MPRIS2_SERVICE_BASE)+1);
97
gchar *str = strchr (pHandler->launch, '.');
100
/// set the properties (command, class), manage the class...
106
// if no MPRIS2 service is present, look for a known handler.
107
if (pHandler == NULL)
110
MusicPlayerHandler *handler;
178
111
for (i = 0; name_list[i] != NULL; i ++)
180
cd_debug ("%s : %s\n", pHandler->cMprisService, name_list[i]);
181
if (strcmp (name_list[i], pHandler->cMprisService) == 0) // trouve, on quitte.
113
for (h = myData.pHandlers; h != NULL; h = h->next) // see if a known handler matches.
183
cd_debug ("found %s\n", pHandler->name);
116
if (handler->cMprisService == NULL)
118
if (strcmp (name_list[i], handler->cMprisService) == 0)
187
if (name_list[i] != NULL)
190
127
g_strfreev (name_list);
191
return (h ? pHandler : NULL);