Defined comment system externally
This commit is contained in:
parent
7e0c4c80a3
commit
dad0adeb8c
9
Cargo.lock
generated
9
Cargo.lock
generated
@ -23,6 +23,14 @@ version = "0.2.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2653cb9243a7d4453127141c162c1ba619d99c7230f1d8ad0a9cdab9cf0651ea"
|
checksum = "2653cb9243a7d4453127141c162c1ba619d99c7230f1d8ad0a9cdab9cf0651ea"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "comment-system"
|
||||||
|
version = "0.1.0"
|
||||||
|
source = "git+https://gitlab.com/porky11/comment-system#bdef78dd69fe726a7fdc44f58c6d97e2939fe743"
|
||||||
|
dependencies = [
|
||||||
|
"data-stream",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "data-stream"
|
name = "data-stream"
|
||||||
version = "0.3.0"
|
version = "0.3.0"
|
||||||
@ -250,6 +258,7 @@ name = "pukram-server"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chara",
|
"chara",
|
||||||
|
"comment-system",
|
||||||
"data-stream",
|
"data-stream",
|
||||||
"dialogi",
|
"dialogi",
|
||||||
"event-simulation",
|
"event-simulation",
|
||||||
|
|||||||
@ -18,3 +18,4 @@ multilinear = "0.3.1"
|
|||||||
multilinear-parser = "0.3.3"
|
multilinear-parser = "0.3.3"
|
||||||
event-simulation = "0.1.2"
|
event-simulation = "0.1.2"
|
||||||
chara = "0.2.0"
|
chara = "0.2.0"
|
||||||
|
comment-system = { git = "https://gitlab.com/porky11/comment-system" }
|
||||||
|
|||||||
75
src/main.rs
75
src/main.rs
@ -2,7 +2,7 @@ use std::{
|
|||||||
collections::{HashMap, hash_map::Entry},
|
collections::{HashMap, hash_map::Entry},
|
||||||
env,
|
env,
|
||||||
fs::File,
|
fs::File,
|
||||||
io::{BufReader, Error, ErrorKind, Result, prelude::*},
|
io::{BufReader, prelude::*},
|
||||||
net::{TcpListener, TcpStream},
|
net::{TcpListener, TcpStream},
|
||||||
path::{Path, PathBuf},
|
path::{Path, PathBuf},
|
||||||
process::ExitCode,
|
process::ExitCode,
|
||||||
@ -15,10 +15,8 @@ use std::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
use ::chara::CharacterDefinition;
|
use ::chara::CharacterDefinition;
|
||||||
use data_stream::{
|
use comment_system::{Comment, SiteInfo};
|
||||||
FromStream, ToStream, collections::SizeSettings, default_settings::PortableSettings,
|
use data_stream::{default_settings::PortableSettings, from_stream, to_stream};
|
||||||
from_stream, to_stream,
|
|
||||||
};
|
|
||||||
use header_config::parse_config;
|
use header_config::parse_config;
|
||||||
use maud::html;
|
use maud::html;
|
||||||
use percent_encoding::percent_decode_str;
|
use percent_encoding::percent_decode_str;
|
||||||
@ -34,12 +32,6 @@ mod vn;
|
|||||||
use request::Request;
|
use request::Request;
|
||||||
use tabs::{Tab, TabInfo, write_tab_styles};
|
use tabs::{Tab, TabInfo, write_tab_styles};
|
||||||
|
|
||||||
#[derive(Clone)]
|
|
||||||
struct Comment {
|
|
||||||
name: Box<str>,
|
|
||||||
text: Box<str>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
struct SharedSiteInfo {
|
struct SharedSiteInfo {
|
||||||
comments: Mutex<Vec<Comment>>,
|
comments: Mutex<Vec<Comment>>,
|
||||||
@ -48,14 +40,6 @@ struct SharedSiteInfo {
|
|||||||
down: AtomicUsize,
|
down: AtomicUsize,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
|
||||||
struct SiteInfo {
|
|
||||||
comments: Vec<Comment>,
|
|
||||||
visits: usize,
|
|
||||||
up: usize,
|
|
||||||
down: usize,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl SharedSiteInfo {
|
impl SharedSiteInfo {
|
||||||
fn new(info: SiteInfo) -> Self {
|
fn new(info: SiteInfo) -> Self {
|
||||||
let SiteInfo {
|
let SiteInfo {
|
||||||
@ -194,59 +178,6 @@ fn fail(mut stream: TcpStream) {
|
|||||||
let _ = writeln!(stream, "Page not found!");
|
let _ = writeln!(stream, "Page not found!");
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<S: SizeSettings> ToStream<S> for SiteInfo {
|
|
||||||
fn to_stream<W: Write>(&self, stream: &mut W) -> Result<()> {
|
|
||||||
S::size_to_stream(self.comments.len(), stream)?;
|
|
||||||
for Comment { name, text } in &self.comments {
|
|
||||||
let name_bytes = name.as_bytes();
|
|
||||||
S::size_to_stream(name_bytes.len(), stream)?;
|
|
||||||
stream.write_all(name_bytes)?;
|
|
||||||
|
|
||||||
let text_bytes = text.as_bytes();
|
|
||||||
S::size_to_stream(text_bytes.len(), stream)?;
|
|
||||||
stream.write_all(text_bytes)?;
|
|
||||||
}
|
|
||||||
|
|
||||||
S::size_to_stream(self.visits, stream)?;
|
|
||||||
S::size_to_stream(self.up, stream)?;
|
|
||||||
S::size_to_stream(self.down, stream)?;
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<S: SizeSettings> FromStream<S> for SiteInfo {
|
|
||||||
fn from_stream<R: Read>(stream: &mut R) -> Result<Self> {
|
|
||||||
let size = S::size_from_stream(stream)?;
|
|
||||||
let comments = (0..size)
|
|
||||||
.map(|_| {
|
|
||||||
let name_bytes = <Vec<_> as FromStream<S>>::from_stream(stream)?;
|
|
||||||
let name = std::str::from_utf8(&name_bytes)
|
|
||||||
.map_err(|e| Error::new(ErrorKind::InvalidData, e))?
|
|
||||||
.into();
|
|
||||||
|
|
||||||
let text_bytes = <Vec<_> as FromStream<S>>::from_stream(stream)?;
|
|
||||||
let text = std::str::from_utf8(&text_bytes)
|
|
||||||
.map_err(|e| Error::new(ErrorKind::InvalidData, e))?
|
|
||||||
.into();
|
|
||||||
|
|
||||||
Ok(Comment { name, text })
|
|
||||||
})
|
|
||||||
.collect::<Result<Vec<_>>>()?;
|
|
||||||
|
|
||||||
let visits = S::size_from_stream(stream)?;
|
|
||||||
let up = S::size_from_stream(stream)?;
|
|
||||||
let down = S::size_from_stream(stream)?;
|
|
||||||
|
|
||||||
Ok(Self {
|
|
||||||
comments,
|
|
||||||
visits,
|
|
||||||
up,
|
|
||||||
down,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn handle_connection(
|
fn handle_connection(
|
||||||
context: Arc<Mutex<Context>>,
|
context: Arc<Mutex<Context>>,
|
||||||
path: PathBuf,
|
path: PathBuf,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user