Warn when encoding not supported
This commit is contained in:
parent
43b55e0a5a
commit
cbe6b800cd
|
@ -538,4 +538,20 @@ bool FieldId::setValues(Tag *tag, TagType tagType, const std::vector<TagValue> &
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string tagName(const Tag *tag)
|
||||||
|
{
|
||||||
|
stringstream ss;
|
||||||
|
const TagType tagType = tag->type();
|
||||||
|
// write tag name and target, eg. MP4/iTunes tag
|
||||||
|
ss << tag->typeName();
|
||||||
|
if(tagType == TagType::Id3v2Tag) {
|
||||||
|
// version only interesting for ID3v2 tags?
|
||||||
|
ss << " (version " << tag->version() << ')';
|
||||||
|
}
|
||||||
|
if(tagType == TagType::MatroskaTag || !tag->target().isEmpty()) {
|
||||||
|
ss << " targeting \"" << tag->targetString() << '\"';
|
||||||
|
}
|
||||||
|
return ss.str();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -264,6 +264,7 @@ uint64 parseUInt64(const ApplicationUtilities::Argument &arg, uint64 defaultValu
|
||||||
TagTarget::IdContainerType parseIds(const std::string &concatenatedIds);
|
TagTarget::IdContainerType parseIds(const std::string &concatenatedIds);
|
||||||
bool applyTargetConfiguration(TagTarget &target, const std::string &configStr);
|
bool applyTargetConfiguration(TagTarget &target, const std::string &configStr);
|
||||||
FieldDenotations parseFieldDenotations(const ApplicationUtilities::Argument &fieldsArg, bool readOnly);
|
FieldDenotations parseFieldDenotations(const ApplicationUtilities::Argument &fieldsArg, bool readOnly);
|
||||||
|
std::string tagName(const Tag *tag);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -265,15 +265,7 @@ void displayTagInfo(const Argument &fieldsArg, const Argument &filesArg, const A
|
||||||
// determine tag type
|
// determine tag type
|
||||||
const TagType tagType = tag->type();
|
const TagType tagType = tag->type();
|
||||||
// write tag name and target, eg. MP4/iTunes tag
|
// write tag name and target, eg. MP4/iTunes tag
|
||||||
cout << tag->typeName();
|
cout << tagName(tag) << endl;
|
||||||
if(tagType == TagType::Id3v2Tag) {
|
|
||||||
// version only interesting for ID3v2 tags?
|
|
||||||
cout << " (version " << tag->version() << ')';
|
|
||||||
}
|
|
||||||
if(tagType == TagType::MatroskaTag || !tag->target().isEmpty()) {
|
|
||||||
cout << " targeting \"" << tag->targetString() << '\"';
|
|
||||||
}
|
|
||||||
cout << endl;
|
|
||||||
// iterate through fields specified by the user
|
// iterate through fields specified by the user
|
||||||
if(fields.empty()) {
|
if(fields.empty()) {
|
||||||
for(auto field = firstKnownField; field != KnownField::Invalid; field = nextKnownField(field)) {
|
for(auto field = firstKnownField; field != KnownField::Invalid; field = nextKnownField(field)) {
|
||||||
|
@ -431,6 +423,14 @@ void setTagInfo(const SetTagInfoArgs &args)
|
||||||
const auto tagType = tag->type();
|
const auto tagType = tag->type();
|
||||||
const bool targetSupported = tag->supportsTarget();
|
const bool targetSupported = tag->supportsTarget();
|
||||||
const auto tagTarget = tag->target();
|
const auto tagTarget = tag->target();
|
||||||
|
// determine the encoding to store text values
|
||||||
|
TagTextEncoding usedEncoding = denotedEncoding;
|
||||||
|
if(!tag->canEncodingBeUsed(denotedEncoding)) {
|
||||||
|
usedEncoding = tag->proposedTextEncoding();
|
||||||
|
if(args.encodingArg.isPresent()) {
|
||||||
|
fileInfo.addNotification(NotificationType::Warning, argsToString("Can't use specified encoding \"", args.encodingArg.values().front(), "\" in ", tagName(tag), " because the tag format/version doesn't support it."), context);
|
||||||
|
}
|
||||||
|
}
|
||||||
// iterate through all denoted field values
|
// iterate through all denoted field values
|
||||||
for(auto &fieldDenotation : fields) {
|
for(auto &fieldDenotation : fields) {
|
||||||
const FieldScope &denotedScope = fieldDenotation.first;
|
const FieldScope &denotedScope = fieldDenotation.first;
|
||||||
|
@ -477,10 +477,6 @@ void setTagInfo(const SetTagInfoArgs &args)
|
||||||
fileInfo.addNotification(NotificationType::Critical, "An IO error occured when parsing the specified cover file.", context);
|
fileInfo.addNotification(NotificationType::Critical, "An IO error occured when parsing the specified cover file.", context);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
TagTextEncoding usedEncoding = denotedEncoding;
|
|
||||||
if(!tag->canEncodingBeUsed(denotedEncoding)) {
|
|
||||||
usedEncoding = tag->proposedTextEncoding();
|
|
||||||
}
|
|
||||||
convertedValues.emplace_back(relevantDenotedValue->value, TagTextEncoding::Utf8, usedEncoding);
|
convertedValues.emplace_back(relevantDenotedValue->value, TagTextEncoding::Utf8, usedEncoding);
|
||||||
if(relevantDenotedValue->type == DenotationType::Increment && tag == tags.back()) {
|
if(relevantDenotedValue->type == DenotationType::Increment && tag == tags.back()) {
|
||||||
relevantDenotedValue->value = incremented(relevantDenotedValue->value);
|
relevantDenotedValue->value = incremented(relevantDenotedValue->value);
|
||||||
|
@ -495,7 +491,7 @@ void setTagInfo(const SetTagInfoArgs &args)
|
||||||
try {
|
try {
|
||||||
denotedScope.field.setValues(tag, tagType, convertedValues);
|
denotedScope.field.setValues(tag, tagType, convertedValues);
|
||||||
} catch(const ConversionException &e) {
|
} catch(const ConversionException &e) {
|
||||||
fileInfo.addNotification(NotificationType::Critical, "Unable to parse denoted field ID \"" % string(denotedScope.field.name()) % "\": " + e.what(), context);
|
fileInfo.addNotification(NotificationType::Critical, argsToString("Unable to parse denoted field ID \"", denotedScope.field.name(), "\": ", e.what()), context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue