While the Versit API provides a convenient way to import and export vCards, it is common to encounter domain-specific vCard properties that the Versit importer and exporter classes don't support. While it would be convenient if the base Versit module could support everything, that is not possible because there may be properties with the same name that have different semantics in different domains.
To remedy this, some hooks are provided to allow clients to alter the behaviour of QVersitContactImporter and QVersitContactExporter. The basic mechanisms that allow this are the QVersitContactImporterPropertyHandlerV2 and the QVersitContactExporterDetailHandlerV2 interfaces. A client can supplement the importer and exporter classes by implementing these interfaces and associating them using QVersitContactImporter::setPropertyHandler() and QVersitContactExporter::setDetailHandler().
While these interfaces allow a single client to supplement the behaviour of import and export, there are many cases where the entire deployment of the Versit library will be operating under a known context. For example, the library might be deployed on a device on a particular network where all of its peers are known to support certain properties. In this situation, it's desirable for all clients of the Versit library on that device to support those properties through the Versit API. It is possible to extend the library globally by installing plugins that provide handlers automatically to all users of the library on the system.
Writing a plugin involves these steps:
Q_OBJECT Q_INTERFACES(QtMobility::QVersitContactHandlerFactory)
Please see the relevant documentation in Qt for more details on writing a plugin.
A plugin is provided with the Qt Versit module that provides backup and restore functionality to the exporter and importer.
These can be used by creating the exporter and importer under the "backup" profile:
QVersitContactExporter exporter(QVersitContactHandlerFactory::ProfileBackup);
QVersitContactImporter importer(QVersitContactHandlerFactory::ProfileBackup);
When applied to the exporter, this handler encodes all writable details that the exporter doesn't recognise. The format it uses to encode the detail is as follows:
For example, a detail with definition name "Pet" and fields "Name"="Rex" and "Age"=(int)14 will be exported to the vCard properties:
G0.X-NOKIA-QCONTACTFIELD;DETAIL=Pet;FIELD=Name:Rex G0.X-NOKIA-QCONTACTFIELD;DETAIL=Pet;FIELD=Age;DATATYPE=INT:14
And the next detail (say, "Pet" with a field "Name"="Molly" will generate:
G1.X-NOKIA-QCONTACTFIELD;DETAIL=Pet;FIELD=Name:Molly
When applied to the importer, this handler decodes the properties that were generated by the exporter under the backup profile.
The code for this plugin can be perused in the plugins/versit/backuphandler directory.