Added support for reactions
This commit is contained in:
parent
7c1969fa0b
commit
accd37204f
80
src/main.rs
80
src/main.rs
@ -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('&', "&")
|
||||
.replace('<', "<")
|
||||
.replace('>', ">")
|
||||
.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('&', "&")
|
||||
.replace('<', "<")
|
||||
.replace('>', ">")
|
||||
.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());
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user