/// Performs a synchronisation between `local` and `remote`, and provide feeedback to the user about the progress.
///
/// This bidirectional sync applies additions/deletions made on a source to the other source.
/// In case of conflicts (the same item has been modified on both ends since the last sync, `remote` always wins)
/// In case of conflicts (the same item has been modified on both ends since the last sync, `remote` always wins).
///
/// It returns whether the sync was totally successful (details about errors are logged using the `log::*` macros).
/// In case errors happened, the sync might have been partially executed, and you can safely run this function again, since it has been designed to gracefully recover from errors.
/// In case errors happened, the sync might have been partially executed but your data will never be correupted (either locally nor in the server).
/// Simply run this function again, it will re-start a sync, picking up where it failed.