summaryrefslogtreecommitdiffstats
path: root/common/domain/typeimplementations.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'common/domain/typeimplementations.cpp')
-rw-r--r--common/domain/typeimplementations.cpp218
1 files changed, 218 insertions, 0 deletions
diff --git a/common/domain/typeimplementations.cpp b/common/domain/typeimplementations.cpp
new file mode 100644
index 0000000..38422f4
--- /dev/null
+++ b/common/domain/typeimplementations.cpp
@@ -0,0 +1,218 @@
1/*
2 * Copyright (C) 2015 Christian Mollekopf <chrigi_1@fastmail.fm>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the
16 * Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19#include "typeimplementations.h"
20
21#include <QVector>
22#include <QByteArray>
23#include <QString>
24
25#include "../propertymapper.h"
26#include "../typeindex.h"
27#include "entitybuffer.h"
28#include "entity_generated.h"
29#include "mail/threadindexer.h"
30#include "domainadaptor.h"
31
32#include "mail_generated.h"
33#include "folder_generated.h"
34#include "event_generated.h"
35#include "contact_generated.h"
36#include "addressbook_generated.h"
37
38using namespace Sink;
39using namespace Sink::ApplicationDomain;
40
41void TypeImplementation<Mail>::configure(TypeIndex &index)
42{
43 // index.addProperty<Mail::Sender>();
44 /* index.addProperty<QByteArray>(Mail::SenderName::name); */
45 /* index->addProperty<QString>(Mail::Subject::name); */
46 /* index->addFulltextProperty<QString>(Mail::Subject::name); */
47 index.addProperty<Mail::Date>();
48 index.addProperty<Mail::Folder>();
49 index.addPropertyWithSorting<Mail::Folder, Mail::Date>();
50 index.addProperty<Mail::ParentMessageId>();
51 index.addProperty<Mail::MessageId>();
52
53 index.addSecondaryPropertyIndexer<Mail::MessageId, Mail::ThreadId, ThreadIndexer>();
54 index.addSecondaryProperty<Mail::MessageId, Mail::ThreadId>();
55 index.addSecondaryProperty<Mail::ThreadId, Mail::MessageId>();
56}
57
58void TypeImplementation<Mail>::configure(IndexPropertyMapper &indexPropertyMapper)
59{
60 indexPropertyMapper.addIndexLookupProperty<Mail::ThreadId>([](TypeIndex &index, const ApplicationDomain::BufferAdaptor &entity) {
61 auto messageId = entity.getProperty(Mail::MessageId::name);
62 auto thread = index.secondaryLookup<Mail::MessageId, Mail::ThreadId>(messageId);
63 if (!thread.isEmpty()) {
64 return thread.first();
65 }
66 return QByteArray{};
67 });
68}
69
70void TypeImplementation<Mail>::configure(ReadPropertyMapper<Buffer> &propertyMapper)
71{
72 propertyMapper.addMapping<Mail::Sender, Buffer>(&Buffer::sender);
73 propertyMapper.addMapping<Mail::To, Buffer>(&Buffer::to);
74 propertyMapper.addMapping<Mail::Cc, Buffer>(&Buffer::cc);
75 propertyMapper.addMapping<Mail::Bcc, Buffer>(&Buffer::bcc);
76 propertyMapper.addMapping<Mail::Subject, Buffer>(&Buffer::subject);
77 propertyMapper.addMapping<Mail::Date, Buffer>(&Buffer::date);
78 propertyMapper.addMapping<Mail::Unread, Buffer>(&Buffer::unread);
79 propertyMapper.addMapping<Mail::Important, Buffer>(&Buffer::important);
80 propertyMapper.addMapping<Mail::Folder, Buffer>(&Buffer::folder);
81 propertyMapper.addMapping<Mail::MimeMessage, Buffer>(&Buffer::mimeMessage);
82 propertyMapper.addMapping<Mail::FullPayloadAvailable, Buffer>(&Buffer::fullPayloadAvailable);
83 propertyMapper.addMapping<Mail::Draft, Buffer>(&Buffer::draft);
84 propertyMapper.addMapping<Mail::Trash, Buffer>(&Buffer::trash);
85 propertyMapper.addMapping<Mail::Sent, Buffer>(&Buffer::sent);
86 propertyMapper.addMapping<Mail::MessageId, Buffer>(&Buffer::messageId);
87 propertyMapper.addMapping<Mail::ParentMessageId, Buffer>(&Buffer::parentMessageId);
88}
89
90void TypeImplementation<Mail>::configure(WritePropertyMapper<BufferBuilder> &propertyMapper)
91{
92 propertyMapper.addMapping<Mail::Sender>(&BufferBuilder::add_sender);
93 propertyMapper.addMapping<Mail::To>(&BufferBuilder::add_to);
94 propertyMapper.addMapping<Mail::Cc>(&BufferBuilder::add_cc);
95 propertyMapper.addMapping<Mail::Bcc>(&BufferBuilder::add_bcc);
96 propertyMapper.addMapping<Mail::Subject>(&BufferBuilder::add_subject);
97 propertyMapper.addMapping<Mail::Date>(&BufferBuilder::add_date);
98 propertyMapper.addMapping<Mail::Unread>(&BufferBuilder::add_unread);
99 propertyMapper.addMapping<Mail::Important>(&BufferBuilder::add_important);
100 propertyMapper.addMapping<Mail::Folder>(&BufferBuilder::add_folder);
101 propertyMapper.addMapping<Mail::MimeMessage>(&BufferBuilder::add_mimeMessage);
102 propertyMapper.addMapping<Mail::FullPayloadAvailable>(&BufferBuilder::add_fullPayloadAvailable);
103 propertyMapper.addMapping<Mail::Draft>(&BufferBuilder::add_draft);
104 propertyMapper.addMapping<Mail::Trash>(&BufferBuilder::add_trash);
105 propertyMapper.addMapping<Mail::Sent>(&BufferBuilder::add_sent);
106 propertyMapper.addMapping<Mail::MessageId>(&BufferBuilder::add_messageId);
107 propertyMapper.addMapping<Mail::ParentMessageId>(&BufferBuilder::add_parentMessageId);
108}
109
110
111void TypeImplementation<Folder>::configure(TypeIndex &index)
112{
113 index.addProperty<QByteArray>(Folder::Parent::name);
114 index.addProperty<QString>(Folder::Name::name);
115}
116
117void TypeImplementation<Folder>::configure(ReadPropertyMapper<Buffer> &propertyMapper)
118{
119 propertyMapper.addMapping<Folder::Parent, Buffer>(&Buffer::parent);
120 propertyMapper.addMapping<Folder::Name, Buffer>(&Buffer::name);
121 propertyMapper.addMapping<Folder::Icon, Buffer>(&Buffer::icon);
122 propertyMapper.addMapping<Folder::SpecialPurpose, Buffer>(&Buffer::specialpurpose);
123 propertyMapper.addMapping<Folder::Enabled, Buffer>(&Buffer::enabled);
124}
125
126void TypeImplementation<Folder>::configure(WritePropertyMapper<BufferBuilder> &propertyMapper)
127{
128 propertyMapper.addMapping<Folder::Parent>(&BufferBuilder::add_parent);
129 propertyMapper.addMapping<Folder::Name>(&BufferBuilder::add_name);
130 propertyMapper.addMapping<Folder::Icon>(&BufferBuilder::add_icon);
131 propertyMapper.addMapping<Folder::SpecialPurpose>(&BufferBuilder::add_specialpurpose);
132 propertyMapper.addMapping<Folder::Enabled>(&BufferBuilder::add_enabled);
133}
134
135void TypeImplementation<Folder>::configure(IndexPropertyMapper &)
136{
137
138}
139
140
141void TypeImplementation<Contact>::configure(TypeIndex &index)
142{
143 index.addProperty<QByteArray>(Contact::Uid::name);
144}
145
146void TypeImplementation<Contact>::configure(ReadPropertyMapper<Buffer> &propertyMapper)
147{
148 propertyMapper.addMapping<Contact::Uid, Buffer>(&Buffer::uid);
149 propertyMapper.addMapping<Contact::Fn, Buffer>(&Buffer::fn);
150 propertyMapper.addMapping<Contact::Emails, Buffer>(&Buffer::emails);
151 propertyMapper.addMapping<Contact::Vcard, Buffer>(&Buffer::vcard);
152 propertyMapper.addMapping<Contact::Addressbook, Buffer>(&Buffer::addressbook);
153}
154
155void TypeImplementation<Contact>::configure(WritePropertyMapper<BufferBuilder> &propertyMapper)
156{
157 propertyMapper.addMapping<Contact::Uid>(&BufferBuilder::add_uid);
158 propertyMapper.addMapping<Contact::Fn>(&BufferBuilder::add_fn);
159 propertyMapper.addMapping<Contact::Emails>(&BufferBuilder::add_emails);
160 propertyMapper.addMapping<Contact::Vcard>(&BufferBuilder::add_vcard);
161 propertyMapper.addMapping<Contact::Addressbook>(&BufferBuilder::add_addressbook);
162}
163
164void TypeImplementation<Contact>::configure(IndexPropertyMapper &)
165{
166
167}
168
169
170void TypeImplementation<Addressbook>::configure(TypeIndex &index)
171{
172 index.addProperty<QByteArray>(Addressbook::Parent::name);
173 index.addProperty<QString>(Addressbook::Name::name);
174}
175
176void TypeImplementation<Addressbook>::configure(ReadPropertyMapper<Buffer> &propertyMapper)
177{
178 propertyMapper.addMapping<Addressbook::Parent, Buffer>(&Buffer::parent);
179 propertyMapper.addMapping<Addressbook::Name, Buffer>(&Buffer::name);
180}
181
182void TypeImplementation<Addressbook>::configure(WritePropertyMapper<BufferBuilder> &propertyMapper)
183{
184 propertyMapper.addMapping<Addressbook::Parent>(&BufferBuilder::add_parent);
185 propertyMapper.addMapping<Addressbook::Name>(&BufferBuilder::add_name);
186}
187
188void TypeImplementation<Addressbook>::configure(IndexPropertyMapper &)
189{
190
191}
192
193
194void TypeImplementation<Event>::configure(TypeIndex &index)
195{
196 index.addProperty<QByteArray>(Event::Uid::name);
197}
198
199void TypeImplementation<Event>::configure(ReadPropertyMapper<Buffer> &propertyMapper)
200{
201 propertyMapper.addMapping<Event::Summary, Buffer>(&Buffer::summary);
202 propertyMapper.addMapping<Event::Description, Buffer>(&Buffer::description);
203 propertyMapper.addMapping<Event::Uid, Buffer>(&Buffer::uid);
204 propertyMapper.addMapping<Event::Attachment, Buffer>(&Buffer::attachment);
205}
206
207void TypeImplementation<Event>::configure(WritePropertyMapper<BufferBuilder> &propertyMapper)
208{
209 propertyMapper.addMapping<Event::Summary>(&BufferBuilder::add_summary);
210 propertyMapper.addMapping<Event::Description>(&BufferBuilder::add_description);
211 propertyMapper.addMapping<Event::Uid>(&BufferBuilder::add_uid);
212 propertyMapper.addMapping<Event::Attachment>(&BufferBuilder::add_attachment);
213}
214
215void TypeImplementation<Event>::configure(IndexPropertyMapper &)
216{
217
218}