aboutsummaryrefslogtreecommitdiffstats
path: root/src/swarm
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-10-31 13:28:55 +0100
committertv <tv@krebsco.de>2026-10-31 13:28:55 +0100
commit1d0b1646c5cbb9cb177369189539a2bf0d132ba8 (patch)
tree4fd36872fdddda3c315665c0b9050eaae3c586de /src/swarm
parent36ffffb89b1dfeca0163b6ecd9c46239aca6465e (diff)
one function for changed paths
Diffstat (limited to 'src/swarm')
-rw-r--r--src/swarm/changes.rs33
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)
})