void set_TagField (ID3Tag * myTag, char *data, ID3_FrameID id) { ID3Frame *myFrame; ID3Frame *pFrame; char *conv_str = NULL; myFrame = ID3Frame_NewID (id); pFrame = ID3Tag_FindFrameWithID (myTag, id); if (pFrame != NULL) { ID3Tag_RemoveFrame (myTag, pFrame); } conv_str = g_locale_from_utf8 (data, -1, NULL, NULL, NULL); ID3Field_SetASCII (ID3Frame_GetField (myFrame, ID3FN_TEXT), conv_str); ID3Tag_AttachFrame (myTag, myFrame); g_free (conv_str); return; }
static int _id3_find_and_set_frame(ID3Tag *tag, ID3_FrameID id, const char *value) { ID3Frame *frame; ID3Field *field; /* Remove existing tag to avoid issues with trashed frames. */ while ((frame = ID3Tag_FindFrameWithID(tag, id))) ID3Tag_RemoveFrame(tag, frame); if (value && strlen(value) > 0) { frame = ID3Frame_NewID(id); g_assert(frame); ID3Tag_AttachFrame(tag, frame); field = ID3Frame_GetField(frame, ID3FN_TEXT); if (field) ID3Field_SetASCII(field, value); //TODO: UTF8 else return 1; } return 0; }
/* 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); } }