diff --git a/src/provider/mod.rs b/src/provider/mod.rs index aaca96f..b1eb24a 100644 --- a/src/provider/mod.rs +++ b/src/provider/mod.rs @@ -299,30 +299,13 @@ where } } - for url_add in remote_additions { - progress.debug(&format!("> Applying remote addition {} locally", url_add)); - progress.feedback(SyncEvent::InProgress{ - calendar: cal_name.clone(), - details: Self::item_name(&cal_local, &url_add).await, - }); - match cal_remote.get_item_by_url(&url_add).await { - Err(err) => { - progress.warn(&format!("Unable to get remote item {}: {}. Skipping it.", url_add, err)); - continue; - }, - Ok(item) => match item { - None => { - progress.error(&format!("Inconsistency: new item {} has vanished from the remote end", url_add)); - continue; - }, - Some(new_item) => { - if let Err(err) = cal_local.add_item(new_item.clone()).await { - progress.error(&format!("Not able to add item {} to local calendar: {}", url_add, err)); - } - }, - }, - } - } + Self::apply_remote_additions( + remote_additions, + &mut *cal_local, + &mut *cal_remote, + progress, + &cal_name + ).await; for url_change in remote_changes { progress.debug(&format!("> Applying remote change {} locally", url_change)); @@ -404,6 +387,46 @@ where cal.get_item_by_url(url).await.map(|item| item.name()).unwrap_or_default().to_string() } + async fn apply_remote_additions( + remote_additions: HashSet, + cal_local: &mut T, + cal_remote: &mut U, + progress: &mut SyncProgress, + cal_name: &str + ) { + // + // + // + // + // + // TODO: OPTIM: in the server -> local way, download all the content at once + // + for url_add in remote_additions { + progress.debug(&format!("> Applying remote addition {} locally", url_add)); + progress.feedback(SyncEvent::InProgress{ + calendar: cal_name.to_string(), + details: Self::item_name(&cal_local, &url_add).await, + }); + match cal_remote.get_item_by_url(&url_add).await { + Err(err) => { + progress.warn(&format!("Unable to get remote item {}: {}. Skipping it.", url_add, err)); + continue; + }, + Ok(item) => match item { + None => { + progress.error(&format!("Inconsistency: new item {} has vanished from the remote end", url_add)); + continue; + }, + Some(new_item) => { + if let Err(err) = cal_local.add_item(new_item.clone()).await { + progress.error(&format!("Not able to add item {} to local calendar: {}", url_add, err)); + } + }, + }, + } + } + } + }