use std::path::Path;
use crate::i18n::{Language, tr};
use crate::summary::{human_bytes, human_duration};
use super::{SyncDirection, util::throughput_text};
#[derive(Debug)]
pub(super) enum ShareOutcome {
Completed(TransferSummary),
Rejected(String),
}
#[derive(Debug)]
pub(super) struct TransferSummary {
pub(super) direction: SyncDirection,
pub(super) files: usize,
pub(super) bytes: u64,
pub(super) deleted: usize,
pub(super) file_concurrency: usize,
pub(super) elapsed_ms: u128,
}
#[derive(Debug)]
pub(super) struct ReceiveSummary {
pub(super) files: usize,
pub(super) bytes: u64,
pub(super) deleted: usize,
}
#[derive(Debug, Clone, Copy)]
pub(super) enum NetworkSide {
Share,
Connect,
}
pub(super) struct NetworkSummary<'a> {
pub(super) side: NetworkSide,
pub(super) direction: SyncDirection,
pub(super) directory: &'a Path,
pub(super) remote: &'a str,
pub(super) files: usize,
pub(super) bytes: u64,
pub(super) deleted: usize,
pub(super) file_concurrency: usize,
pub(super) elapsed_ms: u128,
}
impl NetworkSummary<'_> {
pub(super) fn to_text(&self, language: Language) -> String {
let side = match self.side {
NetworkSide::Share => tr(language, "network.summary.side_share"),
NetworkSide::Connect => tr(language, "network.summary.side_connect"),
};
let direction = match self.direction {
SyncDirection::Pull => tr(language, "network.summary.direction_pull"),
SyncDirection::Push => tr(language, "network.summary.direction_push"),
};
format!(
"\
fastsync {}
{}
{} {}
{} {}
{} {}
{} {}
{} {}
{}
{} {}
{} {}
{} {}
{} {}
{} {}
",
tr(language, "network.summary.title"),
tr(language, "network.summary.session"),
tr(language, "network.summary.side"),
side,
tr(language, "network.summary.direction"),
direction,
tr(language, "network.summary.directory"),
self.directory.display(),
tr(language, "network.summary.remote"),
self.remote,
tr(language, "network.summary.concurrency"),
self.file_concurrency,
tr(language, "network.summary.result"),
tr(language, "network.summary.files"),
self.files,
tr(language, "network.summary.data"),
human_bytes(self.bytes),
tr(language, "network.summary.deleted"),
self.deleted,
tr(language, "network.summary.duration"),
human_duration(self.elapsed_ms),
tr(language, "network.summary.throughput"),
throughput_text(self.bytes, self.elapsed_ms),
)
}
}