Merge PR #551: DateTime: Fix time parsing and HTTP redirects
This commit is contained in:
commit
e0b2199611
@ -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<QNetworkReply *>(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<Alarm *>(sender());
|
||||
|
||||
@ -74,17 +74,12 @@ private:
|
||||
QDateTime m_sunset;
|
||||
QDateTime m_dawn;
|
||||
|
||||
QList<QNetworkReply *> m_locationReplies;
|
||||
QList<QNetworkReply *> 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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user