summaryrefslogtreecommitdiffstats
path: root/common/domain/typeimplementations.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2017-03-21 13:09:46 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2017-03-21 13:13:56 +0100
commit7a98c9853726ed09abd35a447f9854c5459a855d (patch)
tree50aa14c43ab616529d35fdf91f6ed8d69887c8ab /common/domain/typeimplementations.cpp
parenta2a4d09cbd42d3de8380ee0061a80cdc0bfb4e6c (diff)
downloadsink-7a98c9853726ed09abd35a447f9854c5459a855d.tar.gz
sink-7a98c9853726ed09abd35a447f9854c5459a855d.zip
Move type implementations in one place
Having them separated is rather pointless (since we need one for every type, and all types are the interface of sink, as one), and caused quite a bit of friction when adding new types. This will also make it easier to change things for all types.
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}