empc/src/modules/auto_playlist_manager.c

93 lines
2.3 KiB
C

#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#define EMPC_EXTERNS_ONLY
#include "empdd.h"
#include "empc.h"
#include <Ecore.h>
#include "eldbus_empd_empdd.h"
#include "Empd_Common_Azy.h"
static Ecore_Event_Handler *handler[2];
static long long dbtime = 0;
static void
find_cb(Eldbus_Proxy *proxy EINA_UNUSED, void *data EINA_UNUSED, Eldbus_Pending *pending EINA_UNUSED, Eldbus_Error_Info *error EINA_UNUSED, Eina_Value *args)
{
Eina_Value array;
unsigned int i;
eina_value_struct_value_get(args, "arg0", &array);
for (i = 0; i < eina_value_array_count(&array); i++)
{
Eina_Value struc, val, realval;
int type;
Empd_Empdd_File *f;
eina_value_array_value_get(&array, i, &struc);
eina_value_struct_get(&struc, "arg0", &type);
eina_value_struct_value_get(&struc, "arg1", &val);
eina_value_struct_value_get(&val, "arg0", &realval);
switch (type)
{
case MPD_ENTITY_TYPE_SONG:
azy_value_to_Empd_Empdd_File(&realval, &f);
empd_empdd_add_list_call(empd_proxy, f->uri);
Empd_Empdd_File_free(f);
break;
default: break;
}
eina_value_flush(&struc);
eina_value_flush(&val);
eina_value_flush(&realval);
}
eina_value_flush(&array);
}
static Eina_Bool
dbupdate_begin()
{
dbtime = lround(ecore_time_unix_get()) - 10;
return EINA_TRUE;
}
static Eina_Bool
dbupdate_end()
{
char buf[1024];
if (!dbtime) return ECORE_CALLBACK_RENEW;
snprintf(buf, sizeof(buf), "%lld", dbtime);
empd_empdd_find_call(empd_proxy, find_cb, NULL, EMPD_SEARCH_TYPE_MODIFIED, buf);
dbtime = 0;
return ECORE_CALLBACK_RENEW;
}
EAPI Empc_Module_Type
empc_module_type(void)
{
return EMPC_MODULE_TYPE_PLAYLIST_MANAGER;
}
static Eina_Bool
auto_playlist_manager_init(void)
{
handler[0] = ecore_event_handler_add(EMPD_EMPDD_DATABASE_UPDATE_BEGIN_EVENT, dbupdate_begin, NULL);
handler[1] = ecore_event_handler_add(EMPD_EMPDD_DATABASE_UPDATE_END_EVENT, dbupdate_end, NULL);
return EINA_TRUE;
}
static void
auto_playlist_manager_shutdown(void)
{
E_FREE_FUNC(handler[0], ecore_event_handler_del);
E_FREE_FUNC(handler[1], ecore_event_handler_del);
}
EINA_MODULE_INIT(auto_playlist_manager_init);
EINA_MODULE_SHUTDOWN(auto_playlist_manager_shutdown);