static gboolean xmms_asx_browse (xmms_xform_t *xform, const char *url, xmms_error_t *error) { gchar buff[XMMS_XFORM_MAX_LINE_SIZE]; GMarkupParseContext *ctx; GMarkupParser parser; g_return_val_if_fail (xform, FALSE); memset (&parser, 0, sizeof (GMarkupParser)); parser.start_element = xmms_asx_handle_ref; ctx = g_markup_parse_context_new (&parser, 0, xform, NULL); xmms_error_reset (error); while (xmms_xform_read_line (xform, buff, error)) { if (!g_markup_parse_context_parse (ctx, buff, strlen (buff), NULL)) { break; } } g_markup_parse_context_free (ctx); xmms_error_reset (error); return TRUE; }
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 gboolean xmms_pls_browse (xmms_xform_t *xform, const char *url, xmms_error_t *error) { gchar buffer[XMMS_XFORM_MAX_LINE_SIZE]; gint num = -1; gchar **val; const gchar *plspath; xmms_pls_entry_t entry; g_return_val_if_fail (xform, FALSE); xmms_error_reset (error); plspath = xmms_xform_get_url (xform); if (!xmms_xform_read_line (xform, buffer, error)) { XMMS_DBG ("Error reading pls-file"); return FALSE; } /* for completeness' sake, check for the pls header here again, too * (it's already done in the magic check) */ if (g_ascii_strncasecmp (buffer, "[playlist]", 10) != 0) { XMMS_DBG ("Not a PLS file"); return FALSE; } memset (&entry, 0, sizeof (entry)); entry.num=-1; while (xmms_xform_read_line (xform, buffer, error)) { gchar *np, *ep; if (g_ascii_strncasecmp (buffer, "File", 4) == 0) { np = &buffer[4]; val = &entry.file; } else if (g_ascii_strncasecmp (buffer, "Title", 5) == 0) { np = &buffer[5]; val = &entry.title; } else { continue; } num = strtol (np, &ep, 10); if (!ep || *ep != '=') { XMMS_DBG ("Broken line '%s', skipping", buffer); continue; } ep++; /* Skip the '=' */ /* Remove leading and trailing whitespace from the value. */ g_strstrip (ep); /* Ignore empty values. */ if (!*ep) { XMMS_DBG ("Ignoring empty value in line '%s'", buffer); continue; } if (entry.num != num && entry.num != -1) { xmms_pls_add_entry (xform, plspath, &entry); } *val = g_strdup (ep); entry.num = num; } xmms_pls_add_entry (xform, plspath, &entry); return TRUE; }
static gboolean xmms_cue_browse (xmms_xform_t *xform, const gchar *url, xmms_error_t *error) { gchar line[XMMS_XFORM_MAX_LINE_SIZE]; cue_track track; gchar *p; g_return_val_if_fail (xform, FALSE); memset (&track, 0, sizeof (cue_track)); if (!xmms_xform_read_line (xform, line, error)) { xmms_error_set (error, XMMS_ERROR_INVAL, "error reading cue-file!"); return FALSE; } do { p = skip_white_space (line); if (g_ascii_strncasecmp (p, "FILE", 4) == 0) { if (track.file[0]) { add_track (xform, &track); } p = skip_to_char (p, '"'); p ++; save_to_char (p, '"', track.file); } else if (g_ascii_strncasecmp (p, "TRACK", 5) == 0) { p = skip_to_char (p, ' '); p = skip_white_space (p); p = skip_to_char (p, ' '); p = skip_white_space (p); if (g_ascii_strncasecmp (p, "AUDIO", 5) == 0) { cue_track *t = g_new0 (cue_track, 1); track.tracks = g_list_prepend (track.tracks, t); } } else if (g_ascii_strncasecmp (p, "INDEX", 5) == 0) { cue_track *t = g_list_nth_data (track.tracks, 0); if (!t) { continue; } p = skip_to_char (p, ' '); p = skip_white_space (p); p = skip_to_char (p, ' '); p = skip_white_space (p); add_index (t, p); } else if (g_ascii_strncasecmp (p, "TITLE", 5) == 0) { cue_track *t = g_list_nth_data (track.tracks, 0); p = skip_to_char (p, '"'); p ++; if (!t) { save_to_char (p, '"', track.album); } else { save_to_char (p, '"', t->title); } } else if (g_ascii_strncasecmp (p, "PERFORMER", 9) == 0) { cue_track *t = g_list_nth_data (track.tracks, 0); p = skip_to_char (p, '"'); p ++; if (!t) { save_to_char (p, '"', track.artist); } else { save_to_char (p, '"', t->artist); } } } while (xmms_xform_read_line (xform, line, error)); if (track.file[0]) { add_track (xform, &track); } xmms_error_reset (error); return TRUE; }