aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/renderers/gophermaprenderer.cpp39
1 files changed, 25 insertions, 14 deletions
diff --git a/src/renderers/gophermaprenderer.cpp b/src/renderers/gophermaprenderer.cpp
index 66da3c1..bd1e64d 100644
--- a/src/renderers/gophermaprenderer.cpp
+++ b/src/renderers/gophermaprenderer.cpp
@@ -156,21 +156,32 @@ std::unique_ptr<QTextDocument> GophermapRenderer::render(const QByteArray &input
else
{
QString dst_url;
- switch (items.size())
+
+ // If a resource’s link starts with “URL:”, it is a direct link (to HTTP or another protocol), rather than a file or directory on this server.
+ if (items.size() >= 2 && items.at(1).left(4) == "URL:")
+ {
+ auto item1 = QString(items.at(1));
+ item1.remove(0, 4);
+ dst_url = item1;
+ }
+ else
{
- case 0:
- assert(false);
- case 1:
- assert(false);
- case 2:
- dst_url = root_url.resolved(QUrl(items.at(1))).toString();
- break;
- case 3:
- dst_url = scheme + "://" + items.at(2) + "/" + QString(type) + items.at(1);
- break;
- default:
- dst_url = scheme + "://" + items.at(2) + ":" + items.at(3) + "/" + QString(type) + items.at(1);
- break;
+ switch (items.size())
+ {
+ case 0:
+ assert(false);
+ case 1:
+ assert(false);
+ case 2:
+ dst_url = root_url.resolved(QUrl(items.at(1))).toString();
+ break;
+ case 3:
+ dst_url = scheme + "://" + items.at(2) + "/" + QString(type) + items.at(1);
+ break;
+ default:
+ dst_url = scheme + "://" + items.at(2) + ":" + items.at(3) + "/" + QString(type) + items.at(1);
+ break;
+ }
}
if (not QUrl(dst_url).isValid())