File indexing completed on 2024-05-12 05:22:24

0001 /*
0002  * This file is part of LibKGAPI library
0003  *
0004  * SPDX-FileCopyrightText: 2013 Daniel Vrátil <dvratil@redhat.com>
0005  *
0006  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007  */
0008 
0009 #include "locationcreatejob.h"
0010 #include "account.h"
0011 #include "debug.h"
0012 #include "latitudeservice.h"
0013 #include "location.h"
0014 #include "utils.h"
0015 
0016 #include <QNetworkReply>
0017 #include <QNetworkRequest>
0018 
0019 using namespace KGAPI2;
0020 
0021 class Q_DECL_HIDDEN LocationCreateJob::Private
0022 {
0023 public:
0024     Private();
0025 
0026     LocationPtr location;
0027     bool isCurrent = true;
0028 };
0029 
0030 LocationCreateJob::Private::Private()
0031 {
0032 }
0033 
0034 LocationCreateJob::LocationCreateJob(const LocationPtr &location, bool isCurrent, const AccountPtr &account, QObject *parent)
0035     : CreateJob(account, parent)
0036     , d(new Private)
0037 {
0038     d->location = location;
0039     d->isCurrent = isCurrent;
0040 }
0041 
0042 LocationCreateJob::~LocationCreateJob()
0043 {
0044     delete d;
0045 }
0046 
0047 void LocationCreateJob::start()
0048 {
0049     QUrl url;
0050     if (d->isCurrent) {
0051         url = LatitudeService::insertCurrentLocationUrl();
0052     } else {
0053         url = LatitudeService::insertLocationUrl();
0054     }
0055 
0056     QNetworkRequest request(url);
0057     request.setRawHeader("GData-Version", LatitudeService::APIVersion().toLatin1());
0058 
0059     const QByteArray rawData = LatitudeService::locationToJSON(d->location);
0060 
0061     QStringList headers;
0062     const auto rawHeaderList = request.rawHeaderList();
0063     headers.reserve(rawHeaderList.size());
0064     for (const QByteArray &str : std::as_const(rawHeaderList)) {
0065         headers << QLatin1StringView(str) + QLatin1StringView(": ") + QLatin1StringView(request.rawHeader(str));
0066     }
0067 
0068     enqueueRequest(request, rawData, QStringLiteral("application/json"));
0069 }
0070 
0071 ObjectsList LocationCreateJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData)
0072 {
0073     const QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString();
0074     ContentType ct = Utils::stringToContentType(contentType);
0075     ObjectsList items;
0076     if (ct == KGAPI2::JSON) {
0077         items << LatitudeService::JSONToLocation(rawData).dynamicCast<Object>();
0078     } else {
0079         setError(KGAPI2::InvalidResponse);
0080         setErrorString(tr("Invalid response content type"));
0081         emitFinished();
0082     }
0083 
0084     return items;
0085 }
0086 
0087 #include "moc_locationcreatejob.cpp"