static PyObject * flac_MetadataSimpleIterator_set_block (flac_MetadataSimpleIteratorObject *self, PyObject *args) { FLAC__bool use_padding; PyFLAC_StreamMetadataObject *metadata; PyFLAC_CHECK_initialized(self); use_padding = true; if (!PyArg_ParseTuple(args, "O!|O&", PyFLAC_type(StreamMetadata), &metadata, PyFLAC_bool_conv, &use_padding)) return NULL; if (FLAC__metadata_simple_iterator_set_block(self->iterator, metadata->metadata, use_padding)) Py_RETURN_NONE; if (flac_MetadataSimpleIterator_PyErr_FromIteratorStatus(self) < 0) return NULL; if (FLAC__metadata_simple_iterator_get_block_type(self->iterator) == FLAC__METADATA_TYPE_STREAMINFO) PyErr_Format(PyExc_TypeError, "must be " PyFLAC_name(StreamMetadataStreamInfo) ", not %.50s", Py_TYPE(metadata)->tp_name); else PyErr_SetString(PyExc_TypeError, "cannot set a " PyFLAC_name(StreamMetadataStreamInfo)); return NULL; }
int flac_write( const char* filename, const char *predicate, const char* uri ) { if (strcmp(predicate, LL_LICENSE) != 0) { return -LL_E_MODULE_WRITE_FAIL; /* We only know License */ } int ret = 1; FLAC__Metadata_SimpleIterator *iter = FLAC__metadata_simple_iterator_new(); if (FLAC__metadata_simple_iterator_init(iter,filename,false,false) && FLAC__metadata_simple_iterator_is_writable(iter)) { FLAC__bool found_vc = false; do { if (FLAC__metadata_simple_iterator_get_block_type(iter) == FLAC__METADATA_TYPE_VORBIS_COMMENT) { FLAC__StreamMetadata *vc; found_vc = true; vc = FLAC__metadata_simple_iterator_get_block(iter); if (uri) { FLAC__StreamMetadata_VorbisComment_Entry entry; FLAC__metadata_object_vorbiscomment_entry_from_name_value_pair(&entry, "LICENSE", uri); FLAC__metadata_object_vorbiscomment_replace_comment(vc,entry,true,false); } else { int i = FLAC__metadata_object_vorbiscomment_find_entry_from(vc,0,"LICENSE"); if (i != -1) { FLAC__metadata_object_vorbiscomment_delete_comment(vc,i); } } ret = FLAC__metadata_simple_iterator_set_block(iter, vc, true); FLAC__metadata_object_delete(vc); break; } } while (FLAC__metadata_simple_iterator_next(iter)); if (!found_vc && uri) { FLAC__StreamMetadata *vc = FLAC__metadata_object_new(FLAC__METADATA_TYPE_VORBIS_COMMENT); FLAC__StreamMetadata_VorbisComment_Entry entry; FLAC__metadata_object_vorbiscomment_entry_from_name_value_pair(&entry, "LICENSE", uri); FLAC__metadata_object_vorbiscomment_append_comment(vc,entry,false); ret = FLAC__metadata_simple_iterator_insert_block_after(iter,vc,true); FLAC__metadata_object_delete(vc); } } else { ret = 0; } FLAC__metadata_simple_iterator_delete(iter); return ret; }