From a3d27a7e20f0279d34bb683782947658c48d8300 Mon Sep 17 00:00:00 2001 From: tv Date: Sat, 31 Oct 2026 13:28:55 +0100 Subject: one function for changed paths --- src/swarm/changes.rs | 33 +++++---------------------------- 1 file changed, 5 insertions(+), 28 deletions(-) (limited to 'src/swarm/changes.rs') diff --git a/src/swarm/changes.rs b/src/swarm/changes.rs index 10a3bfe..6831081 100644 --- a/src/swarm/changes.rs +++ b/src/swarm/changes.rs @@ -6,28 +6,9 @@ use std::sync::Arc; use tracing::{info, warn}; -use crate::document::store::ChangeSet; +use crate::document::store::{self, ChangeSet, InLists}; use crate::state::AppState; -fn patch_store_path(patch: &automerge::Patch) -> Vec { - let mut path: Vec = patch - .path - .iter() - .map(|(_, prop)| match prop { - automerge::Prop::Map(key) => key.clone(), - automerge::Prop::Seq(index) => index.to_string(), - }) - .collect(); - - match &patch.action { - automerge::PatchAction::PutMap { key, .. } - | automerge::PatchAction::DeleteMap { key, .. } => path.push(key.clone()), - // List, text and counter changes: the containing object changed. - _ => {} - } - path -} - pub(crate) async fn run_change_publisher(state: AppState) { let mut changed = state.change_tx.subscribe(); let mut last_heads = state.write_doc(|doc| doc.get_heads()).await; @@ -52,15 +33,11 @@ pub(crate) async fn run_change_publisher(state: AppState) { let mut paths = Vec::new(); let mut conflicts = Vec::new(); - for patch in doc.diff(&before, &heads) { - let path = patch_store_path(&patch); - if matches!( - patch.action, - automerge::PatchAction::PutMap { conflict: true, .. } - ) { - conflicts.push(path.clone()); + for changed in store::changed(doc, &before, &heads, InLists::Index) { + if changed.conflict { + conflicts.push(changed.path.clone()); } - paths.push(path); + paths.push(changed.path); } (heads, paths, conflicts) }) -- cgit v1.3.1