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);
     }
}
Exemple #2
0
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);
}
Exemple #3
0
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;
}