diff options
author | Rémi Nicole <nicole@kolabsystems.com> | 2018-04-13 11:51:18 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2018-04-13 11:51:24 +0200 |
commit | cd81aed814286887911d99648d62bbb3c63e404c (patch) | |
tree | c98b6e65d56e5fff82ed8f8a431de47e149c38a1 /common | |
parent | edbb4c9c82e34e90ad15ad151901e65c2c2cfb66 (diff) | |
download | sink-cd81aed814286887911d99648d62bbb3c63e404c.tar.gz sink-cd81aed814286887911d99648d62bbb3c63e404c.zip |
Change most of Event's properties to extracted properties
Summary: Fix T8485
Reviewers: cmollekopf
Reviewed By: cmollekopf
Tags: #sink
Maniphest Tasks: T8485
Differential Revision: https://phabricator.kde.org/D12106
Diffstat (limited to 'common')
-rw-r--r-- | common/CMakeLists.txt | 2 | ||||
-rw-r--r-- | common/domain/applicationdomaintype.h | 10 | ||||
-rw-r--r-- | common/eventpreprocessor.cpp | 60 | ||||
-rw-r--r-- | common/eventpreprocessor.h | 35 |
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 | ) |
135 | install(TARGETS ${PROJECT_NAME} | 137 | install(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 | ||
397 | struct SINK_EXPORT Event : public Entity { | 397 | struct 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 | |||
25 | void 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 | |||
52 | void EventPropertyExtractor::newEntity(Event &event) | ||
53 | { | ||
54 | updatedIndexedProperties(event, event.getIcal()); | ||
55 | } | ||
56 | |||
57 | void 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 | |||
24 | class SINK_EXPORT EventPropertyExtractor : public Sink::EntityPreprocessor<Sink::ApplicationDomain::Event> | ||
25 | { | ||
26 | using Event = Sink::ApplicationDomain::Event; | ||
27 | |||
28 | public: | ||
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 | |||
33 | private: | ||
34 | static void updatedIndexedProperties(Event &event, const QByteArray &rawIcal); | ||
35 | }; | ||