93 lines
2.3 KiB
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);
|