Suppress "field not supported" for ID3v1 fields if writing ID3v2 as well

This commit is contained in:
Martchus 2023-05-03 21:00:59 +02:00
parent 27a1d6b81e
commit 0e36eec6c7
2 changed files with 6 additions and 3 deletions

View File

@ -675,6 +675,7 @@ void setTagInfo(const SetTagInfoArgs &args)
diag.emplace_back(DiagLevel::Critical, "Can not create appropriate tags for file.", context);
} else {
// iterate through all tags
const auto willWriteAnId3v2Tag = fileInfo.hasId3v2Tag();
for (auto *tag : tags) {
// clear current values if option is present
if (args.removeOtherFieldsArg.isPresent()) {
@ -781,10 +782,12 @@ void setTagInfo(const SetTagInfoArgs &args)
argsToString("An IO error occurred when parsing the specified file \"", path, "\": ", e.what()), context);
}
}
// finally set the values
// finally set/clear the values
try {
// add error if field is not supported unless it is just ID3v1 and we are writing an ID3v2 tag as well
if ((!convertedValues.empty() || convertedId3v2CoverValues.empty())
&& !denotedScope.field.setValues(tag, tagType, convertedValues)) {
&& !denotedScope.field.setValues(tag, tagType, convertedValues)
&& (tagType != TagType::Id3v1Tag || !willWriteAnId3v2Tag)) {
diag.emplace_back(DiagLevel::Critical,
argsToString("Unable set field \"", denotedScope.field.name(), "\": setting field is not supported"), context);
}

View File

@ -259,7 +259,7 @@ void CliTests::testModifyingCover()
const auto lyrics = "lyrics>=" + lyricsFile;
const char *const args1[] = { "tageditor", "get", "-f", mp3File1.data(), nullptr };
const char *const args2[] = { "tageditor", "set", otherCover.data(), frontCover0.data(), frontCover1.data(), backCover0.data(), lyrics.data(),
"-f", mp3File1.data(), nullptr };
"--pedantic", "-f", mp3File1.data(), nullptr };
CPPUNIT_ASSERT_EQUAL(0, execApp(args2, stdout, stderr));
CPPUNIT_ASSERT_EQUAL(0, execApp(args1, stdout, stderr));
CPPUNIT_ASSERT_MESSAGE("covers added",