示例#1
0
static gboolean
xmms_cdda_browse (xmms_xform_t *xform, const gchar *url, xmms_error_t *error)
{
	track_t track_count, t;
	gchar cdda_url[XMMS_PATH_MAX];
	xmms_config_property_t *val;
	const gchar *device;
	gchar *disc_id;

	g_return_val_if_fail (xform, FALSE);

	val = xmms_xform_config_lookup (xform, "device");
	device = xmms_config_property_get_string (val);
	if (!get_disc_ids (device, &disc_id, 0, &track_count)) {
		return FALSE;
	}

	for (t = 1; t <= track_count; t++) {
		gchar trackno[3];

		g_snprintf (cdda_url, XMMS_PATH_MAX, "cdda://%s/%d", disc_id, t);
		XMMS_DBG ("Adding '%s'.", cdda_url);

		g_snprintf (trackno, sizeof (trackno), "%d", t);
		xmms_xform_browse_add_symlink (xform, trackno, cdda_url);
		xmms_xform_browse_add_entry_property_int (xform, "intsort", t);
	}
	g_free (disc_id);

	return TRUE;
}
示例#2
0
static void
xmms_rss_start_element (xmms_rss_data_t *data, const xmlChar *name,
                        const xmlChar **attrs)
{
	xmms_xform_t *xform = data->xform;
	int i;

	XMMS_DBG ("start elem %s", name);

	if (!attrs || !data)
		return;

	if (!xmlStrEqual (name, BAD_CAST "enclosure"))
		return;

	for (i = 0; attrs[i]; i += 2) {
		char *attr;

		if (!xmlStrEqual (attrs[i], BAD_CAST "url"))
			continue;

		attr = (char *) attrs[i + 1];

		XMMS_DBG ("Found %s", attr);
		xmms_xform_browse_add_symlink (xform, NULL, attr);

		break;
	}
}
示例#3
0
static gboolean
xmms_html_browse (xmms_xform_t *xform, const gchar *url,
                  xmms_error_t *error)
{
	gchar buffer[XMMS_XFORM_MAX_LINE_SIZE];
	const gchar *plsurl;
	gchar *tagbeg, *aurl, *full;

	xmms_error_reset (error);
	plsurl = xmms_xform_get_url (xform);

	while (xmms_xform_read_line (xform, buffer, error)) {
		tagbeg = buffer;
		while ((tagbeg = strchr (tagbeg, '<'))) {
			if ((aurl = parse_tag (++tagbeg, plsurl))) {
				full = xmms_build_playlist_url (plsurl,
				                                aurl);
				xmms_xform_browse_add_symlink (xform,
				                               NULL, full);
				g_free (full);
				g_free (aurl);
			}
		}
	}

	return TRUE;
}
示例#4
0
static gboolean
xmms_m3u_browse (xmms_xform_t *xform,
                 const gchar *url,
                 xmms_error_t *error)
{
	gchar line[XMMS_XFORM_MAX_LINE_SIZE];
	gchar *tmp;
	gchar *title = NULL;
	const gchar *d;

	g_return_val_if_fail (xform, FALSE);

	xmms_error_reset (error);

	if (!xmms_xform_read_line (xform, line, error)) {
		XMMS_DBG ("Error reading m3u-file");
		return FALSE;
	}

	d = xmms_xform_get_url (xform);

	do {
		if (line[0] == '#') {
			if (!title) {
				title = get_extinf (line);
			}
		} else {
			tmp = xmms_build_playlist_url (d, line);
			xmms_xform_browse_add_symlink (xform, NULL, tmp);

			if (title) {
				xmms_xform_browse_add_entry_property_str (xform,
				                                          "title",
				                                          title);
				g_free (title);
				title = NULL;
			}

			g_free (tmp);
		}

	} while (xmms_xform_read_line (xform, line, error));

	g_free (title);

	return TRUE;
}
示例#5
0
文件: asx.c 项目: vdust/xmms2-devel
static void
xmms_asx_handle_ref (GMarkupParseContext *context, const gchar *elem_name,
                     const gchar **attr_names, const gchar **attr_vals,
                     gpointer udata, GError **error)
{
	xmms_xform_t *xform = (xmms_xform_t *) udata;
	gint i;

	if (g_ascii_strncasecmp (elem_name, "ref", 3) != 0) {
		return;
	}

	if (!attr_names || !attr_vals || !xform)  {
		return;
	}

	for (i = 0; attr_names[i] && attr_vals[i]; i++) {
		if (g_ascii_strncasecmp (attr_names[i], "href", 4) == 0) {
			xmms_xform_browse_add_symlink (xform, NULL, attr_vals[i]);
		}
	}
}
示例#6
0
文件: pls.c 项目: chrippa/xmms2
static void
xmms_pls_add_entry (xmms_xform_t *xform,
                    const gchar *plspath,
                    xmms_pls_entry_t *e)
{
	if (e->file) {
		gchar *path;

		path = xmms_build_playlist_url (plspath, e->file);

		xmms_xform_browse_add_symlink (xform, NULL, path);
		if (e->title)
			xmms_xform_browse_add_entry_property_str (xform, "title", e->title);

		g_free (path);
		g_free (e->file);
		e->file = NULL;
	}

	if (e->title) {
		g_free (e->title);
		e->title = NULL;
	}
}
示例#7
0
static gboolean
xmms_xspf_browse_add_entries (xmms_xform_t *xform, xmlDocPtr doc,
                              xmms_error_t *error)
{
	int i;
	xmlXPathContextPtr xpath;
	xmlXPathObjectPtr obj;
	const xmlChar *playlist_image = NULL;

	xpath = xmlXPathNewContext (doc);
	xmlXPathRegisterNs (xpath,
	                    BAD_CAST "xspf",
	                    BAD_CAST "http://xspf.org/ns/0/");

	if (!xmms_xspf_check_valid_xspf (doc, xpath, error)) {
		xmlXPathFreeContext (xpath);
		return FALSE;
	}

	obj = xmlXPathEvalExpression (BAD_CAST "/xspf:playlist[@version<=1]/xspf:image/text()/..",
	                              xpath);

	if (!obj) {
		xmms_error_set (error, XMMS_ERROR_INVAL,
		                "unable to evaluate xpath expression");
		xmlXPathFreeContext (xpath);
		return FALSE;
	}

	if (xmlXPathNodeSetGetLength (obj->nodesetval) == 1) {
		playlist_image = xmlXPathNodeSetItem (obj->nodesetval, 0)->children->content;
	}

	xmlXPathFreeObject (obj);
	obj = xmlXPathEvalExpression (BAD_CAST "/xspf:playlist[@version<=1]/xspf:trackList/xspf:track/xspf:location/text()/../..",
	                              xpath);

	if (!obj) {
		xmms_error_set (error, XMMS_ERROR_INVAL,
		                "unable to evaluate xpath expression");
		xmlXPathFreeContext (xpath);
		return FALSE;
	}

	for (i = 0; i < xmlXPathNodeSetGetLength (obj->nodesetval); i++) {
		xmms_xspf_track_t *track;
		GList *attr;

		track = xmms_xspf_parse_track_node (xform,
		                                    xmlXPathNodeSetItem (obj->nodesetval, i),
		                                    error);

		if (!track) {
			continue;
		}

		xmms_xform_browse_add_symlink (xform, NULL, track->location);

		if (playlist_image) {
			xmms_xform_browse_add_entry_property_str (xform, "image", (char *)playlist_image);
		}

		for (attr = track->attrs; attr; attr = g_list_next (attr)) {
			xmms_xform_browse_add_entry_property (xform,
			                                      ((xmms_xspf_track_attr_t *)attr->data)->key,
			                                      ((xmms_xspf_track_attr_t *)attr->data)->value);
		}

		g_list_free (track->attrs);
		g_free (track);
	}

	xmlXPathFreeObject (obj);
	xmlXPathFreeContext (xpath);
	return TRUE;
}