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 { struct SiteInfo {
comments: Vec<Comment>, comments: Vec<Comment>,
visits: usize, visits: usize,
up: usize,
down: usize,
} }
#[derive(Default)] #[derive(Default)]
@ -137,23 +139,29 @@ impl Context {
Vacant(v) => v.insert(SiteInfo::default()), Vacant(v) => v.insert(SiteInfo::default()),
}; };
let mut entries = request.body.split('&'); let mut name = None;
if let (Some(name_entry), Some(text_entry), None) = let mut text = None;
(entries.next(), entries.next(), entries.next())
{ for entry in request.body.split('&') {
if let (Some(("name", input_name)), Some(("text", input_text))) = let Some((key, input)) = entry.split_once('=') else {
(name_entry.split_once('='), text_entry.split_once('=')) continue;
{ };
let name_value = input_name.replace('+', " ");
match key {
"name" => {
let name_value = input.replace('+', " ");
let decoded_name = percent_decode_str(&name_value).decode_utf8_lossy(); let decoded_name = percent_decode_str(&name_value).decode_utf8_lossy();
eprintln!("Received comment by \"{decoded_name}\":"); eprintln!("Received comment by \"{decoded_name}\":");
let name = decoded_name name = Some(
decoded_name
.replace('&', "&amp;") .replace('&', "&amp;")
.replace('<', "&lt;") .replace('<', "&lt;")
.replace('>', "&gt;") .replace('>', "&gt;")
.into(); .into(),
);
let text_value = input_text.replace('+', " "); }
"text" => {
let text_value = input.replace('+', " ");
let decoded_text = percent_decode_str(&text_value).decode_utf8_lossy(); let decoded_text = percent_decode_str(&text_value).decode_utf8_lossy();
for line in decoded_text.lines() { for line in decoded_text.lines() {
eprintln!(" {line}"); eprintln!(" {line}");
@ -161,12 +169,20 @@ impl Context {
eprintln!(); eprintln!();
let mut text_buf = Vec::new(); let mut text_buf = Vec::new();
convert(decoded_text.lines(), &mut text_buf); convert(decoded_text.lines(), &mut text_buf);
let text = std::str::from_utf8(text_buf.as_slice()) text = Some(
std::str::from_utf8(text_buf.as_slice())
.unwrap_or_default() .unwrap_or_default()
.into(); .into(),
);
info.comments.push(Comment { name, text });
} }
"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; info.visits += 1;
@ -175,7 +191,11 @@ impl Context {
let _ = writeln!(stream, "<meta charset=\"utf-8\">"); 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 let title = relative_path
.rsplit_once('/') .rsplit_once('/')
@ -261,6 +281,10 @@ impl Context {
br; br;
input type="submit" value="Send!"; 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()); let _ = stream.write_all(html.into_string().as_bytes());