diff --git a/autotests/data/vcard_extension_case_normalization.vcf b/autotests/data/vcard_extension_case_normalization.vcf new file mode 100644 --- /dev/null +++ b/autotests/data/vcard_extension_case_normalization.vcf @@ -0,0 +1,18 @@ +BEGIN:VCARD +VERSION:3.0 +FN:My Name +N:Name;My;;; +UID:628d6072-5385-41d3-ad45-cb79a3afa987 +X-KADDRESSBOOK-BLOGFEED:https://my.blog/ +X-KADDRESSBOOK-CRYPTOENCRYPTPREF:askAlways +X-KADDRESSBOOK-CRYPTOPROTOPREF:inline openpgp\,openpgp/mime\,s/mime\,s/mime + opaque\,any s/mime\,any openpgp +X-KADDRESSBOOK-CRYPTOSIGNPREF:always +X-KADDRESSBOOK-X-ANNIVERSARY:1970-01-01 +X-KADDRESSBOOK-X-ASSISTANTSNAME:Mycroft +X-KADDRESSBOOK-X-MANAGERSNAME:My Boss +X-KADDRESSBOOK-X-OFFICE:My Office +X-KADDRESSBOOK-X-PROFESSION:My Job +X-KADDRESSBOOK-X-SPOUSESNAME:My Spouse +END:VCARD + diff --git a/autotests/data/vcard_extension_case_normalization.vcf.ref b/autotests/data/vcard_extension_case_normalization.vcf.ref new file mode 100644 --- /dev/null +++ b/autotests/data/vcard_extension_case_normalization.vcf.ref @@ -0,0 +1,18 @@ +BEGIN:VCARD +VERSION:3.0 +FN:My Name +N:Name;My;;; +UID:628d6072-5385-41d3-ad45-cb79a3afa987 +X-KADDRESSBOOK-BlogFeed:https://my.blog/ +X-KADDRESSBOOK-CRYPTOENCRYPTPREF:askAlways +X-KADDRESSBOOK-CRYPTOPROTOPREF:inline openpgp\,openpgp/mime\,s/mime\,s/mime + opaque\,any s/mime\,any openpgp +X-KADDRESSBOOK-CRYPTOSIGNPREF:always +X-KADDRESSBOOK-X-Anniversary:1970-01-01 +X-KADDRESSBOOK-X-AssistantsName:Mycroft +X-KADDRESSBOOK-X-ManagersName:My Boss +X-KADDRESSBOOK-X-Office:My Office +X-KADDRESSBOOK-X-Profession:My Job +X-KADDRESSBOOK-X-SpousesName:My Spouse +END:VCARD + diff --git a/autotests/testroundtrip.qrc b/autotests/testroundtrip.qrc --- a/autotests/testroundtrip.qrc +++ b/autotests/testroundtrip.qrc @@ -16,6 +16,7 @@ data/vcard13.vcf data/vcard14.vcf data/vcard15.vcf + data/vcard_extension_case_normalization.vcf @@ -47,6 +48,7 @@ data/vcard13.vcf.ref data/vcard14.vcf.ref data/vcard15.vcf.ref + data/vcard_extension_case_normalization.vcf.ref diff --git a/src/vcardtool.cpp b/src/vcardtool.cpp --- a/src/vcardtool.cpp +++ b/src/vcardtool.cpp @@ -1159,20 +1159,30 @@ else if (identifier.startsWith(QLatin1String("x-"))) { QString ident = (*lineIt).identifier(); //X-Evolution + // also normalize case of our own extensions, some backends "adjust" that if (identifier == QLatin1String("x-evolution-spouse") || identifier == QLatin1String("x-spouse")) { ident = QStringLiteral("X-KADDRESSBOOK-X-SpousesName"); - } else if (identifier == QLatin1String("x-evolution-blog-url")) { + } else if (identifier == QLatin1String("x-evolution-blog-url") || identifier.compare(QLatin1String("X-KADDRESSBOOK-BLOGFEED"), Qt::CaseInsensitive) == 0) { ident = QStringLiteral("X-KADDRESSBOOK-BlogFeed"); } else if (identifier == QLatin1String("x-evolution-assistant") - || identifier == QLatin1String("x-assistant")) { + || identifier == QLatin1String("x-assistant") + || identifier.compare(QLatin1String("X-KADDRESSBOOK-X-ASSISTANTSNAME"), Qt::CaseInsensitive) == 0) { ident = QStringLiteral("X-KADDRESSBOOK-X-AssistantsName"); } else if (identifier == QLatin1String("x-evolution-anniversary") - || identifier == QLatin1String("x-anniversary")) { + || identifier == QLatin1String("x-anniversary") + || identifier.compare(QLatin1String("X-KADDRESSBOOK-X-ANNIVERSARY"), Qt::CaseInsensitive) == 0) { ident = QStringLiteral("X-KADDRESSBOOK-X-Anniversary"); } else if (identifier == QLatin1String("x-evolution-manager") - || identifier == QLatin1String("x-manager")) { + || identifier == QLatin1String("x-manager") + || identifier.compare(QLatin1String("X-KADDRESSBOOK-X-MANAGERSNAME"), Qt::CaseInsensitive) == 0) { ident = QStringLiteral("X-KADDRESSBOOK-X-ManagersName"); + } else if (identifier.compare(QLatin1String("X-KADDRESSBOOK-X-PROFESSION"), Qt::CaseInsensitive) == 0) { + ident = QStringLiteral("X-KADDRESSBOOK-X-Profession"); + } else if (identifier.compare(QLatin1String("X-KADDRESSBOOK-X-OFFICE"), Qt::CaseInsensitive) == 0) { + ident = QStringLiteral("X-KADDRESSBOOK-X-Office"); + } else if (identifier.compare(QLatin1String("X-KADDRESSBOOK-X-SPOUSESNAME"), Qt::CaseInsensitive) == 0) { + ident = QStringLiteral("X-KADDRESSBOOK-X-SpousesName"); } else if (identifier == QLatin1String("x-aim")) { ident = QStringLiteral("X-messaging/aim-All"); } else if (identifier == QLatin1String("x-icq")) {