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; }
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; } }
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; }
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; }
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]); } } }
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; } }
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; }