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.orgtwo@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());
+ }
}
}
}