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 "locationfetchhistoryjob.h"
0010 #include "debug.h"
0011 #include "latitudeservice.h"
0012 #include "utils.h"
0013 
0014 #include <QNetworkReply>
0015 #include <QNetworkRequest>
0016 
0017 using namespace KGAPI2;
0018 
0019 class Q_DECL_HIDDEN LocationFetchHistoryJob::Private
0020 {
0021 public:
0022     Private(LocationFetchHistoryJob *parent);
0023     QNetworkRequest createRequest(const QUrl &url);
0024 
0025     Latitude::Granularity granularity = Latitude::City;
0026     int maxResults = 0;
0027     qlonglong minTimestamp = 0;
0028     qlonglong maxTimestamp = 0;
0029 
0030 private:
0031     LocationFetchHistoryJob *const q;
0032 };
0033 
0034 LocationFetchHistoryJob::Private::Private(LocationFetchHistoryJob *parent)
0035     : q(parent)
0036 {
0037 }
0038 
0039 QNetworkRequest LocationFetchHistoryJob::Private::createRequest(const QUrl &url)
0040 {
0041     QNetworkRequest request(url);
0042     request.setRawHeader("GData-Version", LatitudeService::APIVersion().toLatin1());
0043 
0044     return request;
0045 }
0046 
0047 LocationFetchHistoryJob::LocationFetchHistoryJob(const AccountPtr &account, QObject *parent)
0048     : FetchJob(account, parent)
0049     , d(new Private(this))
0050 {
0051 }
0052 
0053 LocationFetchHistoryJob::~LocationFetchHistoryJob()
0054 {
0055     delete d;
0056 }
0057 
0058 int LocationFetchHistoryJob::maxResults() const
0059 {
0060     return d->maxResults;
0061 }
0062 
0063 void LocationFetchHistoryJob::setMaxResults(int results)
0064 {
0065     if (isRunning()) {
0066         qCWarning(KGAPIDebug) << "Can't modify maxResults property while job is running";
0067     }
0068     d->maxResults = results;
0069 }
0070 
0071 Latitude::Granularity LocationFetchHistoryJob::granularity() const
0072 {
0073     return d->granularity;
0074 }
0075 
0076 void LocationFetchHistoryJob::setGranularity(Latitude::Granularity granularity)
0077 {
0078     if (isRunning()) {
0079         qCWarning(KGAPIDebug) << "Can't modify maxResults property while job is running";
0080     }
0081     d->granularity = granularity;
0082 }
0083 
0084 qlonglong LocationFetchHistoryJob::minTimestamp() const
0085 {
0086     return d->minTimestamp;
0087 }
0088 
0089 void LocationFetchHistoryJob::setMinTimestamp(qlonglong minTimestamp)
0090 {
0091     if (isRunning()) {
0092         qCWarning(KGAPIDebug) << "Can't modify maxResults property while job is running";
0093     }
0094     d->minTimestamp = minTimestamp;
0095 }
0096 
0097 qlonglong LocationFetchHistoryJob::maxTimestamp() const
0098 {
0099     return d->maxTimestamp;
0100 }
0101 
0102 void LocationFetchHistoryJob::setMaxTimestamp(qlonglong maxTimestamp)
0103 {
0104     if (isRunning()) {
0105         qCWarning(KGAPIDebug) << "Can't modify maxResults property while job is running";
0106     }
0107     d->maxTimestamp = maxTimestamp;
0108 }
0109 
0110 void LocationFetchHistoryJob::start()
0111 {
0112     const QUrl url = LatitudeService::locationHistoryUrl(d->granularity, d->maxResults, d->maxTimestamp, d->minTimestamp);
0113     const QNetworkRequest request = d->createRequest(url);
0114 
0115     enqueueRequest(request);
0116 }
0117 
0118 ObjectsList LocationFetchHistoryJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData)
0119 {
0120     FeedData feedData;
0121     const QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString();
0122     ContentType ct = Utils::stringToContentType(contentType);
0123     ObjectsList items;
0124     if (ct == KGAPI2::JSON) {
0125         items << LatitudeService::parseLocationJSONFeed(rawData, feedData);
0126     } else {
0127         setError(KGAPI2::InvalidResponse);
0128         setErrorString(tr("Invalid response content type"));
0129         emitFinished();
0130     }
0131 
0132     if (feedData.nextPageUrl.isValid()) {
0133         const QNetworkRequest request = d->createRequest(feedData.nextPageUrl);
0134         enqueueRequest(request);
0135     }
0136 
0137     return items;
0138 }
0139 
0140 #include "moc_locationfetchhistoryjob.cpp"