From b2f1b7373a35d5bbc686ea78f365ccce3333f7c1 Mon Sep 17 00:00:00 2001 From: Odilitime <janesmith@airmail.cc> Date: Thu, 24 Aug 2017 00:52:30 -0700 Subject: [PATCH] detect context-type, plain/text support --- src/WebResource.cpp | 16 +++++++++++++++- src/WebResource.h | 3 ++- src/main.cpp | 37 +++++++++++++++++++++++++++++-------- 3 files changed, 46 insertions(+), 10 deletions(-) diff --git a/src/WebResource.cpp b/src/WebResource.cpp index a6619ff5..81c33d70 100644 --- a/src/WebResource.cpp +++ b/src/WebResource.cpp @@ -16,6 +16,8 @@ namespace { // only used for local files atm std::map<std::string, ResourceType> strToRT = { {"html", ResourceType::HTML}, + {"txt", ResourceType::TXT}, + {"text", ResourceType::TXT}, {"css", ResourceType::CSS}, {"js", ResourceType::JS} }; @@ -114,7 +116,19 @@ WebResource getOnlineWebResource(URL const& url) { returnRes.raw = "Unsupported status code"; } else { // TODO: Set resourceType based on Content-Type field. - returnRes.resourceType = ResourceType::HTML; + std::string contentType = ""; + if (response.properties.find("Content-type") != response.properties.end()) { + contentType = response.properties.at("Content-type"); + } + if (response.properties.find("Content-Type") != response.properties.end()) { + contentType = response.properties.at("Content-Type"); + } + std::cout << "Content-type: " << contentType << std::endl; + if (contentType == "text/plain") { + returnRes.resourceType = ResourceType::TXT; + } else { + returnRes.resourceType = ResourceType::HTML; + } returnRes.raw = std::move(response.body); } }); diff --git a/src/WebResource.h b/src/WebResource.h index 759fe314..64b8cd02 100644 --- a/src/WebResource.h +++ b/src/WebResource.h @@ -8,7 +8,8 @@ enum class ResourceType { INVALID, HTML, CSS, - JS + JS, + TXT }; struct WebResource { diff --git a/src/main.cpp b/src/main.cpp index 6052c079..daee3e74 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -23,14 +23,35 @@ bool setWindowContent(URL const& url) { } // parse HTML - HTMLParser parser; - const std::clock_t begin = clock(); - std::shared_ptr<Node> rootNode = parser.parse(res.raw); - const std::clock_t end = clock(); - logDebug() << "main::setWindowContent - Parsed document in: " << std::fixed << ((static_cast<double>(end - begin)) / CLOCKS_PER_SEC) << std::scientific << " seconds" << std::endl; - - // send NodeTree to window - window->setDOM(rootNode); + if (res.resourceType == ResourceType::HTML) { + HTMLParser parser; + const std::clock_t begin = clock(); + std::shared_ptr<Node> rootNode = parser.parse(res.raw); + const std::clock_t end = clock(); + logDebug() << "main::setWindowContent - Parsed document in: " << std::fixed << ((static_cast<double>(end - begin)) / CLOCKS_PER_SEC) << std::scientific << " seconds" << std::endl; + + // send NodeTree to window + window->setDOM(rootNode); + } else if (res.resourceType == ResourceType::TXT) { + std::cout << "Rendering text document" << std::endl; + std::shared_ptr<Node> rootNode = std::make_shared<Node>(NodeType::ROOT); + std::shared_ptr<TagNode> tagNode = std::make_shared<TagNode>(); + std::shared_ptr<TextNode> textNode = std::make_shared<TextNode>(); + textNode->text = res.raw; + tagNode->tag="p"; + + // bind text to tag + textNode->parent = tagNode; + tagNode->children.push_back(textNode); + + // bind tag to root + tagNode->parent = rootNode; + rootNode->children.push_back(tagNode); + // send NodeTree to window + window->setDOM(rootNode); + } else { + std::cout << "setWindowContent() - I don't know how to render non-html files" << std::endl; + } return true; } -- GitLab