downloader_rs/
download_operation.rs1use std::sync::{Arc};
2use crate::download_status::DownloadStatus;
3use crate::download_receiver::DownloadReceiver;
4use crate::downloader::{Downloader};
5use crate::error::DownloadError;
6
7pub struct DownloadOperation {
8 downloader: Arc<Downloader>,
9 download_receiver: DownloadReceiver,
10}
11
12impl DownloadOperation {
13 pub fn new(
14 downloader: Arc<Downloader>,
15 download_receiver: DownloadReceiver) -> DownloadOperation {
16 DownloadOperation {
17 downloader,
18 download_receiver,
19 }
20 }
21
22 pub fn status(&self) -> DownloadStatus {
23 let status = self.downloader.status();
24 return status;
25 }
26
27 pub fn downloaded_size(&self) -> u64 {
28 return *self.download_receiver.downloaded_size_receiver.borrow();
29 }
30
31 pub fn total_size(&self) -> u64 {
32 return *self.download_receiver.download_total_size_receiver.borrow();
33 }
34
35 pub fn progress(&self) -> f64 {
36 let total_size = self.total_size();
37 if total_size == 0 {
38 return 0f64;
39 }
40 let total_length = total_size as f64;
41 let downloaded_size = self.downloaded_size() as f64;
42 return (downloaded_size / total_length).clamp(0f64, 1f64);
43 }
44
45 pub fn bytes(&self) -> Vec<u8> {
46 let bytes = self.download_receiver.memory_receiver.as_ref().unwrap().borrow();
47 bytes.to_vec()
48 }
49
50 pub fn is_done(&self) -> bool {
51 return self.downloader.is_done();
52 }
53
54 pub fn is_error(&self) -> bool {
55 return self.status() == DownloadStatus::Failed;
56 }
57
58 pub fn error(&self) -> DownloadError {
59 return (*self.download_receiver.error_receiver.borrow()).clone();
60 }
61
62 pub fn stop(&self) {
63 self.downloader.stop();
64 }
65}