From e18bc74c0b861107437a18f78f353ac31b4a3a12 Mon Sep 17 00:00:00 2001 From: Mroik Date: Tue, 24 Jun 2025 10:25:14 +0200 Subject: Fix padding on final chunk --- src/main.rs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 9822e8c..86c8a23 100644 --- a/src/main.rs +++ b/src/main.rs @@ -58,6 +58,7 @@ async fn backup() -> Result<()> { remove_file(BACKUP)?; let bot = Bot::from_env(); + let total = std::fs::metadata(BACKUP_ENCRYPTED)?.len() as usize; let mut data_to_send = File::open(BACKUP_ENCRYPTED)?; bot.send_message( @@ -68,17 +69,23 @@ async fn backup() -> Result<()> { let mut rr; let mut part = 0; + let mut read = 0; loop { - let mut buf = vec![0; MAX_FILE_SIZE]; + let mut buf = vec![ + 0; + if total - read < MAX_FILE_SIZE { + total - read + } else { + MAX_FILE_SIZE + } + ]; + rr = data_to_send.read(&mut buf)?; + read += rr; debug!("Read {} bytes", rr); let data = InputFile::memory(buf).file_name(format!("part_{:06}", part)); - if rr == 0 { - break; - } - loop { match bot.send_document(chat_id.clone(), data.clone()).await { Ok(_) => break, @@ -94,6 +101,10 @@ async fn backup() -> Result<()> { } info!("Sent part {}", part); part += 1; + + if read >= total { + break; + } } drop(data_to_send); -- cgit v1.2.3