From ae439547d303c34bfd7447fdd7145498794f1de8 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Thu, 23 Mar 2017 16:11:23 +0100 Subject: DomainType::name --- common/domain/applicationdomaintype.cpp | 64 ++++++--------------------------- common/domain/applicationdomaintype.h | 52 +++++++++------------------ 2 files changed, 26 insertions(+), 90 deletions(-) diff --git a/common/domain/applicationdomaintype.cpp b/common/domain/applicationdomaintype.cpp index c9cef3f..44f5a75 100644 --- a/common/domain/applicationdomaintype.cpp +++ b/common/domain/applicationdomaintype.cpp @@ -65,6 +65,9 @@ int registerProperty() { return 0; } +#define SINK_REGISTER_ENTITY(ENTITY) \ + constexpr const char *ENTITY::name; + #define SINK_REGISTER_PROPERTY(ENTITYTYPE, PROPERTY) \ constexpr const char *ENTITYTYPE::PROPERTY::name; \ static int foo##ENTITYTYPE##PROPERTY = registerProperty(); @@ -72,6 +75,10 @@ int registerProperty() { namespace Sink { namespace ApplicationDomain { +constexpr const char *SinkResource::name; +constexpr const char *SinkAccount::name; + +SINK_REGISTER_ENTITY(Mail); SINK_REGISTER_PROPERTY(Mail, Sender); SINK_REGISTER_PROPERTY(Mail, To); SINK_REGISTER_PROPERTY(Mail, Cc); @@ -90,6 +97,7 @@ SINK_REGISTER_PROPERTY(Mail, MessageId); SINK_REGISTER_PROPERTY(Mail, ParentMessageId); SINK_REGISTER_PROPERTY(Mail, ThreadId); +SINK_REGISTER_ENTITY(Folder); SINK_REGISTER_PROPERTY(Folder, Name); SINK_REGISTER_PROPERTY(Folder, Icon); SINK_REGISTER_PROPERTY(Folder, SpecialPurpose); @@ -98,6 +106,7 @@ SINK_REGISTER_PROPERTY(Folder, Parent); SINK_REGISTER_PROPERTY(Folder, Count); SINK_REGISTER_PROPERTY(Folder, FullContentAvailable); +SINK_REGISTER_ENTITY(Contact); SINK_REGISTER_PROPERTY(Contact, Uid); SINK_REGISTER_PROPERTY(Contact, Fn); SINK_REGISTER_PROPERTY(Contact, Firstname); @@ -106,6 +115,7 @@ SINK_REGISTER_PROPERTY(Contact, Emails); SINK_REGISTER_PROPERTY(Contact, Vcard); SINK_REGISTER_PROPERTY(Contact, Addressbook); +SINK_REGISTER_ENTITY(Addressbook); SINK_REGISTER_PROPERTY(Addressbook, Name); SINK_REGISTER_PROPERTY(Addressbook, Parent); SINK_REGISTER_PROPERTY(Addressbook, LastUpdated); @@ -384,60 +394,6 @@ SinkResource CardDavResource::create(const QByteArray &account) return resource; } -template<> -QByteArray getTypeName() -{ - return "contact"; -} - -template<> -QByteArray getTypeName() -{ - return "addressbook"; -} - -template<> -QByteArray getTypeName() -{ - return "event"; -} - -template<> -QByteArray getTypeName() -{ - return "todo"; -} - -template<> -QByteArray getTypeName() -{ - return "resource"; -} - -template<> -QByteArray getTypeName() -{ - return "account"; -} - -template<> -QByteArray getTypeName() -{ - return "identity"; -} - -template<> -QByteArray getTypeName() -{ - return "mail"; -} - -template<> -QByteArray getTypeName() -{ - return "folder"; -} - QByteArrayList getTypeNames() { static QByteArrayList types; diff --git a/common/domain/applicationdomaintype.h b/common/domain/applicationdomaintype.h index 74b747d..47e5cfd 100644 --- a/common/domain/applicationdomaintype.h +++ b/common/domain/applicationdomaintype.h @@ -28,7 +28,8 @@ #include #include "bufferadaptor.h" -#define SINK_ENTITY(TYPE) \ +#define SINK_ENTITY(TYPE, LOWERCASENAME) \ + static constexpr const char *name = #LOWERCASENAME; \ typedef QSharedPointer Ptr; \ using Entity::Entity; \ TYPE() = default; \ @@ -280,6 +281,7 @@ SINK_EXPORT QDebug operator<< (QDebug d, const BLOB &blob); struct SINK_EXPORT SinkAccount : public ApplicationDomainType { + static constexpr const char *name = "account"; typedef QSharedPointer Ptr; explicit SinkAccount(const QByteArray &resourceInstanceIdentifier, const QByteArray &identifier, qint64 revision, const QSharedPointer &adaptor); explicit SinkAccount(const QByteArray &identifier); @@ -302,6 +304,7 @@ struct SINK_EXPORT SinkAccount : public ApplicationDomainType { * and for creating and removing resource instances. */ struct SINK_EXPORT SinkResource : public ApplicationDomainType { + static constexpr const char *name = "resource"; typedef QSharedPointer Ptr; explicit SinkResource(const QByteArray &resourceInstanceIdentifier, const QByteArray &identifier, qint64 revision, const QSharedPointer &adaptor); explicit SinkResource(const QByteArray &identifier); @@ -325,7 +328,7 @@ struct SINK_EXPORT Entity : public ApplicationDomainType { }; struct SINK_EXPORT Addressbook : public Entity { - SINK_ENTITY(Addressbook); + SINK_ENTITY(Addressbook, addressbook); SINK_REFERENCE_PROPERTY(Addressbook, Parent, parent); SINK_PROPERTY(QString, Name, name); SINK_EXTRACTED_PROPERTY(QDateTime, LastUpdated, lastUpdated); @@ -341,7 +344,7 @@ struct SINK_EXPORT Contact : public Entity { Type type; QString email; }; - SINK_ENTITY(Contact); + SINK_ENTITY(Contact, contact); SINK_PROPERTY(QString, Uid, uid); SINK_PROPERTY(QString, Fn, fn); SINK_PROPERTY(QString, Firstname, firstname); @@ -352,7 +355,7 @@ struct SINK_EXPORT Contact : public Entity { }; struct SINK_EXPORT Event : public Entity { - SINK_ENTITY(Event); + SINK_ENTITY(Event, event); SINK_PROPERTY(QString, Uid, uid); SINK_PROPERTY(QString, Summary, summary); SINK_PROPERTY(QString, Description, description); @@ -360,15 +363,15 @@ struct SINK_EXPORT Event : public Entity { }; struct SINK_EXPORT Todo : public Entity { - SINK_ENTITY(Todo); + SINK_ENTITY(Todo, todo); }; struct SINK_EXPORT Calendar : public Entity { - SINK_ENTITY(Calendar); + SINK_ENTITY(Calendar, calendar); }; struct SINK_EXPORT Folder : public Entity { - SINK_ENTITY(Folder); + SINK_ENTITY(Folder, folder); SINK_REFERENCE_PROPERTY(Folder, Parent, parent); SINK_PROPERTY(QString, Name, name); SINK_PROPERTY(QByteArray, Icon, icon); @@ -385,7 +388,7 @@ struct SINK_EXPORT Mail : public Entity { QString emailAddress; }; - SINK_ENTITY(Mail); + SINK_ENTITY(Mail, mail); SINK_EXTRACTED_PROPERTY(Contact, Sender, sender); SINK_EXTRACTED_PROPERTY(QList, To, to); SINK_EXTRACTED_PROPERTY(QList, Cc, cc); @@ -424,6 +427,7 @@ enum SINK_EXPORT Status { }; struct SINK_EXPORT Identity : public ApplicationDomainType { + static constexpr const char *name = "resource"; typedef QSharedPointer Ptr; explicit Identity(const QByteArray &resourceInstanceIdentifier, const QByteArray &identifier, qint64 revision, const QSharedPointer &adaptor); explicit Identity(const QByteArray &identifier); @@ -487,34 +491,10 @@ namespace Mail { * Do not store these types to disk, they may change over time. */ template -QByteArray SINK_EXPORT getTypeName(); - -template<> -QByteArray SINK_EXPORT getTypeName(); - -template<> -QByteArray SINK_EXPORT getTypeName(); - -template<> -QByteArray SINK_EXPORT getTypeName(); - -template<> -QByteArray SINK_EXPORT getTypeName(); - -template<> -QByteArray SINK_EXPORT getTypeName(); - -template<> -QByteArray SINK_EXPORT getTypeName(); - -template<> -QByteArray SINK_EXPORT getTypeName(); - -template<> -QByteArray SINK_EXPORT getTypeName(); - -template<> -QByteArray SINK_EXPORT getTypeName(); +QByteArray SINK_EXPORT getTypeName() +{ + return DomainType::name; +} QByteArrayList SINK_EXPORT getTypeNames(); -- cgit v1.2.3