use autonomi::client::{Amount, ClientEvent, UploadSummary};
pub fn collect_upload_summary(
mut event_receiver: tokio::sync::mpsc::Receiver<ClientEvent>,
) -> (
tokio::task::JoinHandle<UploadSummary>,
tokio::sync::oneshot::Sender<()>,
) {
let (upload_completed_tx, mut upload_completed_rx) = tokio::sync::oneshot::channel::<()>();
let stats_thread = tokio::spawn(async move {
let mut tokens_spent: Amount = Amount::from(0);
let mut record_count = 0;
let mut records_already_paid = 0;
loop {
tokio::select! {
event = event_receiver.recv() => {
match event {
Some(ClientEvent::UploadComplete(upload_summary)) => {
tokens_spent += upload_summary.tokens_spent;
record_count += upload_summary.records_paid;
records_already_paid += upload_summary.records_already_paid;
}
None => break,
}
}
_ = &mut upload_completed_rx => break,
}
}
while let Ok(event) = event_receiver.try_recv() {
match event {
ClientEvent::UploadComplete(upload_summary) => {
tokens_spent += upload_summary.tokens_spent;
record_count += upload_summary.records_paid;
records_already_paid += upload_summary.records_already_paid;
}
}
}
UploadSummary {
tokens_spent,
records_paid: record_count,
records_already_paid,
}
});
(stats_thread, upload_completed_tx)
}