diff --git a/src/app/sync.rs b/src/app/sync.rs index d30d44d..b417e4c 100644 --- a/src/app/sync.rs +++ b/src/app/sync.rs @@ -40,14 +40,10 @@ impl AppaService { let local_roster = self.load_roster(folder.id)?; let can_publish_changes = folder.mode.can_send() && local_roster.can_publish(&node.endpoint_address().id.to_string()); - node.register_folder( - FolderSession { - folder_id: folder.id, - capability: folder.capability.clone(), - active_member_ids: local_roster.active_device_ids(), - roster: local_roster.clone(), - peer_endpoints: self.state_store.peers(folder.id)?, - }, + self.register_sync_folder( + folder, + node, + &local_roster, self.state_store.load_manifest(folder.id)?, ) .await?; @@ -65,19 +61,10 @@ impl AppaService { report_local_changes(&manifest_build.changed_paths); let has_local_changes = !manifest_build.changed_paths.is_empty(); let mut local_manifest = manifest_build.manifest; - node.register_folder( - FolderSession { - folder_id: folder.id, - capability: folder.capability.clone(), - active_member_ids: local_roster.active_device_ids(), - roster: local_roster, - peer_endpoints: self.state_store.peers(folder.id)?, - }, - local_manifest.clone(), - ) - .await?; - self.state_store.save_manifest(&local_manifest)?; - node.publish_manifest(local_manifest.clone()).await?; + self.register_sync_folder(folder, node, &local_roster, local_manifest.clone()) + .await?; + self.persist_published_manifest(node, &local_manifest) + .await?; if has_local_changes && can_publish_changes { let report = node .announce_manifest( @@ -122,8 +109,7 @@ impl AppaService { node: &NodeHost, manifest: crate::domain::Manifest, ) -> AppResult<()> { - self.state_store.save_manifest(&manifest)?; - node.publish_manifest(manifest.clone()).await?; + self.persist_published_manifest(node, &manifest).await?; let report = node .announce_manifest( self.state_store.peers(folder.id)?, @@ -136,6 +122,35 @@ impl AppaService { Ok(()) } + async fn register_sync_folder( + &self, + folder: &FolderConfig, + node: &NodeHost, + roster: &FolderRoster, + manifest: crate::domain::Manifest, + ) -> AppResult<()> { + node.register_folder( + FolderSession { + folder_id: folder.id, + capability: folder.capability.clone(), + active_member_ids: roster.active_device_ids(), + roster: roster.clone(), + peer_endpoints: self.state_store.peers(folder.id)?, + }, + manifest, + ) + .await + } + + async fn persist_published_manifest( + &self, + node: &NodeHost, + manifest: &crate::domain::Manifest, + ) -> AppResult<()> { + self.state_store.save_manifest(manifest)?; + node.publish_manifest(manifest.clone()).await + } + pub(super) fn save_discovered_peers( &self, folder: &FolderConfig,