1// SPDX-FileCopyrightText: 2022 Kitsune Ral <kitsune-ral@users.sf.net>
2// SPDX-License-Identifier: LGPL-2.1-or-later
3
4#include "eventrelation.h"
5
6#include "../logging_categories_p.h"
7#include "event.h"
8
9using namespace Quotient;
10
11void JsonObjectConverter<EventRelation>::dumpTo(QJsonObject& jo,
12 const EventRelation& pod)
13{
14 if (pod.type.isEmpty()) {
15 qCWarning(MAIN) << "Empty relation type; won't dump to JSON";
16 return;
17 }
18 jo.insert(key: RelTypeKey, value: pod.type);
19 jo.insert(key: EventIdKey, value: pod.eventId);
20 if (pod.type == EventRelation::AnnotationType)
21 jo.insert(QStringLiteral("key"), value: pod.key);
22}
23
24void JsonObjectConverter<EventRelation>::fillFrom(const QJsonObject& jo,
25 EventRelation& pod)
26{
27 if (const auto replyJson = jo.value(key: EventRelation::ReplyType).toObject();
28 !replyJson.isEmpty()) {
29 pod.type = EventRelation::ReplyType;
30 fromJson(json: replyJson[EventIdKey], pod&: pod.eventId);
31 } else {
32 // The experimental logic for generic relationships (MSC1849)
33 fromJson(json: jo[RelTypeKey], pod&: pod.type);
34 fromJson(json: jo[EventIdKey], pod&: pod.eventId);
35 if (pod.type == EventRelation::AnnotationType)
36 fromJson(json: jo["key"_ls], pod&: pod.key);
37 }
38}
39