music control - respct powersave for polling for mpris provider

This commit is contained in:
Carsten Haitzler 2021-01-06 22:19:00 +00:00
parent e3300c11e9
commit dd07427e96
1 changed files with 34 additions and 7 deletions

View File

@ -7,6 +7,7 @@
static E_Module *music_control_mod = NULL;
static Eina_Bool was_playing_before_lock = EINA_FALSE;
static const char _e_music_control_Name[] = N_("Music controller");
static Ecore_Event_Handler *music_control_powersave_event_handler = NULL;
static Eina_Bool have_player = EINA_FALSE;
const Player music_player_players[] =
@ -388,6 +389,22 @@ _poll_dbus_cb(void *data)
return EINA_FALSE;
}
static void
_timer_redo(E_Music_Control_Module_Context *ctxt)
{
E_Powersave_Mode pm;
double t = 5.0;
if (ctxt->poll_timer) ecore_timer_del(ctxt->poll_timer);
pm = e_powersave_mode_get();
if (e_powersave_mode_screen_get() > pm) pm = e_powersave_mode_screen_get();
if (pm >= E_POWERSAVE_MODE_FREEZE) t = 3600.0;
else if (pm >= E_POWERSAVE_MODE_EXTREME) t = 600.0;
else if (pm >= E_POWERSAVE_MODE_HIGH) t = 10.0;
else t = 5.0;
ctxt->poll_timer = ecore_timer_add(t, _poll_dbus_cb, ctxt);
}
static void
_bus_list_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
{
@ -430,8 +447,7 @@ _bus_list_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA
{
eina_stringshare_del(ctxt->dbus_name);
ctxt->dbus_name = NULL;
if (ctxt->poll_timer) ecore_timer_del(ctxt->poll_timer);
ctxt->poll_timer = ecore_timer_add(5.0, _poll_dbus_cb, ctxt);
_timer_redo(ctxt);
return;
}
if ((!ctxt->dbus_name) ||
@ -447,11 +463,7 @@ _bus_list_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA
if (ctxt->poll_timer) ecore_timer_del(ctxt->poll_timer);
ctxt->poll_timer = NULL;
}
else
{
if (ctxt->poll_timer) ecore_timer_del(ctxt->poll_timer);
ctxt->poll_timer = ecore_timer_add(5.0, _poll_dbus_cb, ctxt);
}
else _timer_redo(ctxt);
}
}
@ -521,6 +533,15 @@ music_control_launch(E_Music_Control_Instance *inst)
}
}
static Eina_Bool
_powersave_change_cb(void *data, int type EINA_UNUSED, void *event_info EINA_UNUSED)
{
E_Music_Control_Module_Context *ctxt = data;
_timer_redo(ctxt);
return ECORE_CALLBACK_PASS_ON;
}
Eina_Bool
music_control_dbus_init(E_Music_Control_Module_Context *ctxt, const char *bus)
{
@ -584,6 +605,9 @@ e_modapi_init(E_Module *m)
if (ctxt->config->pause_on_desklock)
desklock_handler = ecore_event_handler_add(E_EVENT_DESKLOCK,
_desklock_cb, ctxt);
music_control_powersave_event_handler =
ecore_event_handler_add(E_EVENT_POWERSAVE_UPDATE,
_powersave_change_cb, ctxt);
return ctxt;
}
@ -594,6 +618,9 @@ e_modapi_shutdown(E_Module *m EINA_UNUSED)
EINA_SAFETY_ON_NULL_RETURN_VAL(music_control_mod, 0);
ctxt = music_control_mod->data;
ecore_event_handler_del(music_control_powersave_event_handler);
music_control_powersave_event_handler = NULL;
E_FREE_FUNC(ctxt->meta_title, eina_stringshare_del);
E_FREE_FUNC(ctxt->meta_album, eina_stringshare_del);
E_FREE_FUNC(ctxt->meta_artist, eina_stringshare_del);