static void parse_metadata(E_Music_Control_Module_Context *ctxt, Eina_Value *array) { unsigned i; 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); E_FREE_FUNC(ctxt->meta_cover, eina_stringshare_del); // DBG("Metadata: %s", eina_value_to_string(array)); for (i = 0; i < eina_value_array_count(array); i++) { const char *key, *str_val; Eina_Value st, subst; Efreet_Uri *uri; eina_value_array_value_get(array, i, &st); eina_value_struct_get(&st, "arg0", &key); if (!strcmp(key, "xesam:title")) { eina_value_struct_value_get(&st, "arg1", &subst); eina_value_struct_get(&subst, "arg0", &str_val); ctxt->meta_title = eina_stringshare_add(str_val); eina_value_flush(&subst); } else if (!strcmp(key, "xesam:album")) { eina_value_struct_value_get(&st, "arg1", &subst); eina_value_struct_get(&subst, "arg0", &str_val); ctxt->meta_album = eina_stringshare_add(str_val); eina_value_flush(&subst); } else if (!strcmp(key, "xesam:artist")) { Eina_Value arr; eina_value_struct_value_get(&st, "arg1", &subst); eina_value_struct_value_get(&subst, "arg0", &arr); eina_value_array_get(&arr, 0, &str_val); ctxt->meta_artist = eina_stringshare_add(str_val); eina_value_flush(&arr); eina_value_flush(&subst); } else if (!strcmp(key, "mpris:artUrl")) { eina_value_struct_value_get(&st, "arg1", &subst); eina_value_struct_get(&subst, "arg0", &str_val); uri = efreet_uri_decode(str_val); if (uri && !strncmp(uri->protocol, "file", 4)) ctxt->meta_cover = eina_stringshare_add(uri->path); E_FREE_FUNC(uri, efreet_uri_free); eina_value_flush(&subst); } eina_value_flush(&st); } }
void my_struct_use(Eina_Value *params) { int p1, p3; char p2; eina_value_struct_get(params, "param1", &p1); eina_value_struct_get(params, "param2", &p2); printf("param1: %d\nparam2: %c\n", p1, p2); if (eina_value_struct_get(params, "param3", &p3)) printf("param3: %d\n", p3); }
static void on_query_results(Esql_Res *res, void *data) { struct ctx *ctx = data; const Esql_Row *row; Eina_Iterator *itr; const char *cname; int i; assert(esql_res_rows_count(res) == INSERTED_ROWS); assert(esql_res_cols_count(res) == 2); ctx->res++; printf("results %u: rows=%d, columns=%d\n", ctx->res, esql_res_rows_count(res), esql_res_cols_count(res)); cname = esql_res_col_name_get(res, 0); assert(cname!=NULL); assert(strcmp(cname, "i") == 0); cname = esql_res_col_name_get(res, 1); assert(cname!=NULL); assert(strcmp(cname, "s") == 0); i = 0; itr = esql_res_row_iterator_new(res); EINA_ITERATOR_FOREACH(itr, row) { const Eina_Value *val = esql_row_value_struct_get(row); const char *str; char buf[100]; int num; assert(eina_value_struct_get(val, "i", &num)); assert(i == num); snprintf(buf, sizeof(buf), "some-text-%10d", i); assert(eina_value_struct_get(val, "s", &str)); assert(str!=NULL); assert(strcmp(str, buf) == 0); i++; } eina_iterator_free(itr); ecore_main_loop_quit(); }
/** * Callbacks */ static unsigned int _esql_model_load(Esql_Res *res, void *data) { Eina_Iterator *i; const Esql_Row *r; unsigned int count = 0; Esql_Model_Table_Data *pd = (Esql_Model_Table_Data*)data; i = esql_res_row_iterator_new(res); EINA_ITERATOR_FOREACH(i, r) { Eina_Value val; if (esql_row_value_column_get(r, 0, &val)) { Eo *child; char *str = eina_value_to_string(&val); char *database = NULL, *table = NULL; unsigned int _count = 0; count = atoi(str); free(str); eina_value_flush(&val); eina_value_struct_get(pd->properties, "database", &database); eina_value_struct_get(pd->properties, "table", &table); EINA_SAFETY_ON_NULL_RETURN_VAL(database, count); EINA_SAFETY_ON_NULL_RETURN_VAL(table, count); if(count) { for(; _count < count; ++_count) { child = eo_add_ref(ESQL_MODEL_ROW_CLASS, pd->obj, esql_model_row_constructor(pd->e, database, table, _count)); pd->children_list = eina_list_append(pd->children_list, child); } } } }
static Eina_Bool _basic_append(char type, const Eina_Value *value, const Eina_Value_Struct_Desc *desc, unsigned idx, Eldbus_Message_Iter *iter) { EINA_SAFETY_ON_FALSE_RETURN_VAL( _compatible_type(type, desc->members[idx].type), EINA_FALSE); switch (type) { case 'i'://int case 'h'://fd { int32_t i; eina_value_struct_get(value, desc->members[idx].name, &i); eldbus_message_iter_basic_append(iter, type, i); break; } case 's': case 'o'://object path case 'g'://signature { const char *txt; eina_value_struct_get(value, desc->members[idx].name, &txt); eldbus_message_iter_basic_append(iter, type, txt); break; } case 'b'://boolean case 'y'://byte { unsigned char byte; eina_value_struct_get(value, desc->members[idx].name, &byte); eldbus_message_iter_basic_append(iter, type, byte); break; } case 'n'://int16 { int16_t i; eina_value_struct_get(value, desc->members[idx].name, &i); eldbus_message_iter_basic_append(iter, type, i); break; } case 'q'://uint16 { uint16_t i; eina_value_struct_get(value, desc->members[idx].name, &i); eldbus_message_iter_basic_append(iter, type, i); break; } case 'u'://uint32 { uint32_t i; eina_value_struct_get(value, desc->members[idx].name, &i); eldbus_message_iter_basic_append(iter, type, i); break; } case 'x'://int64 { int64_t i; eina_value_struct_get(value, desc->members[idx].name, &i); eldbus_message_iter_basic_append(iter, type, i); break; } case 't'://uint64 { uint64_t i; eina_value_struct_get(value, desc->members[idx].name, &i); eldbus_message_iter_basic_append(iter, type, i); break; } case 'd'://double { double d; eina_value_struct_get(value, desc->members[idx].name, &d); eldbus_message_iter_basic_append(iter, type, d); break; } default: ERR("Unexpected type %c", type); return EINA_FALSE; } return EINA_TRUE; }