From bf5fcd6ebe12f5ac2c87c3142c86d4de9446d98c Mon Sep 17 00:00:00 2001 From: Magdalena Stojek Date: Thu, 27 Feb 2025 13:38:57 +0100 Subject: [PATCH] QHttpHeaders: Add setters for QDateTime MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added setDateTimeValue() convenience methods to QHttpHeaders, allowing direct setting of headers with QDateTime values. [ChangeLog][QtNetwork][QHttpHeaders] Added setDateTimeValue() methods for setting headers using QDateTime. Task-number: QTBUG-124766 Change-Id: I5804fa8946feaed1dfb4b37ec97a1a4461521995 Reviewed-by: Juha Vuolle Reviewed-by: Marc Mutz Reviewed-by: MÃ¥rten Nordheim --- src/network/access/qhttpheaders.cpp | 28 +++++++++++++++++++ src/network/access/qhttpheaders.h | 3 ++ .../access/qhttpheaders/tst_qhttpheaders.cpp | 8 ++++++ 3 files changed, 39 insertions(+) diff --git a/src/network/access/qhttpheaders.cpp b/src/network/access/qhttpheaders.cpp index 3786a17ae23..8f662c59a68 100644 --- a/src/network/access/qhttpheaders.cpp +++ b/src/network/access/qhttpheaders.cpp @@ -1545,6 +1545,34 @@ std::optional QHttpHeaders::dateTimeValue(WellKnownHeader name) const return dateTimeValue(wellKnownHeaderName(name)); } +/*! + \since 6.10 + + Sets the value of the header name \a name to \a dateTime, + following the + \l {https://datatracker.ietf.org/doc/html/rfc9110#name-date-time-formats}{standard HTTP IMF-fixdate format}. + If the header does not exist, adds a new one. + + \sa dateTimeValue(QAnyStringView name), dateTimeValueAt(qsizetype i) + */ +void QHttpHeaders::setDateTimeValue(QAnyStringView name, const QDateTime &dateTime) +{ + if (!dateTime.isValid()) { + qWarning("QHttpHeaders::setDateTimeValue: invalid QDateTime value received"); + return; + } + replaceOrAppend(name, QNetworkHeadersPrivate::toHttpDate(dateTime)); +} + +/*! + \since 6.10 + \overload setDateTimeValue(QAnyStringView) +*/ +void QHttpHeaders::setDateTimeValue(WellKnownHeader name, const QDateTime &dateTime) +{ + setDateTimeValue(wellKnownHeaderName(name), dateTime); +} + /*! \since 6.10 diff --git a/src/network/access/qhttpheaders.h b/src/network/access/qhttpheaders.h index c9087724a64..23de782662d 100644 --- a/src/network/access/qhttpheaders.h +++ b/src/network/access/qhttpheaders.h @@ -262,6 +262,9 @@ public: Q_NETWORK_EXPORT std::optional dateTimeValueAt(qsizetype i) const; + Q_NETWORK_EXPORT void setDateTimeValue(QAnyStringView name, const QDateTime &dateTime); + Q_NETWORK_EXPORT void setDateTimeValue(WellKnownHeader name, const QDateTime &dateTime); + Q_NETWORK_EXPORT qsizetype size() const noexcept; Q_NETWORK_EXPORT void reserve(qsizetype size); bool isEmpty() const noexcept { return size() == 0; } diff --git a/tests/auto/network/access/qhttpheaders/tst_qhttpheaders.cpp b/tests/auto/network/access/qhttpheaders/tst_qhttpheaders.cpp index dc21bf2dab3..e0b76308dfa 100644 --- a/tests/auto/network/access/qhttpheaders/tst_qhttpheaders.cpp +++ b/tests/auto/network/access/qhttpheaders/tst_qhttpheaders.cpp @@ -623,6 +623,14 @@ void tst_QHttpHeaders::dateTimeValues() QCOMPARE(dateTimeValueAtIndex->date(), QDate(2025, 2, 24)); QCOMPARE(dateTimeValueAtIndex->time(), QTime(11, 11, 11, 0)); + QDateTime dateTimeValue3{QDate{2049, 4, 3}, QTime{12, 30, 00, 0}}; + dateTimeValue3.setTimeZone(QTimeZone::UTC); + h1.setDateTimeValue("date", dateTimeValue3); + std::optional setDateTimeValue = h1.dateTimeValue("date"); + QVERIFY(setDateTimeValue); + QCOMPARE(setDateTimeValue->date(), QDate(2049, 4, 3)); + QCOMPARE(setDateTimeValue->time(), QTime(12, 30, 00, 0)); + h1.clear(); h1.append("Date", "InvalidDateFormat"); h1.append("Date", "");