aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authorMroik <mroik@delayed.space>2025-06-24 10:25:14 +0200
committerMroik <mroik@delayed.space>2025-06-24 10:25:14 +0200
commite18bc74c0b861107437a18f78f353ac31b4a3a12 (patch)
tree13903fc877b2a7ca9757667e66799ba1dac8ea08 /src/main.rs
parentcbb450c59784f911deb813cdf8cffea104573b3e (diff)
Fix padding on final chunk
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs21
1 files changed, 16 insertions, 5 deletions
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);