summaryrefslogtreecommitdiffstats
path: root/common/domain/typeimplementations.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2017-07-03 14:02:27 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2017-07-03 14:02:27 +0200
commit55fe06979ceebe67553135b43aa47e70d931304b (patch)
tree16b10a744879cc1872d6c07624b59ae64469ddbf /common/domain/typeimplementations.cpp
parent56fae95f49a1ca8ca614bd9f89b0ea5f872765e9 (diff)
parent288946f1694c2abe1d2c5800c87339d1e8780e4b (diff)
downloadsink-55fe06979ceebe67553135b43aa47e70d931304b.tar.gz
sink-55fe06979ceebe67553135b43aa47e70d931304b.zip
Merge branch 'develop'
Diffstat (limited to 'common/domain/typeimplementations.cpp')
-rw-r--r--common/domain/typeimplementations.cpp193
1 files changed, 93 insertions, 100 deletions
diff --git a/common/domain/typeimplementations.cpp b/common/domain/typeimplementations.cpp
index eb3851e..47a9cf7 100644
--- a/common/domain/typeimplementations.cpp
+++ b/common/domain/typeimplementations.cpp
@@ -28,25 +28,52 @@
28#include "entity_generated.h" 28#include "entity_generated.h"
29#include "mail/threadindexer.h" 29#include "mail/threadindexer.h"
30#include "domainadaptor.h" 30#include "domainadaptor.h"
31#include "typeimplementations_p.h"
31 32
32using namespace Sink; 33using namespace Sink;
33using namespace Sink::ApplicationDomain; 34using namespace Sink::ApplicationDomain;
34 35
36#define SINK_REGISTER_SERIALIZER(MAPPER, ENTITYTYPE, PROPERTY, LOWERCASEPROPERTY) \
37 MAPPER.addMapping<ENTITYTYPE::PROPERTY, Sink::ApplicationDomain::Buffer::ENTITYTYPE, Sink::ApplicationDomain::Buffer::ENTITYTYPE##Builder>(&Sink::ApplicationDomain::Buffer::ENTITYTYPE::LOWERCASEPROPERTY, &Sink::ApplicationDomain::Buffer::ENTITYTYPE##Builder::add_##LOWERCASEPROPERTY);
38
39typedef IndexConfig<Mail,
40 ValueIndex<Mail::Date>,
41 ValueIndex<Mail::Folder>,
42 ValueIndex<Mail::ParentMessageId>,
43 ValueIndex<Mail::MessageId>,
44 ValueIndex<Mail::Draft>,
45 SortedIndex<Mail::Folder, Mail::Date>,
46 SecondaryIndex<Mail::MessageId, Mail::ThreadId>,
47 SecondaryIndex<Mail::ThreadId, Mail::MessageId>,
48 CustomSecondaryIndex<Mail::MessageId, Mail::ThreadId, ThreadIndexer>
49 > MailIndexConfig;
50
51typedef IndexConfig<Folder,
52 ValueIndex<Folder::Name>,
53 ValueIndex<Folder::Parent>
54 > FolderIndexConfig;
55
56typedef IndexConfig<Contact,
57 ValueIndex<Contact::Uid>
58 > ContactIndexConfig;
59
60typedef IndexConfig<Addressbook,
61 ValueIndex<Addressbook::Parent>
62 > AddressbookIndexConfig;
63
64typedef IndexConfig<Event,
65 ValueIndex<Event::Uid>
66 > EventIndexConfig;
67
68
35void TypeImplementation<Mail>::configure(TypeIndex &index) 69void TypeImplementation<Mail>::configure(TypeIndex &index)
36{ 70{
37 // index.addProperty<Mail::Sender>(); 71 MailIndexConfig::configure(index);
38 /* index.addProperty<QByteArray>(Mail::SenderName::name); */ 72}
39 /* index->addProperty<QString>(Mail::Subject::name); */
40 /* index->addFulltextProperty<QString>(Mail::Subject::name); */
41 index.addProperty<Mail::Date>();
42 index.addProperty<Mail::Folder>();
43 index.addPropertyWithSorting<Mail::Folder, Mail::Date>();
44 index.addProperty<Mail::ParentMessageId>();
45 index.addProperty<Mail::MessageId>();
46 73
47 index.addSecondaryPropertyIndexer<Mail::MessageId, Mail::ThreadId, ThreadIndexer>(); 74QMap<QByteArray, int> TypeImplementation<Mail>::typeDatabases()
48 index.addSecondaryProperty<Mail::MessageId, Mail::ThreadId>(); 75{
49 index.addSecondaryProperty<Mail::ThreadId, Mail::MessageId>(); 76 return merge(QMap<QByteArray, int>{{QByteArray{Mail::name} + ".main", 0}}, MailIndexConfig::databases());
50} 77}
51 78
52void TypeImplementation<Mail>::configure(IndexPropertyMapper &indexPropertyMapper) 79void TypeImplementation<Mail>::configure(IndexPropertyMapper &indexPropertyMapper)
@@ -61,69 +88,44 @@ void TypeImplementation<Mail>::configure(IndexPropertyMapper &indexPropertyMappe
61 }); 88 });
62} 89}
63 90
64void TypeImplementation<Mail>::configure(ReadPropertyMapper<Buffer> &propertyMapper) 91void TypeImplementation<Mail>::configure(PropertyMapper &propertyMapper)
65{ 92{
66 propertyMapper.addMapping<Mail::Sender, Buffer>(&Buffer::sender); 93 SINK_REGISTER_SERIALIZER(propertyMapper, Mail, Sender, sender);
67 propertyMapper.addMapping<Mail::To, Buffer>(&Buffer::to); 94 SINK_REGISTER_SERIALIZER(propertyMapper, Mail, To, to);
68 propertyMapper.addMapping<Mail::Cc, Buffer>(&Buffer::cc); 95 SINK_REGISTER_SERIALIZER(propertyMapper, Mail, Cc, cc);
69 propertyMapper.addMapping<Mail::Bcc, Buffer>(&Buffer::bcc); 96 SINK_REGISTER_SERIALIZER(propertyMapper, Mail, Bcc, bcc);
70 propertyMapper.addMapping<Mail::Subject, Buffer>(&Buffer::subject); 97 SINK_REGISTER_SERIALIZER(propertyMapper, Mail, Subject, subject);
71 propertyMapper.addMapping<Mail::Date, Buffer>(&Buffer::date); 98 SINK_REGISTER_SERIALIZER(propertyMapper, Mail, Date, date);
72 propertyMapper.addMapping<Mail::Unread, Buffer>(&Buffer::unread); 99 SINK_REGISTER_SERIALIZER(propertyMapper, Mail, Unread, unread);
73 propertyMapper.addMapping<Mail::Important, Buffer>(&Buffer::important); 100 SINK_REGISTER_SERIALIZER(propertyMapper, Mail, Important, important);
74 propertyMapper.addMapping<Mail::Folder, Buffer>(&Buffer::folder); 101 SINK_REGISTER_SERIALIZER(propertyMapper, Mail, Folder, folder);
75 propertyMapper.addMapping<Mail::MimeMessage, Buffer>(&Buffer::mimeMessage); 102 SINK_REGISTER_SERIALIZER(propertyMapper, Mail, MimeMessage, mimeMessage);
76 propertyMapper.addMapping<Mail::FullPayloadAvailable, Buffer>(&Buffer::fullPayloadAvailable); 103 SINK_REGISTER_SERIALIZER(propertyMapper, Mail, FullPayloadAvailable, fullPayloadAvailable);
77 propertyMapper.addMapping<Mail::Draft, Buffer>(&Buffer::draft); 104 SINK_REGISTER_SERIALIZER(propertyMapper, Mail, Draft, draft);
78 propertyMapper.addMapping<Mail::Trash, Buffer>(&Buffer::trash); 105 SINK_REGISTER_SERIALIZER(propertyMapper, Mail, Trash, trash);
79 propertyMapper.addMapping<Mail::Sent, Buffer>(&Buffer::sent); 106 SINK_REGISTER_SERIALIZER(propertyMapper, Mail, Sent, sent);
80 propertyMapper.addMapping<Mail::MessageId, Buffer>(&Buffer::messageId); 107 SINK_REGISTER_SERIALIZER(propertyMapper, Mail, MessageId, messageId);
81 propertyMapper.addMapping<Mail::ParentMessageId, Buffer>(&Buffer::parentMessageId); 108 SINK_REGISTER_SERIALIZER(propertyMapper, Mail, ParentMessageId, parentMessageId);
82}
83
84void TypeImplementation<Mail>::configure(WritePropertyMapper<BufferBuilder> &propertyMapper)
85{
86 propertyMapper.addMapping<Mail::Sender>(&BufferBuilder::add_sender);
87 propertyMapper.addMapping<Mail::To>(&BufferBuilder::add_to);
88 propertyMapper.addMapping<Mail::Cc>(&BufferBuilder::add_cc);
89 propertyMapper.addMapping<Mail::Bcc>(&BufferBuilder::add_bcc);
90 propertyMapper.addMapping<Mail::Subject>(&BufferBuilder::add_subject);
91 propertyMapper.addMapping<Mail::Date>(&BufferBuilder::add_date);
92 propertyMapper.addMapping<Mail::Unread>(&BufferBuilder::add_unread);
93 propertyMapper.addMapping<Mail::Important>(&BufferBuilder::add_important);
94 propertyMapper.addMapping<Mail::Folder>(&BufferBuilder::add_folder);
95 propertyMapper.addMapping<Mail::MimeMessage>(&BufferBuilder::add_mimeMessage);
96 propertyMapper.addMapping<Mail::FullPayloadAvailable>(&BufferBuilder::add_fullPayloadAvailable);
97 propertyMapper.addMapping<Mail::Draft>(&BufferBuilder::add_draft);
98 propertyMapper.addMapping<Mail::Trash>(&BufferBuilder::add_trash);
99 propertyMapper.addMapping<Mail::Sent>(&BufferBuilder::add_sent);
100 propertyMapper.addMapping<Mail::MessageId>(&BufferBuilder::add_messageId);
101 propertyMapper.addMapping<Mail::ParentMessageId>(&BufferBuilder::add_parentMessageId);
102} 109}
103 110
104 111
105void TypeImplementation<Folder>::configure(TypeIndex &index) 112void TypeImplementation<Folder>::configure(TypeIndex &index)
106{ 113{
107 index.addProperty<QByteArray>(Folder::Parent::name); 114 FolderIndexConfig::configure(index);
108 index.addProperty<QString>(Folder::Name::name);
109} 115}
110 116
111void TypeImplementation<Folder>::configure(ReadPropertyMapper<Buffer> &propertyMapper) 117QMap<QByteArray, int> TypeImplementation<Folder>::typeDatabases()
112{ 118{
113 propertyMapper.addMapping<Folder::Parent, Buffer>(&Buffer::parent); 119 return merge(QMap<QByteArray, int>{{QByteArray{Folder::name} + ".main", 0}}, FolderIndexConfig::databases());
114 propertyMapper.addMapping<Folder::Name, Buffer>(&Buffer::name);
115 propertyMapper.addMapping<Folder::Icon, Buffer>(&Buffer::icon);
116 propertyMapper.addMapping<Folder::SpecialPurpose, Buffer>(&Buffer::specialpurpose);
117 propertyMapper.addMapping<Folder::Enabled, Buffer>(&Buffer::enabled);
118} 120}
119 121
120void TypeImplementation<Folder>::configure(WritePropertyMapper<BufferBuilder> &propertyMapper) 122void TypeImplementation<Folder>::configure(PropertyMapper &propertyMapper)
121{ 123{
122 propertyMapper.addMapping<Folder::Parent>(&BufferBuilder::add_parent); 124 SINK_REGISTER_SERIALIZER(propertyMapper, Folder, Parent, parent);
123 propertyMapper.addMapping<Folder::Name>(&BufferBuilder::add_name); 125 SINK_REGISTER_SERIALIZER(propertyMapper, Folder, Name, name);
124 propertyMapper.addMapping<Folder::Icon>(&BufferBuilder::add_icon); 126 SINK_REGISTER_SERIALIZER(propertyMapper, Folder, Icon, icon);
125 propertyMapper.addMapping<Folder::SpecialPurpose>(&BufferBuilder::add_specialpurpose); 127 SINK_REGISTER_SERIALIZER(propertyMapper, Folder, SpecialPurpose, specialpurpose);
126 propertyMapper.addMapping<Folder::Enabled>(&BufferBuilder::add_enabled); 128 SINK_REGISTER_SERIALIZER(propertyMapper, Folder, Enabled, enabled);
127} 129}
128 130
129void TypeImplementation<Folder>::configure(IndexPropertyMapper &) 131void TypeImplementation<Folder>::configure(IndexPropertyMapper &)
@@ -134,29 +136,24 @@ void TypeImplementation<Folder>::configure(IndexPropertyMapper &)
134 136
135void TypeImplementation<Contact>::configure(TypeIndex &index) 137void TypeImplementation<Contact>::configure(TypeIndex &index)
136{ 138{
137 index.addProperty<QByteArray>(Contact::Uid::name); 139 ContactIndexConfig::configure(index);
138} 140}
139 141
140void TypeImplementation<Contact>::configure(ReadPropertyMapper<Buffer> &propertyMapper) 142QMap<QByteArray, int> TypeImplementation<Contact>::typeDatabases()
141{ 143{
142 propertyMapper.addMapping<Contact::Uid, Buffer>(&Buffer::uid); 144 return merge(QMap<QByteArray, int>{{QByteArray{Contact::name} + ".main", 0}}, ContactIndexConfig::databases());
143 propertyMapper.addMapping<Contact::Fn, Buffer>(&Buffer::fn);
144 propertyMapper.addMapping<Contact::Emails, Buffer>(&Buffer::emails);
145 propertyMapper.addMapping<Contact::Vcard, Buffer>(&Buffer::vcard);
146 propertyMapper.addMapping<Contact::Addressbook, Buffer>(&Buffer::addressbook);
147 propertyMapper.addMapping<Contact::Firstname, Buffer>(&Buffer::firstname);
148 propertyMapper.addMapping<Contact::Lastname, Buffer>(&Buffer::lastname);
149} 145}
150 146
151void TypeImplementation<Contact>::configure(WritePropertyMapper<BufferBuilder> &propertyMapper) 147void TypeImplementation<Contact>::configure(PropertyMapper &propertyMapper)
152{ 148{
153 propertyMapper.addMapping<Contact::Uid>(&BufferBuilder::add_uid); 149 SINK_REGISTER_SERIALIZER(propertyMapper, Contact, Uid, uid);
154 propertyMapper.addMapping<Contact::Fn>(&BufferBuilder::add_fn); 150 SINK_REGISTER_SERIALIZER(propertyMapper, Contact, Fn, fn);
155 propertyMapper.addMapping<Contact::Emails>(&BufferBuilder::add_emails); 151 SINK_REGISTER_SERIALIZER(propertyMapper, Contact, Emails, emails);
156 propertyMapper.addMapping<Contact::Vcard>(&BufferBuilder::add_vcard); 152 SINK_REGISTER_SERIALIZER(propertyMapper, Contact, Vcard, vcard);
157 propertyMapper.addMapping<Contact::Addressbook>(&BufferBuilder::add_addressbook); 153 SINK_REGISTER_SERIALIZER(propertyMapper, Contact, Addressbook, addressbook);
158 propertyMapper.addMapping<Contact::Firstname>(&BufferBuilder::add_firstname); 154 SINK_REGISTER_SERIALIZER(propertyMapper, Contact, Firstname, firstname);
159 propertyMapper.addMapping<Contact::Lastname>(&BufferBuilder::add_lastname); 155 SINK_REGISTER_SERIALIZER(propertyMapper, Contact, Lastname, lastname);
156 SINK_REGISTER_SERIALIZER(propertyMapper, Contact, Photo, photo);
160} 157}
161 158
162void TypeImplementation<Contact>::configure(IndexPropertyMapper &) 159void TypeImplementation<Contact>::configure(IndexPropertyMapper &)
@@ -167,20 +164,18 @@ void TypeImplementation<Contact>::configure(IndexPropertyMapper &)
167 164
168void TypeImplementation<Addressbook>::configure(TypeIndex &index) 165void TypeImplementation<Addressbook>::configure(TypeIndex &index)
169{ 166{
170 index.addProperty<QByteArray>(Addressbook::Parent::name); 167 AddressbookIndexConfig::configure(index);
171 index.addProperty<QString>(Addressbook::Name::name);
172} 168}
173 169
174void TypeImplementation<Addressbook>::configure(ReadPropertyMapper<Buffer> &propertyMapper) 170QMap<QByteArray, int> TypeImplementation<Addressbook>::typeDatabases()
175{ 171{
176 propertyMapper.addMapping<Addressbook::Parent, Buffer>(&Buffer::parent); 172 return merge(QMap<QByteArray, int>{{QByteArray{Addressbook::name} + ".main", 0}}, AddressbookIndexConfig::databases());
177 propertyMapper.addMapping<Addressbook::Name, Buffer>(&Buffer::name);
178} 173}
179 174
180void TypeImplementation<Addressbook>::configure(WritePropertyMapper<BufferBuilder> &propertyMapper) 175void TypeImplementation<Addressbook>::configure(PropertyMapper &propertyMapper)
181{ 176{
182 propertyMapper.addMapping<Addressbook::Parent>(&BufferBuilder::add_parent); 177 SINK_REGISTER_SERIALIZER(propertyMapper, Addressbook, Parent, parent);
183 propertyMapper.addMapping<Addressbook::Name>(&BufferBuilder::add_name); 178 SINK_REGISTER_SERIALIZER(propertyMapper, Addressbook, Name, name);
184} 179}
185 180
186void TypeImplementation<Addressbook>::configure(IndexPropertyMapper &) 181void TypeImplementation<Addressbook>::configure(IndexPropertyMapper &)
@@ -191,26 +186,24 @@ void TypeImplementation<Addressbook>::configure(IndexPropertyMapper &)
191 186
192void TypeImplementation<Event>::configure(TypeIndex &index) 187void TypeImplementation<Event>::configure(TypeIndex &index)
193{ 188{
194 index.addProperty<QByteArray>(Event::Uid::name); 189 EventIndexConfig::configure(index);
195} 190}
196 191
197void TypeImplementation<Event>::configure(ReadPropertyMapper<Buffer> &propertyMapper) 192QMap<QByteArray, int> TypeImplementation<Event>::typeDatabases()
198{ 193{
199 propertyMapper.addMapping<Event::Summary, Buffer>(&Buffer::summary); 194 return merge(QMap<QByteArray, int>{{QByteArray{Event::name} + ".main", 0}}, EventIndexConfig::databases());
200 propertyMapper.addMapping<Event::Description, Buffer>(&Buffer::description);
201 propertyMapper.addMapping<Event::Uid, Buffer>(&Buffer::uid);
202 propertyMapper.addMapping<Event::Attachment, Buffer>(&Buffer::attachment);
203} 195}
204 196
205void TypeImplementation<Event>::configure(WritePropertyMapper<BufferBuilder> &propertyMapper) 197void TypeImplementation<Event>::configure(PropertyMapper &propertyMapper)
206{ 198{
207 propertyMapper.addMapping<Event::Summary>(&BufferBuilder::add_summary); 199 SINK_REGISTER_SERIALIZER(propertyMapper, Event, Summary, summary);
208 propertyMapper.addMapping<Event::Description>(&BufferBuilder::add_description); 200 SINK_REGISTER_SERIALIZER(propertyMapper, Event, Description, description);
209 propertyMapper.addMapping<Event::Uid>(&BufferBuilder::add_uid); 201 SINK_REGISTER_SERIALIZER(propertyMapper, Event, Uid, uid);
210 propertyMapper.addMapping<Event::Attachment>(&BufferBuilder::add_attachment); 202 SINK_REGISTER_SERIALIZER(propertyMapper, Event, Attachment, attachment);
211} 203}
212 204
213void TypeImplementation<Event>::configure(IndexPropertyMapper &) 205void TypeImplementation<Event>::configure(IndexPropertyMapper &)
214{ 206{
215 207
216} 208}
209