summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/CMakeLists.txt2
-rw-r--r--common/domain/applicationdomaintype.h10
-rw-r--r--common/eventpreprocessor.cpp60
-rw-r--r--common/eventpreprocessor.h35
4 files changed, 102 insertions, 5 deletions
diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt
index 9c4d4f1..51145fd 100644
--- a/common/CMakeLists.txt
+++ b/common/CMakeLists.txt
@@ -70,6 +70,7 @@ set(command_SRCS
70 synchronizerstore.cpp 70 synchronizerstore.cpp
71 contactpreprocessor.cpp 71 contactpreprocessor.cpp
72 mailpreprocessor.cpp 72 mailpreprocessor.cpp
73 eventpreprocessor.cpp
73 specialpurposepreprocessor.cpp 74 specialpurposepreprocessor.cpp
74 datastorequery.cpp 75 datastorequery.cpp
75 storage/entitystore.cpp 76 storage/entitystore.cpp
@@ -130,6 +131,7 @@ PRIVATE
130 Qt5::Gui 131 Qt5::Gui
131 KF5::Mime 132 KF5::Mime
132 KF5::Contacts 133 KF5::Contacts
134 KF5::CalendarCore
133 ${XAPIAN_LIBRARIES} 135 ${XAPIAN_LIBRARIES}
134) 136)
135install(TARGETS ${PROJECT_NAME} 137install(TARGETS ${PROJECT_NAME}
diff --git a/common/domain/applicationdomaintype.h b/common/domain/applicationdomaintype.h
index 43d385c..f3c954a 100644
--- a/common/domain/applicationdomaintype.h
+++ b/common/domain/applicationdomaintype.h
@@ -396,11 +396,11 @@ struct SINK_EXPORT Calendar : public Entity {
396 396
397struct SINK_EXPORT Event : public Entity { 397struct SINK_EXPORT Event : public Entity {
398 SINK_ENTITY(Event, event); 398 SINK_ENTITY(Event, event);
399 SINK_PROPERTY(QString, Uid, uid); 399 SINK_EXTRACTED_PROPERTY(QString, Uid, uid);
400 SINK_PROPERTY(QString, Summary, summary); 400 SINK_EXTRACTED_PROPERTY(QString, Summary, summary);
401 SINK_PROPERTY(QString, Description, description); 401 SINK_EXTRACTED_PROPERTY(QString, Description, description);
402 SINK_PROPERTY(QDateTime, StartTime, startTime); 402 SINK_EXTRACTED_PROPERTY(QDateTime, StartTime, startTime);
403 SINK_PROPERTY(QDateTime, EndTime, endTime); 403 SINK_EXTRACTED_PROPERTY(QDateTime, EndTime, endTime);
404 SINK_PROPERTY(QByteArray, Ical, ical); 404 SINK_PROPERTY(QByteArray, Ical, ical);
405 SINK_REFERENCE_PROPERTY(Calendar, Calendar, calendar); 405 SINK_REFERENCE_PROPERTY(Calendar, Calendar, calendar);
406}; 406};
diff --git a/common/eventpreprocessor.cpp b/common/eventpreprocessor.cpp
new file mode 100644
index 0000000..e087563
--- /dev/null
+++ b/common/eventpreprocessor.cpp
@@ -0,0 +1,60 @@
1/*
2 * Copyright (C) 2018 Christian Mollekopf <chrigi_1@fastmail.fm>
3 * Copyright (C) 2018 Rémi Nicole <minijackson@riseup.net>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the
17 * Free Software Foundation, Inc.,
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 */
20
21#include "eventpreprocessor.h"
22
23#include <KCalCore/ICalFormat>
24
25void EventPropertyExtractor::updatedIndexedProperties(Event &event, const QByteArray &rawIcal)
26{
27 auto incidence = KCalCore::ICalFormat().readIncidence(rawIcal);
28
29 if(!incidence) {
30 SinkWarning() << "Invalid ICal to process, ignoring...";
31 return;
32 }
33
34 if(incidence->type() != KCalCore::IncidenceBase::IncidenceType::TypeEvent) {
35 SinkWarning() << "ICal to process is not of type `Event`, ignoring...";
36 return;
37 }
38
39 auto icalEvent = dynamic_cast<const KCalCore::Event *>(incidence.data());
40 // Should be guaranteed by the incidence->type() condition above.
41 Q_ASSERT(icalEvent);
42
43 SinkTrace() << "Extracting properties for event:" << icalEvent->summary();
44
45 event.setExtractedUid(icalEvent->uid());
46 event.setExtractedSummary(icalEvent->summary());
47 event.setExtractedDescription(icalEvent->description());
48 event.setExtractedStartTime(icalEvent->dtStart());
49 event.setExtractedEndTime(icalEvent->dtEnd());
50}
51
52void EventPropertyExtractor::newEntity(Event &event)
53{
54 updatedIndexedProperties(event, event.getIcal());
55}
56
57void EventPropertyExtractor::modifiedEntity(const Event &oldEvent, Event &newEvent)
58{
59 updatedIndexedProperties(newEvent, newEvent.getIcal());
60}
diff --git a/common/eventpreprocessor.h b/common/eventpreprocessor.h
new file mode 100644
index 0000000..3fde8b2
--- /dev/null
+++ b/common/eventpreprocessor.h
@@ -0,0 +1,35 @@
1/*
2 * Copyright (C) 2018 Christian Mollekopf <chrigi_1@fastmail.fm>
3 * Copyright (C) 2018 Rémi Nicole <minijackson@riseup.net>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the
17 * Free Software Foundation, Inc.,
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 */
20
21#include "pipeline.h"
22#include "sink_export.h"
23
24class SINK_EXPORT EventPropertyExtractor : public Sink::EntityPreprocessor<Sink::ApplicationDomain::Event>
25{
26 using Event = Sink::ApplicationDomain::Event;
27
28public:
29 virtual ~EventPropertyExtractor() {}
30 virtual void newEntity(Event &event) Q_DECL_OVERRIDE;
31 virtual void modifiedEntity(const Event &oldEvent, Event &newEvent) Q_DECL_OVERRIDE;
32
33private:
34 static void updatedIndexedProperties(Event &event, const QByteArray &rawIcal);
35};