From 6e77df9c7c73feb22fc5c211ca656b0181ce7b9c Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 12 Jul 2020 22:46:56 +0100 Subject: [PATCH] log on reload --- src/api.rs | 2 +- src/gamestate.rs | 11 ++++++++++- src/session.rs | 2 ++ src/updates.rs | 6 +++--- templates/session.tera | 24 ++++-------------------- 5 files changed, 20 insertions(+), 25 deletions(-) diff --git a/src/api.rs b/src/api.rs index 282f33e4..cd4c5246 100644 --- a/src/api.rs +++ b/src/api.rs @@ -114,7 +114,7 @@ fn api_piece_op(form : Json>) }); for logentry in logents { - let logentry = Arc::new(logentry); + let logentry = LogEntryRef(Arc::new(logentry)); gs.log.push((gen, logentry.clone())); us.push(PreparedUpdateEntry::Log(logentry)); } diff --git a/src/gamestate.rs b/src/gamestate.rs index b6ea9379..0b18a6ba 100644 --- a/src/gamestate.rs +++ b/src/gamestate.rs @@ -37,7 +37,7 @@ pub struct GameState { pub pieces : DenseSlotMap, pub players : DenseSlotMap, pub gen : Generation, - pub log : Vec<(Generation, Arc)>, + pub log : Vec<(Generation,LogEntryRef)>, } #[derive(Debug)] @@ -57,6 +57,9 @@ pub struct PlayerState { pub nick : String, } +#[derive(Debug,Clone)] +pub struct LogEntryRef(pub Arc); + #[derive(Debug,Serialize)] pub struct LogEntry { pub html : String, @@ -132,6 +135,12 @@ impl Display for ZCoord { // ---------- game state - rendering etc. ---------- +impl Serialize for LogEntryRef { + fn serialize(&self, s: S) -> Result<::Ok, ::Error> where S: Serializer { + self.0.serialize(s) + } +} + impl PieceState { #[throws(SE)] pub fn make_defs(&self, pri : &PieceRenderInstructions) -> String { diff --git a/src/session.rs b/src/session.rs index 8c3a329e..147ee232 100644 --- a/src/session.rs +++ b/src/session.rs @@ -11,6 +11,7 @@ struct SessionRenderContext { defs : Vec<(VisiblePieceId,String)>, nick : String, load : String, + log : Vec<(Generation, LogEntryRef)>, } #[derive(Serialize,Debug)] @@ -111,6 +112,7 @@ fn session(form : Json) -> Result { let src = SessionRenderContext { ctoken : ctoken.0, gen : ig.gs.gen, + log : ig.gs.log.clone(), player, defs : alldefs, uses, diff --git a/src/updates.rs b/src/updates.rs index 4ae1dc99..c5678d8a 100644 --- a/src/updates.rs +++ b/src/updates.rs @@ -32,7 +32,7 @@ pub enum PreparedUpdateEntry { piece : VisiblePieceId, op : PieceUpdateOp, }, - Log (Arc), + Log (LogEntryRef), } #[derive(Debug,Serialize)] @@ -103,7 +103,7 @@ impl PreparedUpdateEntry { op.new_state().map(|x| x.svg.len()).unwrap_or(0) }, Log(logent) => { - logent.html.as_bytes().len() * 3 + logent.0.html.as_bytes().len() * 3 } } } @@ -169,7 +169,7 @@ impl PreparedUpdate { TransmitUpdateEntry::Piece { piece, op } }, PreparedUpdateEntry::Log(logent) => { - TransmitUpdateEntry::Log(&*logent) + TransmitUpdateEntry::Log(&logent.0) }, }; ents.push(ue); diff --git a/templates/session.tera b/templates/session.tera index 3775f02b..69eba9f3 100644 --- a/templates/session.tera +++ b/templates/session.tera @@ -28,25 +28,9 @@
-
Log item 1
-
Log item 2
- Log item 3 -
- Log item 4 -
- Log item 5 -
- Log item 6 -
- Log item 7 -
- Log item 8 -
- Log item 9 -
- Log item 10 -
- Log item 11 -
Log item 12
+{% for ent in log %} +
{{ ent.1.html | safe }}
+{%- endfor %} +
-- 2.30.2