Example #1
0
/**
 * Returns a collection with a LIMIT operator added
 *
 * @param coll The collection to add the limit operator to
 * @param lim_start The index of the first element to include, or 0 to disable
 * @param lim_len The length of the interval, or 0 to disable
 * @return A new collection with LIMIT operator added
 */
xmmsv_t *
xmmsv_coll_add_limit_operator (xmmsv_t *coll, int lim_start, int lim_len)
{
	xmmsv_t *ret;
	char str[12];

	x_return_val_if_fail (lim_start >= 0 && lim_len >= 0, NULL);

	if (lim_start == 0 && lim_len == 0) {
		return xmmsv_ref (coll);
	}

	ret = xmmsv_new_coll (XMMS_COLLECTION_TYPE_LIMIT);
	xmmsv_coll_add_operand (ret, coll);

	if (lim_start != 0) {
		int count = snprintf (str, sizeof (str), "%i", lim_start);
		if (count > 0 && count < sizeof (str)) {
			xmmsv_coll_attribute_set_string (ret, "start", str);
		} else {
			x_api_warning ("could not set collection limit operator start");
		}
	}

	if (lim_len != 0) {
		int count = snprintf (str, sizeof (str), "%i", lim_len);
		if (count > 0 && count < sizeof (str)) {
			xmmsv_coll_attribute_set_string (ret, "length", str);
		} else {
			x_api_warning ("could not set collection limit operator length");
		}
	}

	return ret;
}
Example #2
0
static void
updater_remove_directory (updater_t *updater, GFile *file)
{
	xmmsc_result_t *res;
	xmmsv_t *univ, *coll;
	gchar *path, *pattern, *encoded;

	path = g_file_get_path (file);
	encoded = xmmsv_encode_url (path);
	g_free (path);

	pattern = g_strdup_printf ("file://%s/*", encoded);
	g_free (encoded);

	univ = xmmsv_new_coll (XMMS_COLLECTION_TYPE_UNIVERSE);
	coll = xmmsv_new_coll (XMMS_COLLECTION_TYPE_MATCH);

	xmmsv_coll_add_operand (coll, univ);
	xmmsv_coll_attribute_set_string (coll, "field", "url");
	xmmsv_coll_attribute_set_string (coll, "value", pattern);
	xmmsv_coll_attribute_set_string (coll, "case-sensitive", "true");

	g_debug ("remove '%s' from mlib", pattern);

	res = xmmsc_coll_query_ids (updater->conn, coll, NULL, 0, 0);
	xmmsc_result_notifier_set (res, updater_remove_directory_by_id, updater);
	xmmsc_result_unref (res);

	xmmsv_unref (coll);
	xmmsv_unref (univ);

	g_free (pattern);
}
Example #3
0
/* Creates a coll2 collection from a coll1 type */
static xmmsv_t *
create_coll (xmmsv_coll1_type_t type)
{
    xmmsv_t *ret;
    xmmsv_coll_type_t new_type;
    const char *idlist_type = NULL;

    switch (type) {
    case XMMS_COLLECTION1_TYPE_REFERENCE:
        new_type = XMMS_COLLECTION_TYPE_REFERENCE;
        break;
    case XMMS_COLLECTION1_TYPE_UNION:
        new_type = XMMS_COLLECTION_TYPE_UNION;
        break;
    case XMMS_COLLECTION1_TYPE_INTERSECTION:
        new_type = XMMS_COLLECTION_TYPE_INTERSECTION;
        break;
    case XMMS_COLLECTION1_TYPE_COMPLEMENT:
        new_type = XMMS_COLLECTION_TYPE_COMPLEMENT;
        break;

    case XMMS_COLLECTION1_TYPE_HAS:
        new_type = XMMS_COLLECTION_TYPE_HAS;
        break;
    case XMMS_COLLECTION1_TYPE_EQUALS:
        new_type = XMMS_COLLECTION_TYPE_EQUALS;
        break;
    case XMMS_COLLECTION1_TYPE_MATCH:
        new_type = XMMS_COLLECTION_TYPE_MATCH;
        break;
    case XMMS_COLLECTION1_TYPE_SMALLER:
        new_type = XMMS_COLLECTION_TYPE_SMALLER;
        break;
    case XMMS_COLLECTION1_TYPE_GREATER:
        new_type = XMMS_COLLECTION_TYPE_GREATER;
        break;

    case XMMS_COLLECTION1_TYPE_IDLIST:
        idlist_type = "list";
        break;
    case XMMS_COLLECTION1_TYPE_QUEUE:
        idlist_type = "queue";
        break;
    case XMMS_COLLECTION1_TYPE_PARTYSHUFFLE:
        idlist_type = "pshuffle";
        break;
    }

    if (idlist_type != NULL) {
        ret = xmmsv_new_coll (XMMS_COLLECTION_TYPE_IDLIST);
        xmmsv_coll_attribute_set_string (ret, "type", idlist_type);
    } else {
        ret = xmmsv_new_coll (new_type);
    }

    return ret;
}
Example #4
0
/* Augment the collection with new attributes needed for coll2 */
static xmmsv_t *
augment_coll (xmmsv_t *coll)
{
    xmmsv_t *ret = coll;
    const char *key;

    switch (xmmsv_coll_get_type (coll)) {
    case XMMS_COLLECTION_TYPE_HAS:
    case XMMS_COLLECTION_TYPE_MATCH:
    case XMMS_COLLECTION_TYPE_TOKEN:
    case XMMS_COLLECTION_TYPE_EQUALS:
    case XMMS_COLLECTION_TYPE_NOTEQUAL:
    case XMMS_COLLECTION_TYPE_SMALLER:
    case XMMS_COLLECTION_TYPE_SMALLEREQ:
    case XMMS_COLLECTION_TYPE_GREATER:
    case XMMS_COLLECTION_TYPE_GREATEREQ:
        if (xmmsv_coll_attribute_get_string (coll, "field", &key)
                && strcmp (key, "id") == 0) {
            xmmsv_coll_attribute_set_string (coll, "type", "id");
        } else {
            xmmsv_coll_attribute_set_string (coll, "type", "value");
        }
        break;

    case XMMS_COLLECTION_TYPE_REFERENCE:
        if (xmmsv_coll_attribute_get_string (coll, "reference", &key)
                && strcmp (key, "All Media") == 0) {
            ret = xmmsv_new_coll (XMMS_COLLECTION_TYPE_UNIVERSE);
            xmmsv_unref (coll);
        }
        break;

    default:
        break;
    }

    return ret;
}
Example #5
0
static VALUE
c_attrs_aset (VALUE self, VALUE key, VALUE value)
{
	RbCollection *coll = NULL;
	VALUE tmp;

	StringValue (key);
	StringValue (value);

	tmp = rb_iv_get (self, "collection");
	Data_Get_Struct (tmp, RbCollection, coll);

	xmmsv_coll_attribute_set_string (coll->real, StringValuePtr (key),
	                                 StringValuePtr (value));

	return Qnil;
}
Example #6
0
static int
attribute_callback (void *userdata, int cols, char **col_strs, char **col_names)
{
    xmmsv_t *coll = userdata;
    const gchar *key, *value;
    int i;

    for (i = 0; i < cols; i++) {
        if (!strcmp (col_names[i], "key")) {
            key = col_strs[i];
        } else if (!strcmp (col_names[i], "value")) {
            value = col_strs[i];
        }
    }
    xmmsv_coll_attribute_set_string (coll, key, value);

    return 0;
}
Example #7
0
	void Coll::setAttribute( const string &attrname, const string &value )
	{
		xmmsv_coll_attribute_set_string( coll_, attrname.c_str(), value.c_str() );
	}
Example #8
0
/**
 * Set a string attribute in the given collection.
 *
 * @param coll The collection in which to set the attribute.
 * @param key  The name of the attribute to set.
 * @param value The value of the attribute.
 */
void
xmmsv_coll_attribute_set (xmmsv_t *coll, const char *key, const char *value)
{
	xmmsv_coll_attribute_set_string (coll, key, value);
}