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"