Added support for reactions

This commit is contained in:
p11 2023-07-19 20:05:23 +02:00
parent 7c1969fa0b
commit accd37204f

View File

@ -47,6 +47,8 @@ struct Comment {
struct SiteInfo {
comments: Vec<Comment>,
visits: usize,
up: usize,
down: usize,
}
#[derive(Default)]
@ -137,45 +139,63 @@ impl Context {
Vacant(v) => v.insert(SiteInfo::default()),
};
let mut entries = request.body.split('&');
if let (Some(name_entry), Some(text_entry), None) =
(entries.next(), entries.next(), entries.next())
{
if let (Some(("name", input_name)), Some(("text", input_text))) =
(name_entry.split_once('='), text_entry.split_once('='))
{
let name_value = input_name.replace('+', " ");
let decoded_name = percent_decode_str(&name_value).decode_utf8_lossy();
eprintln!("Received comment by \"{decoded_name}\":");
let name = decoded_name
.replace('&', "&amp;")
.replace('<', "&lt;")
.replace('>', "&gt;")
.into();
let mut name = None;
let mut text = None;
let text_value = input_text.replace('+', " ");
let decoded_text = percent_decode_str(&text_value).decode_utf8_lossy();
for line in decoded_text.lines() {
eprintln!(" {line}");
for entry in request.body.split('&') {
let Some((key, input)) = entry.split_once('=') else {
continue;
};
match key {
"name" => {
let name_value = input.replace('+', " ");
let decoded_name = percent_decode_str(&name_value).decode_utf8_lossy();
eprintln!("Received comment by \"{decoded_name}\":");
name = Some(
decoded_name
.replace('&', "&amp;")
.replace('<', "&lt;")
.replace('>', "&gt;")
.into(),
);
}
eprintln!();
let mut text_buf = Vec::new();
convert(decoded_text.lines(), &mut text_buf);
let text = std::str::from_utf8(text_buf.as_slice())
.unwrap_or_default()
.into();
info.comments.push(Comment { name, text });
"text" => {
let text_value = input.replace('+', " ");
let decoded_text = percent_decode_str(&text_value).decode_utf8_lossy();
for line in decoded_text.lines() {
eprintln!(" {line}");
}
eprintln!();
let mut text_buf = Vec::new();
convert(decoded_text.lines(), &mut text_buf);
text = Some(
std::str::from_utf8(text_buf.as_slice())
.unwrap_or_default()
.into(),
);
}
"up" => info.up += 1,
"down" => info.down += 1,
_ => (),
}
}
if let (Some(name), Some(text)) = (name, text) {
info.comments.push(Comment { name, text });
}
info.visits += 1;
let _ = write!(stream, "HTTP/1.1 200 OK\r\n\r\n");
let _ = writeln!(stream, "<meta charset=\"utf-8\">");
let _ = writeln!(stream, "<p>👁️{}</p>", info.visits);
let _ = writeln!(
stream,
"<p>👁️{} 💖️{} 💔️{}</p>",
info.visits, info.up, info.down
);
let title = relative_path
.rsplit_once('/')
@ -261,6 +281,10 @@ impl Context {
br;
input type="submit" value="Send!";
}
form method="POST" {
input type="submit" value="💖️" name="up";
input type="submit" value="💔️" name="down";
}
};
let _ = stream.write_all(html.into_string().as_bytes());