forked from enlightenment/enlightenment
e/music-control: Integrate edbus and gadget
Patch by: José Roberto de Souza <zehortigoza@profusion.mobi> SVN revision: 81991
This commit is contained in:
parent
1f3b9deb09
commit
7302bcd8d4
|
@ -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 };
|
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 *
|
EAPI void *
|
||||||
e_modapi_init(E_Module *m)
|
e_modapi_init(E_Module *m)
|
||||||
{
|
{
|
||||||
|
@ -126,7 +164,10 @@ e_modapi_init(E_Module *m)
|
||||||
edbus_init();
|
edbus_init();
|
||||||
ctxt->conn = edbus_connection_get(EDBUS_CONNECTION_TYPE_SESSION);
|
ctxt->conn = edbus_connection_get(EDBUS_CONNECTION_TYPE_SESSION);
|
||||||
EINA_SAFETY_ON_NULL_GOTO(ctxt->conn, error_dbus_bus_get);
|
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;
|
music_control_mod = m;
|
||||||
|
|
||||||
e_gadcon_provider_register(&_gc_class);
|
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);
|
EINA_SAFETY_ON_NULL_RETURN_VAL(music_control_mod, 0);
|
||||||
ctxt = music_control_mod->data;
|
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_connection_unref(ctxt->conn);
|
||||||
edbus_shutdown();
|
edbus_shutdown();
|
||||||
|
|
||||||
|
|
|
@ -2,12 +2,16 @@
|
||||||
#define MUSIC_CONTROL_PRIVATE_H
|
#define MUSIC_CONTROL_PRIVATE_H
|
||||||
|
|
||||||
#include "e_mod_main.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
|
typedef struct _E_Music_Control_Module_Context
|
||||||
{
|
{
|
||||||
Eina_List *instances;
|
Eina_List *instances;
|
||||||
EDBus_Connection *conn;
|
EDBus_Connection *conn;
|
||||||
Eina_Bool playning:1;
|
Eina_Bool playning:1;
|
||||||
|
EDBus_Proxy *mrpis2;
|
||||||
|
EDBus_Proxy *mpris2_player;
|
||||||
} E_Music_Control_Module_Context;
|
} E_Music_Control_Module_Context;
|
||||||
|
|
||||||
typedef struct _E_Music_Control_Instance
|
typedef struct _E_Music_Control_Instance
|
||||||
|
|
|
@ -24,12 +24,12 @@ static void
|
||||||
_btn_clicked(void *data, Evas_Object *obj, const char *emission, const char *source)
|
_btn_clicked(void *data, Evas_Object *obj, const char *emission, const char *source)
|
||||||
{
|
{
|
||||||
E_Music_Control_Instance *inst = data;
|
E_Music_Control_Instance *inst = data;
|
||||||
|
|
||||||
if (!strcmp(source, "play"))
|
if (!strcmp(source, "play"))
|
||||||
{
|
media_player2_player_pause_call(inst->ctxt->mpris2_player);
|
||||||
inst->ctxt->playning = !inst->ctxt->playning;
|
else if (!strcmp(source, "next"))
|
||||||
music_control_state_update_all(inst->ctxt);
|
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
|
static void
|
||||||
|
|
Loading…
Reference in New Issue