#include "../../plugins/Plugin.hpp" #include #include #include namespace QuickMedia { SearchResult Plugin::search(const std::string &text, BodyItems &result_items) { (void)text; (void)result_items; return SearchResult::OK; } SuggestionResult Plugin::update_search_suggestions(const std::string &text, BodyItems &result_items) { (void)text; (void)result_items; return SuggestionResult::OK; } SearchResult Plugin::content_list_search(const std::string &list_url, const std::string &text, BodyItems &result_items) { (void)list_url; (void)text; (void)result_items; return SearchResult::OK; } BodyItems Plugin::get_related_media(const std::string &url) { (void)url; return {}; } struct HtmlEscapeSequence { char unescape_char; std::string escape_sequence; }; void html_escape_sequences(std::string &str) { const std::array escape_sequences = { HtmlEscapeSequence { '&', "&" }, // This should be first, to not accidentally replace a new sequence caused by replacing this HtmlEscapeSequence { '"', """ }, HtmlEscapeSequence { '\'', "'" }, HtmlEscapeSequence { '<', "<" }, HtmlEscapeSequence { '>', ">" } }; for(const HtmlEscapeSequence &escape_sequence : escape_sequences) { string_replace_all(str, escape_sequence.unescape_char, escape_sequence.escape_sequence); } } struct HtmlUnescapeSequence { std::string escape_sequence; std::string unescaped_str; }; void html_unescape_sequences(std::string &str) { const std::array unescape_sequences = { HtmlUnescapeSequence { """, "\"" }, HtmlUnescapeSequence { "'", "'" }, HtmlUnescapeSequence { "'", "'" }, HtmlUnescapeSequence { "<", "<" }, HtmlUnescapeSequence { ">", ">" }, HtmlUnescapeSequence { "&", "&" } // This should be last, to not accidentally replace a new sequence caused by replacing this }; for(const HtmlUnescapeSequence &unescape_sequence : unescape_sequences) { string_replace_all(str, unescape_sequence.escape_sequence, unescape_sequence.unescaped_str); } } std::string Plugin::url_param_encode(const std::string ¶m) const { std::ostringstream result; result.fill('0'); result << std::hex; for(char c : param) { if(isalnum(c) || c == '-' || c == '_' || c == '.' || c == '~') { result << c; } else { result << std::uppercase; result << "%" << std::setw(2) << (int)(unsigned char)(c); } } return result.str(); } }