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 "locationfetchjob.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 LocationFetchJob::Private
0022 {
0023 public:
0024     Private();
0025 
0026     qlonglong timestamp = -1;
0027     Latitude::Granularity granularity = Latitude::City;
0028 };
0029 
0030 LocationFetchJob::Private::Private()
0031 {
0032 }
0033 
0034 LocationFetchJob::LocationFetchJob(const AccountPtr &account, QObject *parent)
0035     : FetchJob(account, parent)
0036     , d(new Private)
0037 {
0038 }
0039 
0040 LocationFetchJob::LocationFetchJob(qlonglong timestamp, const AccountPtr &account, QObject *parent)
0041     : FetchJob(account, parent)
0042     , d(new Private)
0043 {
0044     d->timestamp = timestamp;
0045 }
0046 
0047 LocationFetchJob::~LocationFetchJob()
0048 {
0049     delete d;
0050 }
0051 
0052 Latitude::Granularity LocationFetchJob::granularity() const
0053 {
0054     return d->granularity;
0055 }
0056 
0057 void LocationFetchJob::setGranularity(Latitude::Granularity granularity)
0058 {
0059     if (isRunning()) {
0060         qCWarning(KGAPIDebug) << "Can't modify granularity property when the job is running";
0061     }
0062     d->granularity = granularity;
0063 }
0064 
0065 void LocationFetchJob::start()
0066 {
0067     QUrl url;
0068     if (d->timestamp == -1) {
0069         url = LatitudeService::retrieveCurrentLocationUrl(d->granularity);
0070     } else {
0071         url = LatitudeService::retrieveLocationUrl(d->timestamp, d->granularity);
0072     }
0073     QNetworkRequest request(url);
0074     request.setRawHeader("GData-Version", LatitudeService::APIVersion().toLatin1());
0075 
0076     enqueueRequest(request);
0077 }
0078 
0079 ObjectsList LocationFetchJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData)
0080 {
0081     const QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString();
0082     ContentType ct = Utils::stringToContentType(contentType);
0083     ObjectsList items;
0084     if (ct == KGAPI2::JSON) {
0085         items << LatitudeService::JSONToLocation(rawData).dynamicCast<Object>();
0086     } else {
0087         setError(KGAPI2::InvalidResponse);
0088         setErrorString(tr("Invalid response content type"));
0089         emitFinished();
0090     }
0091 
0092     return items;
0093 }
0094 
0095 #include "moc_locationfetchjob.cpp"