static xmms_fetch_spec_t * xmms_fetch_spec_new_organize (xmmsv_t *fetch, xmms_fetch_info_t *info, s4_sourcepref_t *prefs, xmms_error_t *err) { xmms_fetch_spec_t *spec; xmmsv_dict_iter_t *it; s4_sourcepref_t *sp; xmmsv_t *org_data; gint org_idx; if (!xmmsv_dict_get (fetch, "data", &org_data)) { xmms_error_set (err, XMMS_ERROR_INVAL, "Required field 'data' not set in organize."); return NULL; } if (xmmsv_get_type (org_data) != XMMSV_TYPE_DICT) { xmms_error_set (err, XMMS_ERROR_INVAL, "Field 'data' in organize must be a dict."); return NULL; } sp = normalize_source_preferences (fetch, prefs, err); if (xmms_error_iserror (err)) { return NULL; } spec = g_new0 (xmms_fetch_spec_t, 1); spec->type = FETCH_ORGANIZE; spec->data.organize.count = xmmsv_dict_get_size (org_data); spec->data.organize.keys = g_new0 (const char *, spec->data.organize.count); spec->data.organize.data = g_new0 (xmms_fetch_spec_t *, spec->data.organize.count); org_idx = 0; xmmsv_get_dict_iter (org_data, &it); while (xmmsv_dict_iter_valid (it)) { xmms_fetch_spec_t *orgee; const gchar *str; xmmsv_t *entry; xmmsv_dict_iter_pair (it, &str, &entry); orgee = xmms_fetch_spec_new (entry, info, sp, err); if (xmms_error_iserror (err)) { xmms_fetch_spec_free (spec); spec = NULL; break; } spec->data.organize.keys[org_idx] = str; spec->data.organize.data[org_idx] = orgee; org_idx++; xmmsv_dict_iter_next (it); } xmmsv_dict_iter_explicit_destroy (it); s4_sourcepref_unref (sp); return spec; }
static xmmsv_t * convert_ghashtable_to_xmmsv (GHashTable *table, xmms_fetch_spec_t *spec) { GHashTableIter iter; s4_resultset_t *value; const gchar *key; xmmsv_t *ret; g_hash_table_iter_init (&iter, table); ret = xmmsv_new_dict (); while (g_hash_table_iter_next (&iter, (gpointer *) &key, (gpointer *) &value)) { xmmsv_t *converted; if (value == NULL) { continue; } converted = xmms_medialib_query_to_xmmsv (value, spec); xmmsv_dict_set (ret, key, converted); xmmsv_unref (converted); } if (xmmsv_dict_get_size (ret) == 0) { xmmsv_unref (ret); ret = NULL; } return ret; }
static VALUE c_dict_empty (VALUE self) { RbDict *dict = NULL; int size; Data_Get_Struct (self, RbDict, dict); size = xmmsv_dict_get_size (dict->real); return size == 0 ? Qtrue : Qfalse; }
static VALUE c_dict_size (VALUE self) { RbDict *dict = NULL; int size; Data_Get_Struct (self, RbDict, dict); size = xmmsv_dict_get_size (dict->real); return INT2NUM (size); }
static void _xmms_coll_dump (xmmsv_t *coll, int indent) { xmmsv_t *attributes, *operands, *idlist; const char *type_str; printf ("/* collection */ {\n"); type_str = collection_type_string (xmmsv_coll_get_type (coll)); _xmmsv_coll_dump_indent (indent + 1); printf ("'type': '%s'", type_str); attributes = xmmsv_coll_attributes_get (coll); if (xmmsv_dict_get_size (attributes)) { printf (",\n"); _xmmsv_coll_dump_indent (indent + 1); printf ("'attributes': "); xmmsv_dump_indented (attributes, indent + 1); } operands = xmmsv_coll_operands_get (coll); if (xmmsv_list_get_size (operands)) { printf (",\n"); _xmmsv_coll_dump_indent (indent + 1); printf ("'operands': "); xmmsv_dump_indented (operands, indent + 1); } idlist = xmmsv_coll_idlist_get (coll); if (xmmsv_list_get_size (idlist)) { printf (",\n"); _xmmsv_coll_dump_indent (indent + 1); printf ("'idlist': "); xmmsv_dump_indented (idlist, indent + 1); } printf ("\n"); _xmmsv_coll_dump_indent (indent); printf ("}"); }