summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--common/domain/applicationdomaintype.cpp64
-rw-r--r--common/domain/applicationdomaintype.h52
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() {
65 return 0; 65 return 0;
66} 66}
67 67
68#define SINK_REGISTER_ENTITY(ENTITY) \
69 constexpr const char *ENTITY::name;
70
68#define SINK_REGISTER_PROPERTY(ENTITYTYPE, PROPERTY) \ 71#define SINK_REGISTER_PROPERTY(ENTITYTYPE, PROPERTY) \
69 constexpr const char *ENTITYTYPE::PROPERTY::name; \ 72 constexpr const char *ENTITYTYPE::PROPERTY::name; \
70 static int foo##ENTITYTYPE##PROPERTY = registerProperty<ENTITYTYPE, ENTITYTYPE::PROPERTY>(); 73 static int foo##ENTITYTYPE##PROPERTY = registerProperty<ENTITYTYPE, ENTITYTYPE::PROPERTY>();
@@ -72,6 +75,10 @@ int registerProperty() {
72namespace Sink { 75namespace Sink {
73namespace ApplicationDomain { 76namespace ApplicationDomain {
74 77
78constexpr const char *SinkResource::name;
79constexpr const char *SinkAccount::name;
80
81SINK_REGISTER_ENTITY(Mail);
75SINK_REGISTER_PROPERTY(Mail, Sender); 82SINK_REGISTER_PROPERTY(Mail, Sender);
76SINK_REGISTER_PROPERTY(Mail, To); 83SINK_REGISTER_PROPERTY(Mail, To);
77SINK_REGISTER_PROPERTY(Mail, Cc); 84SINK_REGISTER_PROPERTY(Mail, Cc);
@@ -90,6 +97,7 @@ SINK_REGISTER_PROPERTY(Mail, MessageId);
90SINK_REGISTER_PROPERTY(Mail, ParentMessageId); 97SINK_REGISTER_PROPERTY(Mail, ParentMessageId);
91SINK_REGISTER_PROPERTY(Mail, ThreadId); 98SINK_REGISTER_PROPERTY(Mail, ThreadId);
92 99
100SINK_REGISTER_ENTITY(Folder);
93SINK_REGISTER_PROPERTY(Folder, Name); 101SINK_REGISTER_PROPERTY(Folder, Name);
94SINK_REGISTER_PROPERTY(Folder, Icon); 102SINK_REGISTER_PROPERTY(Folder, Icon);
95SINK_REGISTER_PROPERTY(Folder, SpecialPurpose); 103SINK_REGISTER_PROPERTY(Folder, SpecialPurpose);
@@ -98,6 +106,7 @@ SINK_REGISTER_PROPERTY(Folder, Parent);
98SINK_REGISTER_PROPERTY(Folder, Count); 106SINK_REGISTER_PROPERTY(Folder, Count);
99SINK_REGISTER_PROPERTY(Folder, FullContentAvailable); 107SINK_REGISTER_PROPERTY(Folder, FullContentAvailable);
100 108
109SINK_REGISTER_ENTITY(Contact);
101SINK_REGISTER_PROPERTY(Contact, Uid); 110SINK_REGISTER_PROPERTY(Contact, Uid);
102SINK_REGISTER_PROPERTY(Contact, Fn); 111SINK_REGISTER_PROPERTY(Contact, Fn);
103SINK_REGISTER_PROPERTY(Contact, Firstname); 112SINK_REGISTER_PROPERTY(Contact, Firstname);
@@ -106,6 +115,7 @@ SINK_REGISTER_PROPERTY(Contact, Emails);
106SINK_REGISTER_PROPERTY(Contact, Vcard); 115SINK_REGISTER_PROPERTY(Contact, Vcard);
107SINK_REGISTER_PROPERTY(Contact, Addressbook); 116SINK_REGISTER_PROPERTY(Contact, Addressbook);
108 117
118SINK_REGISTER_ENTITY(Addressbook);
109SINK_REGISTER_PROPERTY(Addressbook, Name); 119SINK_REGISTER_PROPERTY(Addressbook, Name);
110SINK_REGISTER_PROPERTY(Addressbook, Parent); 120SINK_REGISTER_PROPERTY(Addressbook, Parent);
111SINK_REGISTER_PROPERTY(Addressbook, LastUpdated); 121SINK_REGISTER_PROPERTY(Addressbook, LastUpdated);
@@ -384,60 +394,6 @@ SinkResource CardDavResource::create(const QByteArray &account)
384 return resource; 394 return resource;
385} 395}
386 396
387template<>
388QByteArray getTypeName<Contact>()
389{
390 return "contact";
391}
392
393template<>
394QByteArray getTypeName<Addressbook>()
395{
396 return "addressbook";
397}
398
399template<>
400QByteArray getTypeName<Event>()
401{
402 return "event";
403}
404
405template<>
406QByteArray getTypeName<Todo>()
407{
408 return "todo";
409}
410
411template<>
412QByteArray getTypeName<SinkResource>()
413{
414 return "resource";
415}
416
417template<>
418QByteArray getTypeName<SinkAccount>()
419{
420 return "account";
421}
422
423template<>
424QByteArray getTypeName<Identity>()
425{
426 return "identity";
427}
428
429template<>
430QByteArray getTypeName<Mail>()
431{
432 return "mail";
433}
434
435template<>
436QByteArray getTypeName<Folder>()
437{
438 return "folder";
439}
440
441QByteArrayList getTypeNames() 397QByteArrayList getTypeNames()
442{ 398{
443 static QByteArrayList types; 399 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 @@
28#include <QUuid> 28#include <QUuid>
29#include "bufferadaptor.h" 29#include "bufferadaptor.h"
30 30
31#define SINK_ENTITY(TYPE) \ 31#define SINK_ENTITY(TYPE, LOWERCASENAME) \
32 static constexpr const char *name = #LOWERCASENAME; \
32 typedef QSharedPointer<TYPE> Ptr; \ 33 typedef QSharedPointer<TYPE> Ptr; \
33 using Entity::Entity; \ 34 using Entity::Entity; \
34 TYPE() = default; \ 35 TYPE() = default; \
@@ -280,6 +281,7 @@ SINK_EXPORT QDebug operator<< (QDebug d, const BLOB &blob);
280 281
281 282
282struct SINK_EXPORT SinkAccount : public ApplicationDomainType { 283struct SINK_EXPORT SinkAccount : public ApplicationDomainType {
284 static constexpr const char *name = "account";
283 typedef QSharedPointer<SinkAccount> Ptr; 285 typedef QSharedPointer<SinkAccount> Ptr;
284 explicit SinkAccount(const QByteArray &resourceInstanceIdentifier, const QByteArray &identifier, qint64 revision, const QSharedPointer<BufferAdaptor> &adaptor); 286 explicit SinkAccount(const QByteArray &resourceInstanceIdentifier, const QByteArray &identifier, qint64 revision, const QSharedPointer<BufferAdaptor> &adaptor);
285 explicit SinkAccount(const QByteArray &identifier); 287 explicit SinkAccount(const QByteArray &identifier);
@@ -302,6 +304,7 @@ struct SINK_EXPORT SinkAccount : public ApplicationDomainType {
302 * and for creating and removing resource instances. 304 * and for creating and removing resource instances.
303 */ 305 */
304struct SINK_EXPORT SinkResource : public ApplicationDomainType { 306struct SINK_EXPORT SinkResource : public ApplicationDomainType {
307 static constexpr const char *name = "resource";
305 typedef QSharedPointer<SinkResource> Ptr; 308 typedef QSharedPointer<SinkResource> Ptr;
306 explicit SinkResource(const QByteArray &resourceInstanceIdentifier, const QByteArray &identifier, qint64 revision, const QSharedPointer<BufferAdaptor> &adaptor); 309 explicit SinkResource(const QByteArray &resourceInstanceIdentifier, const QByteArray &identifier, qint64 revision, const QSharedPointer<BufferAdaptor> &adaptor);
307 explicit SinkResource(const QByteArray &identifier); 310 explicit SinkResource(const QByteArray &identifier);
@@ -325,7 +328,7 @@ struct SINK_EXPORT Entity : public ApplicationDomainType {
325}; 328};
326 329
327struct SINK_EXPORT Addressbook : public Entity { 330struct SINK_EXPORT Addressbook : public Entity {
328 SINK_ENTITY(Addressbook); 331 SINK_ENTITY(Addressbook, addressbook);
329 SINK_REFERENCE_PROPERTY(Addressbook, Parent, parent); 332 SINK_REFERENCE_PROPERTY(Addressbook, Parent, parent);
330 SINK_PROPERTY(QString, Name, name); 333 SINK_PROPERTY(QString, Name, name);
331 SINK_EXTRACTED_PROPERTY(QDateTime, LastUpdated, lastUpdated); 334 SINK_EXTRACTED_PROPERTY(QDateTime, LastUpdated, lastUpdated);
@@ -341,7 +344,7 @@ struct SINK_EXPORT Contact : public Entity {
341 Type type; 344 Type type;
342 QString email; 345 QString email;
343 }; 346 };
344 SINK_ENTITY(Contact); 347 SINK_ENTITY(Contact, contact);
345 SINK_PROPERTY(QString, Uid, uid); 348 SINK_PROPERTY(QString, Uid, uid);
346 SINK_PROPERTY(QString, Fn, fn); 349 SINK_PROPERTY(QString, Fn, fn);
347 SINK_PROPERTY(QString, Firstname, firstname); 350 SINK_PROPERTY(QString, Firstname, firstname);
@@ -352,7 +355,7 @@ struct SINK_EXPORT Contact : public Entity {
352}; 355};
353 356
354struct SINK_EXPORT Event : public Entity { 357struct SINK_EXPORT Event : public Entity {
355 SINK_ENTITY(Event); 358 SINK_ENTITY(Event, event);
356 SINK_PROPERTY(QString, Uid, uid); 359 SINK_PROPERTY(QString, Uid, uid);
357 SINK_PROPERTY(QString, Summary, summary); 360 SINK_PROPERTY(QString, Summary, summary);
358 SINK_PROPERTY(QString, Description, description); 361 SINK_PROPERTY(QString, Description, description);
@@ -360,15 +363,15 @@ struct SINK_EXPORT Event : public Entity {
360}; 363};
361 364
362struct SINK_EXPORT Todo : public Entity { 365struct SINK_EXPORT Todo : public Entity {
363 SINK_ENTITY(Todo); 366 SINK_ENTITY(Todo, todo);
364}; 367};
365 368
366struct SINK_EXPORT Calendar : public Entity { 369struct SINK_EXPORT Calendar : public Entity {
367 SINK_ENTITY(Calendar); 370 SINK_ENTITY(Calendar, calendar);
368}; 371};
369 372
370struct SINK_EXPORT Folder : public Entity { 373struct SINK_EXPORT Folder : public Entity {
371 SINK_ENTITY(Folder); 374 SINK_ENTITY(Folder, folder);
372 SINK_REFERENCE_PROPERTY(Folder, Parent, parent); 375 SINK_REFERENCE_PROPERTY(Folder, Parent, parent);
373 SINK_PROPERTY(QString, Name, name); 376 SINK_PROPERTY(QString, Name, name);
374 SINK_PROPERTY(QByteArray, Icon, icon); 377 SINK_PROPERTY(QByteArray, Icon, icon);
@@ -385,7 +388,7 @@ struct SINK_EXPORT Mail : public Entity {
385 QString emailAddress; 388 QString emailAddress;
386 }; 389 };
387 390
388 SINK_ENTITY(Mail); 391 SINK_ENTITY(Mail, mail);
389 SINK_EXTRACTED_PROPERTY(Contact, Sender, sender); 392 SINK_EXTRACTED_PROPERTY(Contact, Sender, sender);
390 SINK_EXTRACTED_PROPERTY(QList<Contact>, To, to); 393 SINK_EXTRACTED_PROPERTY(QList<Contact>, To, to);
391 SINK_EXTRACTED_PROPERTY(QList<Contact>, Cc, cc); 394 SINK_EXTRACTED_PROPERTY(QList<Contact>, Cc, cc);
@@ -424,6 +427,7 @@ enum SINK_EXPORT Status {
424}; 427};
425 428
426struct SINK_EXPORT Identity : public ApplicationDomainType { 429struct SINK_EXPORT Identity : public ApplicationDomainType {
430 static constexpr const char *name = "resource";
427 typedef QSharedPointer<Identity> Ptr; 431 typedef QSharedPointer<Identity> Ptr;
428 explicit Identity(const QByteArray &resourceInstanceIdentifier, const QByteArray &identifier, qint64 revision, const QSharedPointer<BufferAdaptor> &adaptor); 432 explicit Identity(const QByteArray &resourceInstanceIdentifier, const QByteArray &identifier, qint64 revision, const QSharedPointer<BufferAdaptor> &adaptor);
429 explicit Identity(const QByteArray &identifier); 433 explicit Identity(const QByteArray &identifier);
@@ -487,34 +491,10 @@ namespace Mail {
487 * Do not store these types to disk, they may change over time. 491 * Do not store these types to disk, they may change over time.
488 */ 492 */
489template<class DomainType> 493template<class DomainType>
490QByteArray SINK_EXPORT getTypeName(); 494QByteArray SINK_EXPORT getTypeName()
491 495{
492template<> 496 return DomainType::name;
493QByteArray SINK_EXPORT getTypeName<Contact>(); 497}
494
495template<>
496QByteArray SINK_EXPORT getTypeName<Addressbook>();
497
498template<>
499QByteArray SINK_EXPORT getTypeName<Event>();
500
501template<>
502QByteArray SINK_EXPORT getTypeName<Todo>();
503
504template<>
505QByteArray SINK_EXPORT getTypeName<SinkResource>();
506
507template<>
508QByteArray SINK_EXPORT getTypeName<SinkAccount>();
509
510template<>
511QByteArray SINK_EXPORT getTypeName<Identity>();
512
513template<>
514QByteArray SINK_EXPORT getTypeName<Mail>();
515
516template<>
517QByteArray SINK_EXPORT getTypeName<Folder>();
518 498
519QByteArrayList SINK_EXPORT getTypeNames(); 499QByteArrayList SINK_EXPORT getTypeNames();
520 500