[example] Update provider-sync

This commit is contained in:
daladim 2021-04-17 19:31:09 +02:00
parent c63f859cbc
commit f750257b3b

View file

@ -1,12 +1,17 @@
use std::path::Path; use std::path::Path;
use chrono::{Utc};
use my_tasks::{client::Client, traits::CalDavSource}; use my_tasks::{client::Client, traits::CalDavSource};
use my_tasks::calendar::{CalendarId, cached_calendar::CachedCalendar, remote_calendar::RemoteCalendar}; use my_tasks::calendar::{CalendarId, cached_calendar::CachedCalendar, remote_calendar::RemoteCalendar};
use my_tasks::Item; use my_tasks::Item;
use my_tasks::Task; use my_tasks::Task;
use my_tasks::task::CompletionStatus;
use my_tasks::ItemId;
use my_tasks::cache::Cache; use my_tasks::cache::Cache;
use my_tasks::Provider; use my_tasks::Provider;
use my_tasks::traits::BaseCalendar; use my_tasks::traits::BaseCalendar;
use my_tasks::traits::CompleteCalendar;
use my_tasks::settings::URL; use my_tasks::settings::URL;
use my_tasks::settings::USERNAME; use my_tasks::settings::USERNAME;
use my_tasks::settings::PASSWORD; use my_tasks::settings::PASSWORD;
@ -38,7 +43,7 @@ async fn main() {
let mut provider = Provider::new(client, cache); let mut provider = Provider::new(client, cache);
let cals = provider.local().get_calendars().await.unwrap(); let cals = provider.local().get_calendars().await.unwrap();
println!("---- before sync -----"); println!("---- Local items, before sync -----");
my_tasks::utils::print_calendar_list(&cals).await; my_tasks::utils::print_calendar_list(&cals).await;
println!("Starting a sync..."); println!("Starting a sync...");
@ -47,23 +52,27 @@ async fn main() {
} }
provider.local().save_to_folder().unwrap(); provider.local().save_to_folder().unwrap();
println!("---- after sync -----"); println!("---- Local items, after sync -----");
let cals = provider.local().get_calendars().await.unwrap(); let cals = provider.local().get_calendars().await.unwrap();
my_tasks::utils::print_calendar_list(&cals).await; my_tasks::utils::print_calendar_list(&cals).await;
add_items_and_sync_again(&mut provider).await; let changed_calendar_id: CalendarId = EXAMPLE_CALENDAR_URL.parse().unwrap();
add_items_and_sync_again(&mut provider, &changed_calendar_id).await;
} }
async fn add_items_and_sync_again(provider: &mut Provider<Cache, CachedCalendar, Client, RemoteCalendar>) { async fn add_items_and_sync_again(
println!("Now, we'll add a task and run the sync again."); provider: &mut Provider<Cache, CachedCalendar, Client, RemoteCalendar>,
changed_calendar_id: &CalendarId)
{
println!("\nNow, we'll add a task and run the sync again.");
pause(); pause();
let changed_calendar_id: CalendarId = EXAMPLE_CALENDAR_URL.parse().unwrap(); let new_name = "This is a new task we're adding as an example, with ÜTF-8 characters";
let changed_calendar = provider.local().get_calendar(&changed_calendar_id).await.unwrap();
let new_name = "New example task";
let new_task = Task::new(String::from(new_name), false, &changed_calendar_id); let new_task = Task::new(String::from(new_name), false, &changed_calendar_id);
changed_calendar.lock().unwrap().add_item(Item::Task(new_task)).await.unwrap(); let new_id = new_task.id().clone();
provider.local().get_calendar(changed_calendar_id).await.unwrap()
.lock().unwrap().add_item(Item::Task(new_task)).await.unwrap();
if provider.sync().await == false { if provider.sync().await == false {
log::warn!("Sync did not complete, see the previous log lines for more info. You can safely start a new sync. The new task may not have been synced."); log::warn!("Sync did not complete, see the previous log lines for more info. You can safely start a new sync. The new task may not have been synced.");
@ -72,5 +81,51 @@ async fn add_items_and_sync_again(provider: &mut Provider<Cache, CachedCalendar,
} }
provider.local().save_to_folder().unwrap(); provider.local().save_to_folder().unwrap();
complete_item_and_sync_again(provider, changed_calendar_id, &new_id).await;
}
async fn complete_item_and_sync_again(
provider: &mut Provider<Cache, CachedCalendar, Client, RemoteCalendar>,
changed_calendar_id: &CalendarId,
id_to_complete: &ItemId)
{
println!("\nNow, we'll mark this last task as completed, and run the sync again.");
pause();
let completion_status = CompletionStatus::Completed(Some(Utc::now()));
provider.local().get_calendar(changed_calendar_id).await.unwrap()
.lock().unwrap().get_item_by_id_mut(id_to_complete).await.unwrap()
.unwrap_task_mut()
.set_completion_status(completion_status);
if provider.sync().await == false {
log::warn!("Sync did not complete, see the previous log lines for more info. You can safely start a new sync. The new task may not have been synced.");
} else {
println!("Done syncing the completed task");
}
provider.local().save_to_folder().unwrap();
remove_item_and_sync_again(provider, changed_calendar_id, id_to_complete).await;
}
async fn remove_item_and_sync_again(
provider: &mut Provider<Cache, CachedCalendar, Client, RemoteCalendar>,
changed_calendar_id: &CalendarId,
id_to_remove: &ItemId)
{
println!("\nNow, we'll delete this last task, and run the sync again.");
pause();
provider.local().get_calendar(changed_calendar_id).await.unwrap()
.lock().unwrap()
.mark_for_deletion(id_to_remove).await.unwrap();
if provider.sync().await == false {
log::warn!("Sync did not complete, see the previous log lines for more info. You can safely start a new sync. The new task may not have been synced.");
} else {
println!("Done syncing the deleted task");
}
provider.local().save_to_folder().unwrap();
println!("Done. You can start this example again to see the cache being restored from its current saved state") println!("Done. You can start this example again to see the cache being restored from its current saved state")
} }