mirror of
https://github.com/chatmail/core.git
synced 2026-05-02 04:46:29 +03:00
fix: make it possible to cancel ongoing backup transfer
This commit is contained in:
@@ -31,7 +31,8 @@ use std::pin::Pin;
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::task::Poll;
|
use std::task::Poll;
|
||||||
|
|
||||||
use anyhow::{bail, Context as _, Result};
|
use anyhow::{bail, format_err, Context as _, Result};
|
||||||
|
use futures_lite::FutureExt;
|
||||||
use iroh_net::relay::RelayMode;
|
use iroh_net::relay::RelayMode;
|
||||||
use iroh_net::Endpoint;
|
use iroh_net::Endpoint;
|
||||||
use tokio::fs;
|
use tokio::fs;
|
||||||
@@ -231,8 +232,19 @@ impl BackupProvider {
|
|||||||
let context = context.clone();
|
let context = context.clone();
|
||||||
let auth_token = auth_token.clone();
|
let auth_token = auth_token.clone();
|
||||||
let dbfile = dbfile.clone();
|
let dbfile = dbfile.clone();
|
||||||
if let Err(err) = Self::handle_connection(context.clone(), conn, auth_token, dbfile).await {
|
if let Err(err) = Self::handle_connection(context.clone(), conn, auth_token, dbfile).race(
|
||||||
|
async {
|
||||||
|
cancel_token.recv().await.ok();
|
||||||
|
Err(format_err!("Backup transfer cancelled"))
|
||||||
|
}
|
||||||
|
).race(
|
||||||
|
async {
|
||||||
|
drop_token.cancelled().await;
|
||||||
|
Err(format_err!("Backup provider dropped"))
|
||||||
|
}
|
||||||
|
).await {
|
||||||
warn!(context, "Error while handling backup connection: {err:#}.");
|
warn!(context, "Error while handling backup connection: {err:#}.");
|
||||||
|
context.emit_event(EventType::ImexProgress(0));
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
info!(context, "Backup transfer finished successfully.");
|
info!(context, "Backup transfer finished successfully.");
|
||||||
@@ -243,10 +255,12 @@ impl BackupProvider {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
_ = cancel_token.recv() => {
|
_ = cancel_token.recv() => {
|
||||||
|
info!(context, "Backup transfer cancelled by the user, stopping accept loop.");
|
||||||
context.emit_event(EventType::ImexProgress(0));
|
context.emit_event(EventType::ImexProgress(0));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
_ = drop_token.cancelled() => {
|
_ = drop_token.cancelled() => {
|
||||||
|
info!(context, "Backup transfer cancelled by dropping the provider, stopping accept loop.");
|
||||||
context.emit_event(EventType::ImexProgress(0));
|
context.emit_event(EventType::ImexProgress(0));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user