/** * Imports the MusicBrainz TrackId from the UFID tag. */ static void tag_id3_import_ufid(struct tag *mpd_tag, struct id3_tag *id3_tag) { for (unsigned i = 0;; ++i) { const struct id3_frame *frame; union id3_field *field; const id3_latin1_t *name; const id3_byte_t *value; id3_length_t length; frame = id3_tag_findframe(id3_tag, "UFID", i); if (frame == NULL) break; field = id3_frame_field(frame, 0); if (field == NULL) continue; name = id3_field_getlatin1(field); if (name == NULL || strcmp((const char *)name, "http://musicbrainz.org") != 0) continue; field = id3_frame_field(frame, 1); if (field == NULL) continue; value = id3_field_getbinarydata(field, &length); if (value == NULL || length == 0) continue; tag_add_item_n(mpd_tag, TAG_MUSICBRAINZ_TRACKID, (const char*)value, length); } }
static void xspf_text(G_GNUC_UNUSED GMarkupParseContext *context, const gchar *text, gsize text_len, gpointer user_data, G_GNUC_UNUSED GError **error) { struct xspf_parser *parser = user_data; switch (parser->state) { case ROOT: case PLAYLIST: case TRACKLIST: break; case TRACK: if (parser->song != NULL && parser->tag != TAG_NUM_OF_ITEM_TYPES) { if (parser->song->tag == NULL) parser->song->tag = tag_new(); tag_add_item_n(parser->song->tag, parser->tag, text, text_len); } break; case LOCATION: if (parser->song == NULL) { char *uri = g_strndup(text, text_len); parser->song = song_remote_new(uri); g_free(uri); } break; } }
static void asx_text(G_GNUC_UNUSED GMarkupParseContext *context, const gchar *text, gsize text_len, gpointer user_data, G_GNUC_UNUSED GError **error) { struct asx_parser *parser = user_data; switch (parser->state) { case ROOT: break; case ENTRY: if (parser->tag != TAG_NUM_OF_ITEM_TYPES) { if (parser->song->tag == NULL) parser->song->tag = tag_new(); tag_add_item_n(parser->song->tag, parser->tag, text, text_len); } break; } }