#[cfg(any(feature = "web-sys"))]
use web_sys::Blob;
#[cfg(any(feature = "web-sys"))]
use web_sys::File;
#[cfg(any(feature = "reqwest"))]
pub mod file_analyze;
pub mod structs;
#[derive(Clone, Debug)]
#[cfg(any(feature = "web-sys"))]
pub struct FileResult {
file_size_gb: f64,
file_size_byte: f64,
pub(crate) upload_raw_file: File,
upload_method: String,
chunked_file: Blob,
chunk_upload_size: u64,
}
#[cfg(any(feature = "web-sys"))]
impl FileResult {
pub fn file_analyze(file: File) -> FileResult {
let non_resumable_max_size_gb = 1.0; let _resumable_max_size_gb = 4.0;
let file_size_byte = file.size() as f64; let file_size_gb = file_size_byte / 10_f64.powf(9.0);
let upload_method: String;
if file_size_gb < non_resumable_max_size_gb {
upload_method = "non_resumable".to_string();
} else {
upload_method = "resumable".to_string();
}
FileResult {
file_size_byte,
file_size_gb,
upload_method,
upload_raw_file: file,
chunked_file: Blob::new().unwrap(),
chunk_upload_size: 0,
}
}
pub fn chunk_file(mut self, start: f64, current_blob_size: f64) -> FileResult {
let test_chunk_size = 5000000; let gb_to_byte = 1.0_f64.powf(9.0); let half_gb_to_byte = 5.4_f64.powf(8.0); let mut chunk_size: u64;
let file_size = self.upload_raw_file.size();
if file_size < half_gb_to_byte {
chunk_size = file_size as u64 / 2;
} else if file_size < gb_to_byte {
chunk_size = file_size as u64 / 3;
} else {
chunk_size = file_size as u64 / 5;
}
let chunked_file = self
.upload_raw_file
.slice_with_f64_and_f64(start, current_blob_size)
.unwrap();
self.chunk_upload_size = test_chunk_size;
self.chunked_file = chunked_file;
self
}
pub fn chunked_file(self) -> Blob {
self.chunked_file
}
pub fn upload_chunking_size(self) -> u64 {
self.chunk_upload_size
}
pub fn uploading_method(self) -> String {
self.upload_method
}
pub fn file_size_byte_f64(self) -> f64 {
self.file_size_byte
}
pub fn file_size_byte_string(self) -> String {
let file_size = self.file_size_byte as u64;
file_size.to_string()
}
}