/* Controle du lecteur */ static void cd_quodlibet_control (MyPlayerControl pControl, const char* song) { const gchar *cCommand = NULL; switch (pControl) { case PLAYER_PREVIOUS : cCommand = "Previous"; break; case PLAYER_PLAY_PAUSE : cCommand = "PlayPause"; break; case PLAYER_NEXT : cCommand = "Next"; break; default : return; break; } if (cCommand != NULL) { cd_debug ("MP : Handler QuodLibet : will use '%s'", cCommand); cairo_dock_dbus_call (myData.dbus_proxy_player, cCommand); } }
/* Controle du lecteur */ static void cd_exaile_control (MyPlayerControl pControl, const char* file) { gchar *cCommand = NULL; switch (pControl) { case PLAYER_PREVIOUS : cCommand = "prev_track"; break; case PLAYER_PLAY_PAUSE : cCommand = "play_pause"; break; case PLAYER_NEXT : cCommand = "next_track"; break; default : return; break; } if (cCommand != NULL) { cd_debug ("MP : will use '%s'", cCommand); cairo_dock_dbus_call(myData.dbus_proxy_player, cCommand); } }
/* Controle du lecteur (permet d'effectuer les actions de bases sur le lecteur) */ void cd_rhythmbox_control (MyPlayerControl pControl, const char* song) { cd_debug (""); gchar *cCommand = NULL; switch (pControl) { case PLAYER_PREVIOUS : cCommand = myData.DBus_commands.previous; // ou bien rhythmbox-client --previous break; case PLAYER_PLAY_PAUSE : cCommand = myData.DBus_commands.play; // ou bien rhythmbox-client --pause/--play break; case PLAYER_NEXT : cCommand = myData.DBus_commands.next; // ou bien rhythmbox-client --next break; case PLAYER_ENQUEUE : cCommand = g_strdup_printf ("rhythmbox-client --enqueue %s", song); g_spawn_command_line_async (cCommand, NULL); g_free (cCommand); cCommand = NULL; break; default : return; break; } if (pControl == PLAYER_PLAY_PAUSE) // Cas special pour RB qui necessite un argument pour le PlayPause { gboolean bStartPlaying = (myData.iPlayingStatus != PLAYER_PLAYING); dbus_g_proxy_call_no_reply (myData.dbus_proxy_player, cCommand, G_TYPE_BOOLEAN, bStartPlaying, G_TYPE_INVALID, G_TYPE_INVALID); } else if (cCommand != NULL) { cd_debug ("MP : Handler rhythmbox : will use '%s'", cCommand); cairo_dock_dbus_call (myData.dbus_proxy_player, cCommand); } }
static gboolean _quit (void) { if (! s_bGotCanQuit) { s_bCanQuit = cairo_dock_dbus_get_property_as_boolean_with_timeout (myData.dbus_proxy_shell, "org.mpris.MediaPlayer2", "CanQuit", 1000); cd_debug ("s_bCanQuit : %d", s_bCanQuit); s_bGotCanQuit = TRUE; } if (s_bCanQuit) { cairo_dock_dbus_call (myData.dbus_proxy_shell, "Quit"); return TRUE; } else { return FALSE; } }
/* Controle du lecteur (permet d'effectuer les actions de bases sur le lecteur). */ static void cd_mpris2_control (MyPlayerControl pControl, const char* song) { static GValue s_pValue = G_VALUE_INIT; gboolean bToggleValue; switch (pControl) { case PLAYER_PREVIOUS : cairo_dock_dbus_call (myData.dbus_proxy_shell, "Previous"); break; case PLAYER_STOP : cairo_dock_dbus_call (myData.dbus_proxy_shell, "Stop"); break; case PLAYER_PLAY_PAUSE : if (myData.iPlayingStatus != PLAYER_PLAYING) cairo_dock_dbus_call (myData.dbus_proxy_shell, "Play"); else cairo_dock_dbus_call (myData.dbus_proxy_shell, "Pause"); break; case PLAYER_NEXT : cairo_dock_dbus_call (myData.dbus_proxy_shell, "Next"); break; case PLAYER_JUMPBOX : break; case PLAYER_SHUFFLE : bToggleValue = cd_mpris2_is_shuffle (); cd_debug ("SetRandom <- %d", !bToggleValue); g_value_init (&s_pValue, G_TYPE_BOOLEAN); g_value_set_boolean (&s_pValue, !bToggleValue); cairo_dock_dbus_set_property (myData.dbus_proxy_player, "org.mpris.MediaPlayer2.Player", "Shuffle", &s_pValue); g_value_unset (&s_pValue); break; case PLAYER_REPEAT : bToggleValue = cd_mpris2_is_loop (); cd_debug ("SetLoop <- %d", !bToggleValue); g_value_init (&s_pValue, G_TYPE_STRING); g_value_set_static_string (&s_pValue, bToggleValue ? "None" : "Playlist"); cairo_dock_dbus_set_property (myData.dbus_proxy_player, "org.mpris.MediaPlayer2.Player", "LoopStatus", &s_pValue); g_value_unset (&s_pValue); break; case PLAYER_ENQUEUE : { cd_debug ("enqueue %s", song); GError *erreur = NULL; DBusGProxy *proxy = cairo_dock_create_new_session_proxy ("org.mpris.MediaPlayer2", "/org/mpris/MediaPlayer2", "org.mpris.MediaPlayer2.TrackList"); dbus_g_proxy_call (proxy, "AddTrack", &erreur, G_TYPE_INVALID, G_TYPE_STRING, song, // Uri DBUS_TYPE_G_OBJECT_PATH, "", // AfterTrack G_TYPE_BOOLEAN, TRUE, // SetAsCurrent G_TYPE_INVALID); g_object_unref (proxy); if (erreur != NULL) // the TrackList interface may not exist. { g_error_free (erreur); erreur = NULL; dbus_g_proxy_call_no_reply (proxy, "OpenUri", G_TYPE_STRING, song, G_TYPE_INVALID); } } break; case PLAYER_VOLUME : { double fVolume = cd_mpris2_get_volume (); // [0, 1] if (song && strcmp (song, "up") == 0) fVolume += .05; else fVolume -= .05; if (fVolume > 1) fVolume = 1; if (fVolume < 0) fVolume = 0; cd_debug ("volume <- %f", fVolume); g_value_init (&s_pValue, G_TYPE_DOUBLE); g_value_set_double (&s_pValue, fVolume); cairo_dock_dbus_set_property (myData.dbus_proxy_player, "org.mpris.MediaPlayer2.Player", "Volume", &s_pValue); g_value_unset (&s_pValue); } default : break; } }