diff options
author | Alexey Rusakov <Kitsune-Ral@users.sf.net> | 2021-02-21 20:20:38 +0100 |
---|---|---|
committer | Alexey Rusakov <Kitsune-Ral@users.sf.net> | 2021-02-21 20:48:05 +0100 |
commit | 81664eaf5a983dbd326e4d24d21c2108ea4d6353 (patch) | |
tree | 6d5022087ff375d7f6ef9f6ff81aa0245d0feb8f /lib | |
parent | 48d2ecc4df4d1883326036e55949156cfb37acc6 (diff) | |
download | libquotient-81664eaf5a983dbd326e4d24d21c2108ea4d6353.tar.gz libquotient-81664eaf5a983dbd326e4d24d21c2108ea4d6353.zip |
Uri: support abbreviated types in Matrix URIs
As per the latest iteration of MSC2312, room/, user/ and event/ are
only supported for parsing and replication but not for emitting from
Matrix identifiers.
(cherry picked from commit 86f24d1ecf300b82b3a7253b81a2c392669d2c2b)
Diffstat (limited to 'lib')
-rw-r--r-- | lib/uri.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/lib/uri.cpp b/lib/uri.cpp index 4b171e79..291bfcae 100644 --- a/lib/uri.cpp +++ b/lib/uri.cpp @@ -10,13 +10,19 @@ using namespace Quotient; struct ReplacePair { QByteArray uriString; char sigil; }; -/// Defines bi-directional mapping of path prefixes and sigils +/// \brief Defines bi-directional mapping of path prefixes and sigils +/// +/// When there are two prefixes for the same sigil, the first matching +/// entry for a given sigil is used. static const auto replacePairs = { - ReplacePair { "user/", '@' }, + ReplacePair { "u/", '@' }, + { "user/", '@' }, { "roomid/", '!' }, + { "r/", '#' }, { "room/", '#' }, // The notation for bare event ids is not proposed in MSC2312 but there's // https://github.com/matrix-org/matrix-doc/pull/2644 + { "e/", '$' }, { "event/", '$' } }; @@ -97,7 +103,7 @@ Uri::Uri(QUrl url) : QUrl(std::move(url)) case 2: break; case 4: - if (splitPath[2] == "event") + if (splitPath[2] == "event" || splitPath[2] == "e") break; [[fallthrough]]; default: @@ -150,7 +156,8 @@ Uri::Type Uri::type() const { return primaryType_; } Uri::SecondaryType Uri::secondaryType() const { - return pathSegment(*this, 2) == "event" ? EventId : NoSecondaryId; + const auto& type2 = pathSegment(*this, 2); + return type2 == "event" || type2 == "e" ? EventId : NoSecondaryId; } QUrl Uri::toUrl(UriForm form) const |