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"