use crate::prelude::*;
use reqwest::multipart::{Form, Part};
use std::fs::File;
use std::io::Read;
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct UploadForm {
pub path: PathBuf,
pub category_id: Category,
pub remaster_year: u16,
pub remaster_title: String,
pub remaster_record_label: String,
pub remaster_catalogue_number: String,
pub format: Format,
pub bitrate: Quality,
pub media: Media,
pub release_desc: String,
pub group_id: u32,
}
impl UploadForm {
pub fn to_form(self) -> Result<Form, IoError> {
let mut file = File::open(&self.path)?;
let mut buffer = Vec::new();
let _size = file.read_to_end(&mut buffer)?;
let filename = self
.path
.file_name()
.expect("file should have a name")
.to_string_lossy()
.to_string();
let torrent_part = Part::bytes(buffer).file_name(filename);
let form = Form::new()
.part("file_input", torrent_part)
.text("type", self.category_id.to_upload().to_string())
.text("remaster", "1") .text("remaster_title", self.remaster_title)
.text("remaster_record_label", self.remaster_record_label)
.text("remaster_catalogue_number", self.remaster_catalogue_number)
.text("remaster_year", self.remaster_year.to_string())
.text("format", self.format.to_string())
.text("bitrate", self.bitrate.to_string())
.text("media", self.media.to_string())
.text("release_desc", self.release_desc)
.text("groupid", self.group_id.to_string());
Ok(form)
}
}
impl Display for UploadForm {
fn fmt(&self, formatter: &mut Formatter<'_>) -> FmtResult {
let output = if let Ok(yaml) = serde_yaml::to_string(self) {
yaml
} else {
format!("{self:?}")
};
output.fmt(formatter)
}
}