chiark / gitweb /
session: Sort by visible z order on game load (!)
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 10 Jul 2021 00:22:09 +0000 (01:22 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 10 Jul 2021 10:45:31 +0000 (11:45 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
daemon/session.rs

index c1ee497a5d9cc852dff1a9128ee46d7e07d6b9be..d3520772bc7316d18bcbb5685b901099fb3e2be6 100644 (file)
@@ -33,8 +33,9 @@ struct SessionFormattedLogEntry {
   logent: Arc<CommittedLogEntry>,
 }
 
-#[derive(Serialize,Debug)]
+#[derive(Serialize,Debug,Eq,PartialEq,Ord,PartialOrd)]
 struct SessionPieceContext {
+  z: ZLevel,
   id: VisiblePieceId,
   pos: Pos,
   info: String, // SessionPieceLoadJson as JSON
@@ -125,12 +126,10 @@ fn session_inner(form: Json<SessionForm>,
       gpl.layout = layout;
     }
     let layout = gpl.layout;
-    let mut pieces: Vec<_> = ig.gs.pieces.iter().collect();
+    let pieces: Vec<_> = ig.gs.pieces.iter().collect();
     let nick = gpl.nick.clone();
     let movehist = gpl.movehist.clone();
 
-    pieces.sort_by_key(|(_,pr)| &pr.zlevel);
-
     for (piece, gpc) in pieces {
       let ipc = if let Some(pto) = ig.ipieces.get(piece) { pto }
       else { continue /* was deleted */ };
@@ -166,6 +165,7 @@ fn session_inner(form: Json<SessionForm>,
       };
 
       let for_piece = SessionPieceContext {
+        z: zlevel.clone(),
         id: pri.vpid,
         pos: pos,
         info: serde_json::to_string(&for_info)
@@ -174,6 +174,8 @@ fn session_inner(form: Json<SessionForm>,
       uses.push(for_piece);
     }
 
+    uses.sort();
+
     let mut timestamp_abbrev: Option<String> = None;
 
     let log = itertools::chain(