From b5a62a3204a58c34ccec56297f742694487e9976 Mon Sep 17 00:00:00 2001 From: Lars Toenning Date: Tue, 26 Dec 2023 21:52:56 +0100 Subject: [PATCH] feat: Support URL fragments with CUrl URL fragments are the part of a URL to select subresources by using "#" --- src/blackmisc/network/url.cpp | 12 ++++++++++++ src/blackmisc/network/url.h | 12 ++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/blackmisc/network/url.cpp b/src/blackmisc/network/url.cpp index cd5d2c859..fc3c5962f 100644 --- a/src/blackmisc/network/url.cpp +++ b/src/blackmisc/network/url.cpp @@ -102,6 +102,16 @@ namespace BlackMisc::Network this->appendQuery(key + "=" + value); } + bool CUrl::hasFragment() const + { + return !m_fragment.isEmpty(); + } + + void CUrl::setFragment(const QString &fragment) + { + m_fragment = fragment; + } + QString CUrl::getFullUrl(bool withQuery) const { if (m_host.isEmpty()) { return {}; } @@ -109,6 +119,7 @@ namespace BlackMisc::Network QString qn(m_host); if (!hasDefaultPort() && hasPort()) { qn = qn.append(":").append(QString::number(m_port)); } if (hasPath()) { qn = qn.append("/").append(m_path).replace("//", "/"); } + if (hasFragment()) { qn = qn.append("#").append(m_fragment).replace("//", "/"); } if (hasQuery() && withQuery) { qn = qn.append("?").append(m_query); } if (hasScheme()) { qn = QString(this->getScheme()).append("://").append(qn); } return qn; @@ -136,6 +147,7 @@ namespace BlackMisc::Network this->setScheme(url.scheme()); this->setPath(url.path()); this->setQuery(url.query()); + this->setFragment(url.fragment()); } QNetworkRequest CUrl::toNetworkRequest() const diff --git a/src/blackmisc/network/url.h b/src/blackmisc/network/url.h index dd6442b08..de5fc6391 100644 --- a/src/blackmisc/network/url.h +++ b/src/blackmisc/network/url.h @@ -22,7 +22,7 @@ BLACK_DECLARE_VALUEOBJECT_MIXINS(BlackMisc::Network, CUrl) namespace BlackMisc::Network { //! Value object encapsulating information of a location, - //! kind of simplied CValueObject compliant version of QUrl + //! kind of simplified CValueObject compliant version of QUrl class BLACKMISC_EXPORT CUrl : public CValueObject { public: @@ -105,6 +105,12 @@ namespace BlackMisc::Network //! Append query void appendQuery(const QString &key, const QString &value); + //! Fragment string? + bool hasFragment() const; + + //! Set fragment + void setFragment(const QString &fragment); + //! Empty bool isEmpty() const; @@ -194,6 +200,7 @@ namespace BlackMisc::Network int m_port = -1; QString m_path; QString m_query; + QString m_fragment; static QString stripQueryString(const QString &query); @@ -203,7 +210,8 @@ namespace BlackMisc::Network BLACK_METAMEMBER(host), BLACK_METAMEMBER(port), BLACK_METAMEMBER(path), - BLACK_METAMEMBER(query) + BLACK_METAMEMBER(query), + BLACK_METAMEMBER(fragment) ); }; } // namespace