diff --git a/autotests/data/vcard_legacy_messaging_fields.vcf b/autotests/data/vcard_legacy_messaging_fields.vcf new file mode 100644 --- /dev/null +++ b/autotests/data/vcard_legacy_messaging_fields.vcf @@ -0,0 +1,9 @@ +BEGIN:VCARD +VERSION:3.0 +FN:My Name +N:Name;My;;; +UID:12345 +X-messaging/twitter-All:kdecommunity +X-messaging/irc-All:konqui +X-messaging/xmpp-All:one@test.orgtwo@test.org +END:VCARD diff --git a/autotests/data/vcard_legacy_messaging_fields.vcf.ref b/autotests/data/vcard_legacy_messaging_fields.vcf.ref new file mode 100644 --- /dev/null +++ b/autotests/data/vcard_legacy_messaging_fields.vcf.ref @@ -0,0 +1,11 @@ +BEGIN:VCARD +VERSION:3.0 +FN:My Name +IMPP:irc:konqui +IMPP:twitter:kdecommunity +IMPP:xmpp:one@test.org +IMPP:xmpp:two@test.org +N:Name;My;;; +UID:12345 +END:VCARD + diff --git a/autotests/testroundtrip.qrc b/autotests/testroundtrip.qrc --- a/autotests/testroundtrip.qrc +++ b/autotests/testroundtrip.qrc @@ -17,6 +17,7 @@ data/vcard14.vcf data/vcard15.vcf data/vcard_extension_case_normalization.vcf + data/vcard_legacy_messaging_fields.vcf @@ -49,6 +50,7 @@ data/vcard14.vcf.ref data/vcard15.vcf.ref data/vcard_extension_case_normalization.vcf.ref + data/vcard_legacy_messaging_fields.vcf.ref diff --git a/src/vcardtool.cpp b/src/vcardtool.cpp --- a/src/vcardtool.cpp +++ b/src/vcardtool.cpp @@ -1210,8 +1210,22 @@ const QString key = ident.mid(2); const int dash = key.indexOf(QLatin1Char('-')); - addr.insertCustom(key.left(dash), key.mid(dash + 1), - (*lineIt).value().toString()); + + // convert legacy messaging fields into IMPP ones + if (key.startsWith(QLatin1String("messaging/"))) { + QUrl url; + url.setScheme(normalizeImppServiceType(key.mid(10, dash - 10))); + const auto values = (*lineIt).value().toString().split(QChar(0xE000), QString::SkipEmptyParts); + for (const auto &value : values) { + url.setPath(value); + Impp impp; + impp.setParameters((*lineIt).parameterMap()); + impp.setAddress(url); + addr.insertImpp(impp); + } + } else { + addr.insertCustom(key.left(dash), key.mid(dash + 1), (*lineIt).value().toString()); + } } } }