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"