void update_tag(ape_tag *tag, char *filename) { WavpackContext *ctx; char error_buff [80]; ctx = WavpackOpenFileInput (filename, error_buff, OPEN_TAGS | OPEN_EDIT_TAGS, 0); if (!ctx) { char text[256]; sprintf(text, "File \"%s\" not found or is read protected!\n", filename); xmms_show_message("File-Error", (gchar *) text, "Ok", FALSE, NULL, NULL); return; } if (strlen (tag->album)) WavpackAppendTagItem (ctx, "Album", tag->album, strlen (tag->album)); else WavpackDeleteTagItem (ctx, "Album"); if (strlen (tag->artist)) WavpackAppendTagItem (ctx, "Artist", tag->artist, strlen (tag->artist)); else WavpackDeleteTagItem (ctx, "Artist"); if (strlen (tag->comment)) WavpackAppendTagItem (ctx, "Comment", tag->comment, strlen (tag->comment)); else WavpackDeleteTagItem (ctx, "Comment"); if (strlen (tag->genre)) WavpackAppendTagItem (ctx, "Genre", tag->genre, strlen (tag->genre)); else WavpackDeleteTagItem (ctx, "Genre"); if (strlen (tag->title)) WavpackAppendTagItem (ctx, "Title", tag->title, strlen (tag->title)); else WavpackDeleteTagItem (ctx, "Title"); if (strlen (tag->track)) WavpackAppendTagItem (ctx, "Track", tag->track, strlen (tag->track)); else WavpackDeleteTagItem (ctx, "Track"); if (strlen (tag->year)) WavpackAppendTagItem (ctx, "Year", tag->year, strlen (tag->year)); else WavpackDeleteTagItem (ctx, "Year"); if (!WavpackWriteTag (ctx)) { char text[256]; sprintf(text, "Couldn't write tag to \"%s\"!\n", filename); xmms_show_message("File-Error", (gchar *) text, "Ok", FALSE, NULL, NULL); } WavpackCloseFile (ctx); }
gboolean Wavpack_Tag_Write_File_Tag (ET_File *ETFile) { WavpackContext *wpc; gchar *filename = ((File_Name *)((GList *)ETFile->FileNameCur)->data)->value; File_Tag *FileTag = (File_Tag *)ETFile->FileTag->data; gchar *buffer; int open_flags = OPEN_EDIT_TAGS; g_return_val_if_fail (ETFile != NULL && ETFile->FileTag != NULL, FALSE); wpc = WavpackOpenFileInput(filename, NULL, open_flags, 0); if ( wpc == NULL ) { return FALSE; } /* * Title */ if (FileTag->title && WavpackAppendTagItem(wpc, "title", FileTag->title, strlen(FileTag->title)) == 0) { return FALSE; } /* * Artist */ if (FileTag->artist && WavpackAppendTagItem(wpc, "artist", FileTag->artist, strlen(FileTag->artist)) == 0) { return FALSE; } /* * Album */ if (FileTag->album && WavpackAppendTagItem(wpc, "album", FileTag->album, strlen(FileTag->album)) == 0) { return FALSE; } /* * Discnumber */ if (FileTag->disc_number && FileTag->disc_total) { buffer = g_strdup_printf ("%s/%s", FileTag->disc_number, FileTag->disc_total); if (WavpackAppendTagItem (wpc, "part", buffer, strlen (buffer)) == 0) { g_free (buffer); return FALSE; } else { g_free (buffer); } } else { if (FileTag->disc_number && WavpackAppendTagItem (wpc, "part", FileTag->disc_number, strlen (FileTag->disc_number)) == 0) { return FALSE; } } /* * Year */ if (FileTag->year && WavpackAppendTagItem(wpc, "year", FileTag->year, strlen(FileTag->year)) == 0) { return FALSE; } /* * Tracknumber + tracktotal */ if (FileTag->track_total) { buffer = g_strdup_printf("%s/%s", FileTag->track, FileTag->track_total); if (FileTag->track && WavpackAppendTagItem(wpc, "track", buffer, strlen(buffer)) == 0) { g_free(buffer); return FALSE; } else { g_free(buffer); } } else { if (FileTag->track && WavpackAppendTagItem(wpc, "track", FileTag->track, strlen(FileTag->track)) == 0) { return FALSE; } } /* * Genre */ if (FileTag->genre && WavpackAppendTagItem(wpc, "genre", FileTag->genre, strlen(FileTag->genre)) == 0) { return FALSE; } /* * Comment */ if (FileTag->comment && WavpackAppendTagItem(wpc, "comment", FileTag->comment, strlen(FileTag->comment)) == 0) { return FALSE; } /* * Composer */ if (FileTag->composer && WavpackAppendTagItem(wpc, "composer", FileTag->composer, strlen(FileTag->composer)) == 0) { return FALSE; } /* * Original artist */ if (FileTag->orig_artist && WavpackAppendTagItem(wpc, "original artist", FileTag->orig_artist, strlen(FileTag->orig_artist)) == 0) { return FALSE; } /* * Copyright */ if (FileTag->copyright && WavpackAppendTagItem(wpc, "copyright", FileTag->copyright, strlen(FileTag->copyright)) == 0) { return FALSE; } /* * URL */ if (FileTag->url && WavpackAppendTagItem(wpc, "copyright url", FileTag->url, strlen(FileTag->url)) == 0) { return FALSE; } /* * Encoded by */ if (FileTag->encoded_by && WavpackAppendTagItem(wpc, "encoded by", FileTag->encoded_by, strlen(FileTag->encoded_by)) == 0) { return FALSE; } WavpackWriteTag(wpc); WavpackCloseFile(wpc); return TRUE; }
gboolean wavpack_tag_write_file_tag (const ET_File *ETFile, GError **error) { WavpackStreamReader writer = { wavpack_read_bytes, wavpack_get_pos, wavpack_set_pos_abs, wavpack_set_pos_rel, wavpack_push_back_byte, wavpack_get_length, wavpack_can_seek, wavpack_write_bytes }; GFile *file; EtWavpackWriteState state; const gchar *filename; const File_Tag *FileTag; WavpackContext *wpc; gchar message[80]; gchar *buffer; g_return_val_if_fail (ETFile != NULL && ETFile->FileTag != NULL, FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); filename = ((File_Name *)((GList *)ETFile->FileNameCur)->data)->value; FileTag = (File_Tag *)ETFile->FileTag->data; file = g_file_new_for_path (filename); state.error = NULL; state.iostream = g_file_open_readwrite (file, NULL, &state.error); g_object_unref (file); if (!state.iostream) { g_propagate_error (error, state.error); return FALSE; } state.istream = G_FILE_INPUT_STREAM (g_io_stream_get_input_stream (G_IO_STREAM (state.iostream))); state.ostream = G_FILE_OUTPUT_STREAM (g_io_stream_get_output_stream (G_IO_STREAM (state.iostream))); state.seekable = G_SEEKABLE (state.iostream); /* NULL for the WavPack correction file. */ wpc = WavpackOpenFileInputEx (&writer, &state, NULL, message, OPEN_EDIT_TAGS, 0); if (wpc == NULL) { if (state.error) { g_propagate_error (error, state.error); } else { g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, "%s", message); } g_object_unref (state.iostream); return FALSE; } /* Title. */ if (!et_wavpack_append_or_delete_tag_item (wpc, "title", FileTag->title)) { goto err; } /* Artist. */ if (!et_wavpack_append_or_delete_tag_item (wpc, "artist", FileTag->artist)) { goto err; } /* Album artist. */ if (!et_wavpack_append_or_delete_tag_item (wpc, "album artist", FileTag->album_artist)) { goto err; } /* Album. */ if (!et_wavpack_append_or_delete_tag_item (wpc, "album", FileTag->album)) { goto err; } /* Discnumber. */ if (FileTag->disc_number && FileTag->disc_total) { buffer = g_strdup_printf ("%s/%s", FileTag->disc_number, FileTag->disc_total); if (!et_wavpack_append_or_delete_tag_item (wpc, "part", buffer)) { g_free (buffer); goto err; } else { g_free (buffer); } } else { if (!et_wavpack_append_or_delete_tag_item (wpc, "part", FileTag->disc_number)) { goto err; } } /* Year. */ if (!et_wavpack_append_or_delete_tag_item (wpc, "year", FileTag->year)) { goto err; } /* Tracknumber + tracktotal. */ if (FileTag->track_total) { buffer = g_strdup_printf ("%s/%s", FileTag->track, FileTag->track_total); if (!et_wavpack_append_or_delete_tag_item (wpc, "track", buffer)) { g_free (buffer); goto err; } else { g_free (buffer); } } else { if (!et_wavpack_append_or_delete_tag_item (wpc, "track", FileTag->track)) { goto err; } } /* Genre. */ if (!et_wavpack_append_or_delete_tag_item (wpc, "genre", FileTag->genre)) { goto err; } /* Comment. */ if (!et_wavpack_append_or_delete_tag_item (wpc, "comment", FileTag->comment)) { goto err; } /* Composer. */ if (!et_wavpack_append_or_delete_tag_item (wpc, "composer", FileTag->composer)) { goto err; } /* Original artist. */ if (!et_wavpack_append_or_delete_tag_item (wpc, "original artist", FileTag->orig_artist)) { goto err; } /* Copyright. */ if (!et_wavpack_append_or_delete_tag_item (wpc, "copyright", FileTag->copyright)) { goto err; } /* URL. */ if (!et_wavpack_append_or_delete_tag_item (wpc, "copyright url", FileTag->url)) { goto err; } /* Encoded by. */ if (!et_wavpack_append_or_delete_tag_item (wpc, "encoded by", FileTag->encoded_by)) { goto err; } if (WavpackWriteTag (wpc) == 0) { goto err; } WavpackCloseFile (wpc); g_object_unref (state.iostream); return TRUE; err: g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, "%s", WavpackGetErrorMessage (wpc)); WavpackCloseFile (wpc); return FALSE; }