1// SPDX-FileCopyrightText: 2016 Kitsune Ral <Kitsune-Ral@users.sf.net>
2// SPDX-License-Identifier: LGPL-2.1-or-later
3
4#include "syncjob.h"
5
6#include "../logging_categories_p.h"
7
8using namespace Quotient;
9
10static size_t jobId = 0;
11
12SyncJob::SyncJob(const QString& since, const QString& filter, int timeout,
13 const QString& presence)
14 : BaseJob(HttpVerb::Get, QStringLiteral("SyncJob-%1").arg(a: ++jobId),
15 "_matrix/client/r0/sync")
16{
17 setLoggingCategory(SYNCJOB);
18 QUrlQuery query;
19 addParam<IfNotEmpty>(container&: query, QStringLiteral("filter"), value: filter);
20 addParam<IfNotEmpty>(container&: query, QStringLiteral("set_presence"), value: presence);
21 if (timeout >= 0)
22 query.addQueryItem(QStringLiteral("timeout"), value: QString::number(timeout));
23 addParam<IfNotEmpty>(container&: query, QStringLiteral("since"), value: since);
24 setRequestQuery(query);
25
26 setMaxRetries(std::numeric_limits<int>::max());
27}
28
29SyncJob::SyncJob(const QString& since, const Filter& filter, int timeout,
30 const QString& presence)
31 : SyncJob(since,
32 QString::fromUtf8(ba: QJsonDocument(toJson(pod: filter)).toJson(format: QJsonDocument::Compact)),
33 timeout, presence)
34{}
35
36BaseJob::Status SyncJob::prepareResult()
37{
38 d.parseJson(json: jsonData());
39 if (Q_LIKELY(d.unresolvedRooms().isEmpty()))
40 return Success;
41
42 Q_ASSERT(d.unresolvedRooms().isEmpty());
43 qCCritical(MAIN).noquote() << "Rooms missing after processing sync "
44 "response, possibly a bug in SyncData: "
45 << d.unresolvedRooms().join(sep: u',');
46 return IncorrectResponse;
47}
48