diff --git a/datetime/integrationplugindatetime.cpp b/datetime/integrationplugindatetime.cpp index b99c614f..99bb6470 100644 --- a/datetime/integrationplugindatetime.cpp +++ b/datetime/integrationplugindatetime.cpp @@ -41,7 +41,7 @@ IntegrationPluginDateTime::IntegrationPluginDateTime() : m_timer(nullptr), m_todayDevice(nullptr), - m_timeZone(QTimeZone(QTimeZone::systemTimeZoneId())), + m_timeZone(QTimeZone::systemTimeZoneId()), m_dusk(QDateTime()), m_sunrise(QDateTime()), m_noon(QDateTime()), @@ -203,8 +203,15 @@ void IntegrationPluginDateTime::searchGeoLocation() qCDebug(dcDateTime()) << "Requesting geo location."; QNetworkReply *reply = hardwareManager()->networkManager()->get(request); - connect(reply, &QNetworkReply::finished, this, &IntegrationPluginDateTime::onNetworkReplayFinished); - m_locationReplies.append(reply); + connect(reply, &QNetworkReply::finished, this, [reply, this](){ + reply->deleteLater(); + + if (reply->error() != QNetworkReply::NoError) { + qCWarning(dcDateTime) << "Http error status for location request:" << reply->error(); + return; + } + processGeoLocationData(reply->readAll()); + }); } void IntegrationPluginDateTime::processGeoLocationData(const QByteArray &data) @@ -250,16 +257,22 @@ void IntegrationPluginDateTime::getTimes(const QString &latitude, const QString urlQuery.addQueryItem("lng", longitude); urlQuery.addQueryItem("date", "today"); - QUrl url = QUrl("http://api.sunrise-sunset.org/json"); + QUrl url = QUrl("https://api.sunrise-sunset.org/json"); url.setQuery(urlQuery.toString()); QNetworkRequest request; request.setUrl(url); QNetworkReply *reply = hardwareManager()->networkManager()->get(request); - connect(reply, &QNetworkReply::finished, this, &IntegrationPluginDateTime::onNetworkReplayFinished); + connect(reply, &QNetworkReply::finished, this, [reply, this](){ + reply->deleteLater(); - m_timeReplies.append(reply); + if (reply->error() != QNetworkReply::NoError) { + qCWarning(dcDateTime) << "Http error status for time request:" << reply->error(); + return; + } + processTimesData(reply->readAll()); + }); } void IntegrationPluginDateTime::processTimesData(const QByteArray &data) @@ -288,12 +301,11 @@ void IntegrationPluginDateTime::processTimesData(const QByteArray &data) QString duskString = result.value("civil_twilight_end").toString(); // calculate the times in each alarm - - m_dawn = QDateTime(QDate::currentDate(), parseTime(dawnString), Qt::UTC).toTimeZone(m_timeZone); - m_sunrise = QDateTime(QDate::currentDate(), parseTime(sunriseString), Qt::UTC).toTimeZone(m_timeZone); - m_noon = QDateTime(QDate::currentDate(), parseTime(noonString), Qt::UTC).toTimeZone(m_timeZone); - m_sunset = QDateTime(QDate::currentDate(), parseTime(sunsetString), Qt::UTC).toTimeZone(m_timeZone); - m_dusk = QDateTime(QDate::currentDate(), parseTime(duskString), Qt::UTC).toTimeZone(m_timeZone); + m_dawn = QDateTime(QDate::currentDate(), QTime::fromString(dawnString, "h:mm:ss AP"), Qt::UTC).toTimeZone(m_timeZone); + m_sunrise = QDateTime(QDate::currentDate(), QTime::fromString(sunriseString, "h:mm:ss AP"), Qt::UTC).toTimeZone(m_timeZone); + m_noon = QDateTime(QDate::currentDate(), QTime::fromString(noonString, "h:mm:ss AP"), Qt::UTC).toTimeZone(m_timeZone); + m_sunset = QDateTime(QDate::currentDate(), QTime::fromString(sunsetString, "h:mm:ss AP"), Qt::UTC).toTimeZone(m_timeZone); + m_dusk = QDateTime(QDate::currentDate(), QTime::fromString(duskString, "h:mm:ss AP"), Qt::UTC).toTimeZone(m_timeZone); qCDebug(dcDateTime) << " dawn :" << m_dawn.toString() << dawnString; qCDebug(dcDateTime) << " sunrise :" << m_sunrise.toString() << sunriseString; @@ -305,42 +317,6 @@ void IntegrationPluginDateTime::processTimesData(const QByteArray &data) updateTimes(); } -QTime IntegrationPluginDateTime::parseTime(const QString &timeString) const -{ - bool isPm = timeString.endsWith(" PM"); - QString tmp = QString(timeString).remove(QRegExp("[ APM]*")); - QStringList parts = tmp.split(":"); - if (parts.count() != 3) { - qCWarning(dcDateTime()) << "Error parsing timeString:" << timeString; - return QTime(); - } - return QTime(parts.first().toInt(), parts.at(1).toInt(), parts.last().toInt()).addSecs(isPm ? 60 * 60 * 12 : 0); -} - -void IntegrationPluginDateTime::onNetworkReplayFinished() -{ - QNetworkReply *reply = static_cast(sender()); - - int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); - - if (m_locationReplies.contains(reply)) { - m_locationReplies.removeAll(reply); - if (status != 200) { - qCWarning(dcDateTime) << "Http error status for location request:" << status << reply->error(); - } else { - processGeoLocationData(reply->readAll()); - } - } else if (m_timeReplies.contains(reply)) { - m_timeReplies.removeAll(reply); - if (status != 200) { - qCWarning(dcDateTime) << "Http error status for time request:" << status << reply->error(); - } else { - processTimesData(reply->readAll()); - } - } - reply->deleteLater(); -} - void IntegrationPluginDateTime::onAlarm() { Alarm *alarm = static_cast(sender()); diff --git a/datetime/integrationplugindatetime.h b/datetime/integrationplugindatetime.h index 29542d17..e5998e71 100644 --- a/datetime/integrationplugindatetime.h +++ b/datetime/integrationplugindatetime.h @@ -74,17 +74,12 @@ private: QDateTime m_sunset; QDateTime m_dawn; - QList m_locationReplies; - QList m_timeReplies; - void searchGeoLocation(); void processGeoLocationData(const QByteArray &data); void getTimes(const QString &latitude, const QString &longitude); void processTimesData(const QByteArray &data); - QTime parseTime(const QString &timeString) const; - signals: void dusk(); void sunset(); @@ -93,7 +88,6 @@ signals: void dawn(); private slots: - void onNetworkReplayFinished(); void onAlarm(); void onCountdownTimeout(); void onCountdownRunningChanged(const bool &running);