From 7302bcd8d494eaac7a49148127d3bfc80e2c9ca0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?= Date: Wed, 2 Jan 2013 13:21:33 +0000 Subject: [PATCH] e/music-control: Integrate edbus and gadget MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Patch by: José Roberto de Souza SVN revision: 81991 --- src/modules/music-control/e_mod_main.c | 45 +++++++++++++++++++++++++- src/modules/music-control/private.h | 4 +++ src/modules/music-control/ui.c | 10 +++--- 3 files changed, 53 insertions(+), 6 deletions(-) diff --git a/src/modules/music-control/e_mod_main.c b/src/modules/music-control/e_mod_main.c index 91b896b7f..7ec5f3de5 100644 --- a/src/modules/music-control/e_mod_main.c +++ b/src/modules/music-control/e_mod_main.c @@ -116,6 +116,44 @@ static const E_Gadcon_Client_Class _gc_class = EAPI E_Module_Api e_modapi = { E_MODULE_API_VERSION, _e_music_control_Name }; +static void +cb_playback_status_get(void *data, EDBus_Pending *p, const char *propname, EDBus_Proxy *proxy, EDBus_Error_Info *error_info, const char *value) +{ + E_Music_Control_Module_Context *ctxt = data; + + if (error_info) + { + ERR("%s %s", error_info->error, error_info->message); + return; + } + + if (!strcmp(value, "Playing")) + ctxt->playning = EINA_TRUE; + else + ctxt->playning = EINA_FALSE; + music_control_state_update_all(ctxt); +} + +static void +prop_changed(void *data, EDBus_Proxy *proxy, void *event_info) +{ + EDBus_Proxy_Event_Property_Changed *event = event_info; + E_Music_Control_Module_Context *ctxt = data; + + if (!strcmp(event->name, "PlaybackStatus")) + { + const Eina_Value *value = event->value; + const char *status; + + eina_value_get(value, &status); + if (!strcmp(status, "Playing")) + ctxt->playning = EINA_TRUE; + else + ctxt->playning = EINA_FALSE; + music_control_state_update_all(ctxt); + } +} + EAPI void * e_modapi_init(E_Module *m) { @@ -126,7 +164,10 @@ e_modapi_init(E_Module *m) edbus_init(); ctxt->conn = edbus_connection_get(EDBUS_CONNECTION_TYPE_SESSION); EINA_SAFETY_ON_NULL_GOTO(ctxt->conn, error_dbus_bus_get); - + ctxt->mrpis2 = mpris_media_player2_proxy_get(ctxt->conn, "org.mpris.MediaPlayer2.gmusicbrowser", NULL); + ctxt->mpris2_player = media_player2_player_proxy_get(ctxt->conn, "org.mpris.MediaPlayer2.gmusicbrowser", NULL); + media_player2_player_playback_status_propget(ctxt->mpris2_player, cb_playback_status_get, ctxt); + edbus_proxy_event_callback_add(ctxt->mpris2_player, EDBUS_PROXY_EVENT_PROPERTY_CHANGED, prop_changed, ctxt); music_control_mod = m; e_gadcon_provider_register(&_gc_class); @@ -145,6 +186,8 @@ e_modapi_shutdown(E_Module *m) EINA_SAFETY_ON_NULL_RETURN_VAL(music_control_mod, 0); ctxt = music_control_mod->data; + media_player2_player_proxy_unref(ctxt->mpris2_player); + mpris_media_player2_proxy_unref(ctxt->mrpis2); edbus_connection_unref(ctxt->conn); edbus_shutdown(); diff --git a/src/modules/music-control/private.h b/src/modules/music-control/private.h index b67825cf0..d0cba6b4d 100644 --- a/src/modules/music-control/private.h +++ b/src/modules/music-control/private.h @@ -2,12 +2,16 @@ #define MUSIC_CONTROL_PRIVATE_H #include "e_mod_main.h" +#include "gen/edbus_media_player2_player.h" +#include "gen/edbus_mpris_media_player2.h" typedef struct _E_Music_Control_Module_Context { Eina_List *instances; EDBus_Connection *conn; Eina_Bool playning:1; + EDBus_Proxy *mrpis2; + EDBus_Proxy *mpris2_player; } E_Music_Control_Module_Context; typedef struct _E_Music_Control_Instance diff --git a/src/modules/music-control/ui.c b/src/modules/music-control/ui.c index a2b9cb34b..5da979bc0 100644 --- a/src/modules/music-control/ui.c +++ b/src/modules/music-control/ui.c @@ -24,12 +24,12 @@ static void _btn_clicked(void *data, Evas_Object *obj, const char *emission, const char *source) { E_Music_Control_Instance *inst = data; - if (!strcmp(source, "play")) - { - inst->ctxt->playning = !inst->ctxt->playning; - music_control_state_update_all(inst->ctxt); - } + media_player2_player_pause_call(inst->ctxt->mpris2_player); + else if (!strcmp(source, "next")) + media_player2_player_next_call(inst->ctxt->mpris2_player); + else if (!strcmp(source, "previous")) + media_player2_player_previous_call(inst->ctxt->mpris2_player); } static void