tagreader: Fix displaying of seconds in length, UTF-8 for ostream

The padding was wrong, 8 seconds were displayed as 0:80 instead of 0:08.
Also make the output of tagreader and tagreader_c the same, including
the encoding, which was still ISO-8859-1 for std::ostream.
This commit is contained in:
Urs Fleisch 2023-10-21 15:57:26 +02:00
parent 0db487bf61
commit 135c0eb647
4 changed files with 16 additions and 15 deletions

View File

@ -56,18 +56,19 @@ int main(int argc, char *argv[])
cout << "genre - \"" << tag->genre() << "\"" << endl;
TagLib::PropertyMap tags = f.properties();
unsigned int longest = 0;
for(auto i = tags.cbegin(); i != tags.cend(); ++i) {
if (i->first.size() > longest) {
longest = i->first.size();
if(!tags.isEmpty()) {
unsigned int longest = 0;
for(auto i = tags.cbegin(); i != tags.cend(); ++i) {
if (i->first.size() > longest) {
longest = i->first.size();
}
}
}
cout << "-- TAG (properties) --" << endl;
for(auto i = tags.cbegin(); i != tags.cend(); ++i) {
for(auto j = i->second.begin(); j != i->second.end(); ++j) {
cout << left << std::setfill(' ') << std::setw(longest) << i->first << " - " << '"' << *j << '"' << endl;
cout << "-- TAG (properties) --" << endl;
for(auto i = tags.cbegin(); i != tags.cend(); ++i) {
for(auto j = i->second.begin(); j != i->second.end(); ++j) {
cout << left << std::setfill(' ') << std::setw(longest) << i->first << " - " << '"' << *j << '"' << endl;
}
}
}
@ -113,7 +114,7 @@ int main(int argc, char *argv[])
cout << "bitrate - " << properties->bitrate() << endl;
cout << "sample rate - " << properties->sampleRate() << endl;
cout << "channels - " << properties->channels() << endl;
cout << "length - " << minutes << ":" << setfill('0') << setw(2) << seconds << endl;
cout << "length - " << minutes << ":" << setfill('0') << setw(2) << right << seconds << endl;
}
}
return 0;

View File

@ -98,11 +98,11 @@ int main(int argc, char *argv[])
while(*keyPtr) {
TagLib_Complex_Property_Attribute*** properties =
taglib_complex_property_get(file, *keyPtr);
printf("%s:\n", *keyPtr);
if(properties != NULL) {
TagLib_Complex_Property_Attribute*** propPtr = properties;
while(*propPtr) {
TagLib_Complex_Property_Attribute** attrPtr = *propPtr;
printf("%s:\n", *keyPtr);
while(*attrPtr) {
TagLib_Complex_Property_Attribute *attr = *attrPtr;
TagLib_Variant_Type type = attr->value.type;
@ -130,7 +130,7 @@ int main(int argc, char *argv[])
printf("%f\n", attr->value.value.doubleValue);
break;
case TagLib_Variant_String:
printf("%s\n", attr->value.value.stringValue);
printf("\"%s\"\n", attr->value.value.stringValue);
break;
case TagLib_Variant_StringList:
if(attr->value.value.stringListValue) {

View File

@ -706,6 +706,6 @@ TagLib::String operator+(const TagLib::String &s1, const char *s2)
std::ostream &operator<<(std::ostream &s, const TagLib::String &str)
{
s << str.to8Bit();
s << str.to8Bit(true);
return s;
}

View File

@ -116,7 +116,7 @@ public:
void operator()(const TagLib::String &v)
{
s << '"';
for (char c : v.to8Bit()) {
for (char c : v.to8Bit(true)) {
if(c == '"') {
s << "\\\"";
}