diff options
| author | tv <tv@krebsco.de> | 2026-10-31 13:28:55 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-10-31 13:28:55 +0100 |
| commit | 1d0b1646c5cbb9cb177369189539a2bf0d132ba8 (patch) | |
| tree | 4fd36872fdddda3c315665c0b9050eaae3c586de /src/swarm/changes.rs | |
| parent | 36ffffb89b1dfeca0163b6ecd9c46239aca6465e (diff) | |
one function for changed paths
Diffstat (limited to 'src/swarm/changes.rs')
| -rw-r--r-- | src/swarm/changes.rs | 33 |
1 files changed, 5 insertions, 28 deletions
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<String> { - let mut path: Vec<String> = 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) }) |
