Files
chookchat/server/src/post.cpp

63 lines
2.0 KiB
C++

#include "post.h"
#include <memory>
#include <sstream>
#include <string>
#include <ctime>
#include <maddy/parser.h>
void replaceAll(std::string& str, const std::string& from, const std::string& to) {
size_t start_pos = 0;
while ((start_pos = str.find(from, start_pos)) != std::string::npos) {
str.replace(start_pos, from.length(), to);
start_pos += to.length();
}
}
Post::Post(std::string contentin, const std::string& user) : user(user), time(std::time(nullptr)) {
replaceAll(contentin, "&", "&amp;");
replaceAll(contentin, "<", "&lt;");
replaceAll(contentin, ">", "&gt;");
replaceAll(contentin, "\"", "&quot;");
replaceAll(contentin, "'", "&apos;");
// parse the post content markdown
std::stringstream input(contentin);
std::shared_ptr<maddy::Parser> parser = std::make_shared<maddy::Parser>();
content = parser->Parse(input);
}
Post::Post(std::string contentin, uint64_t user) : userId(user), time(std::time(nullptr)) {
replaceAll(contentin, "&", "&amp;");
replaceAll(contentin, "<", "&lt;");
replaceAll(contentin, ">", "&gt;");
replaceAll(contentin, "\"", "&quot;");
replaceAll(contentin, "'", "&apos;");
// parse the post content markdown
std::stringstream input(contentin);
std::shared_ptr<maddy::Parser> parser = std::make_shared<maddy::Parser>();
content = parser->Parse(input);
}
std::string Post::genHtml() const {
std::stringstream ss;
ss << "<hr>\n";
// do time
char buf[256];
struct tm ts;
ts = *localtime(&time);
strftime(buf, sizeof(buf), "%a %Y-%m-%d %H:%M:%S %Z", &ts);
ss << "<p class='postinfo'><i>" << user << "</i> posted this at " << buf << "</p>\n";
ss << content;
ss << "<p class='postinfo'>" << likes << " likes</p>";
ss << "<div class='post-buttons'>";
ss << "<button onclick='like(\"" << id << "\")' id='likebutton" << id << "'>Like</button>";
ss << "<button onclick='window.location.href = \"/posts/" << id << "\"'>Open</button>";
ss << "</div>";
return ss.str();
}