static int _id3_set(const gchar *filename, int clear, const gchar *lead_artist, const gchar *content_group, const gchar *title, const gchar *album, const gchar *content_type, const gchar *year, const gchar *comment) { int errors = 0; ID3Tag *tag; tag = ID3Tag_New(); if (!tag) return 1; ID3Tag_Link(tag, filename); if (clear) ID3Tag_Clear(tag); // TODO if (lead_artist) { errors += _id3_find_and_set_frame(tag, ID3FID_LEADARTIST, lead_artist); if (verbose) printf(" * Set ID3 tag lead artist to %s.\n", lead_artist); } if (content_group) { errors += _id3_find_and_set_frame(tag, ID3FID_CONTENTGROUP, content_group); if (verbose) printf(" * Set ID3 tag content group to %s.\n", content_group); } if (title) { errors += _id3_find_and_set_frame(tag, ID3FID_TITLE, title); if (verbose) printf(" * Set ID3 tag title to %s.\n", title); } if (album) { errors += _id3_find_and_set_frame(tag, ID3FID_ALBUM, album); if (verbose) printf(" * Set ID3 tag album to %s.\n", album); } if (content_type) { errors += _id3_find_and_set_frame(tag, ID3FID_CONTENTTYPE, content_type); if (verbose) printf(" * Set ID3 tag content type to %s.\n", content_type); } if (year) { errors += _id3_find_and_set_frame(tag, ID3FID_YEAR, year); if (verbose) printf(" * Set ID3 title year to %s.\n", year); } if (comment) { errors += _id3_find_and_set_frame(tag, ID3FID_COMMENT, comment); if (verbose) printf(" * Set ID3 tag comment to %s.\n", comment); } if (!errors) ID3Tag_Update(tag); ID3Tag_Delete(tag); return errors; }
/* Save the ID3 to the file */ void List_SaveID3(HWND hwndApp, HWND hwndList, char *filename) { LV_ITEM lvi; ID3ITEM *pItem1; int i, items; ID3Tag *tag; ID3Frame *frame; ID3Field *field; /* Strip the tag first, before completely rewriting it */ if ((tag = ID3Tag_New()) != NULL) { ID3Tag_Link(tag, filename); ID3Tag_Strip(tag, ID3TT_ALL); ID3Tag_Clear(tag); if (SendMessage(GetDlgItem(hwndApp, IDC_ID3V2TAG), BM_GETCHECK, 0, 0) == BST_UNCHECKED) { /* No frames saved */ ID3Tag_Delete(tag); EnableWindow(GetDlgItem(hwndApp, IDC_ID3V2TAG), FALSE); ListView_DeleteAllItems(hwndList); return; } /* First get the number of items */ items = ListView_GetItemCount(hwndList); if (items > 0) { for (i = 0; i < items; i++) { lvi.mask = LVIF_PARAM; lvi.iItem = i; lvi.iSubItem = 0; if (ListView_GetItem(hwndList, &lvi) == TRUE) { pItem1 = (ID3ITEM*)lvi.lParam; frame = ID3Frame_NewID(pItem1->frameId); switch (pItem1->frameId) { case ID3FID_ALBUM: case ID3FID_BPM: case ID3FID_COMPOSER: case ID3FID_CONTENTTYPE: case ID3FID_COPYRIGHT: case ID3FID_DATE: case ID3FID_PLAYLISTDELAY: case ID3FID_ENCODEDBY: case ID3FID_LYRICIST: case ID3FID_FILETYPE: case ID3FID_TIME: case ID3FID_CONTENTGROUP: case ID3FID_TITLE: case ID3FID_SUBTITLE: case ID3FID_INITIALKEY: case ID3FID_LANGUAGE: case ID3FID_SONGLEN: case ID3FID_MEDIATYPE: case ID3FID_ORIGALBUM: case ID3FID_ORIGFILENAME: case ID3FID_ORIGLYRICIST: case ID3FID_ORIGARTIST: case ID3FID_ORIGYEAR: case ID3FID_FILEOWNER: case ID3FID_LEADARTIST: case ID3FID_BAND: case ID3FID_CONDUCTOR: case ID3FID_MIXARTIST: case ID3FID_PARTINSET: case ID3FID_PUBLISHER: case ID3FID_TRACKNUM: case ID3FID_RECORDINGDATES: case ID3FID_NETRADIOSTATION: case ID3FID_NETRADIOOWNER: case ID3FID_SIZE: case ID3FID_ISRC: case ID3FID_ENCODERSETTINGS: case ID3FID_YEAR: { field = ID3Frame_GetField(frame, ID3FN_TEXT); ID3Field_SetASCII(field, pItem1->aCols[1]); ID3Tag_AddFrame(tag, frame); break; } case ID3FID_USERTEXT: case ID3FID_COMMENT: /* Can also contain an extra language field (but not used now) */ case ID3FID_UNSYNCEDLYRICS: /* Can also contain an extra language field (but not used now) */ { field = ID3Frame_GetField(frame, ID3FN_DESCRIPTION); ID3Field_SetASCII(field, pItem1->aCols[0]); field = ID3Frame_GetField(frame, ID3FN_TEXT); ID3Field_SetASCII(field, pItem1->aCols[1]); ID3Tag_AddFrame(tag, frame); break; } case ID3FID_WWWAUDIOFILE: case ID3FID_WWWARTIST: case ID3FID_WWWAUDIOSOURCE: case ID3FID_WWWCOMMERCIALINFO: case ID3FID_WWWCOPYRIGHT: case ID3FID_WWWPUBLISHER: case ID3FID_WWWPAYMENT: case ID3FID_WWWRADIOPAGE: { field = ID3Frame_GetField(frame, ID3FN_URL); ID3Field_SetASCII(field, pItem1->aCols[1]); ID3Tag_AddFrame(tag, frame); break; } case ID3FID_WWWUSER: { field = ID3Frame_GetField(frame, ID3FN_DESCRIPTION); ID3Field_SetASCII(field, pItem1->aCols[0]); field = ID3Frame_GetField(frame, ID3FN_URL); ID3Field_SetASCII(field, pItem1->aCols[1]); ID3Tag_AddFrame(tag, frame); break; } default: break; } } } ID3Tag_UpdateByTagType(tag, ID3TT_ID3V2); } ID3Tag_Delete(tag); } }