diff options
Diffstat (limited to 'dichroism/src/models')
| -rw-r--r-- | dichroism/src/models/mod.rs | 6 | ||||
| -rw-r--r-- | dichroism/src/models/new_photo.rs | 6 | ||||
| -rw-r--r-- | dichroism/src/models/new_photo_data.rs | 95 | ||||
| -rw-r--r-- | dichroism/src/models/new_photo_set.rs | 8 | ||||
| -rw-r--r-- | dichroism/src/models/photo.rs | 4 | ||||
| -rw-r--r-- | dichroism/src/models/photo_set.rs | 25 | 
6 files changed, 13 insertions, 131 deletions
diff --git a/dichroism/src/models/mod.rs b/dichroism/src/models/mod.rs index e0fc3bd..529a9bc 100644 --- a/dichroism/src/models/mod.rs +++ b/dichroism/src/models/mod.rs @@ -1,13 +1,7 @@ -mod new_photo; -mod new_photo_data; -mod new_photo_set;  mod photo;  mod photo_set;  mod product; -pub use new_photo::*; -pub use new_photo_data::*; -pub use new_photo_set::*;  pub use photo::*;  pub use photo_set::*;  pub use product::*; diff --git a/dichroism/src/models/new_photo.rs b/dichroism/src/models/new_photo.rs deleted file mode 100644 index d348e95..0000000 --- a/dichroism/src/models/new_photo.rs +++ /dev/null @@ -1,6 +0,0 @@ -use crate::schema::photos; -#[table_name = "photos"] -#[derive(Debug, Insertable)] -pub struct NewPhoto { -    pub path: String, -} diff --git a/dichroism/src/models/new_photo_data.rs b/dichroism/src/models/new_photo_data.rs deleted file mode 100644 index 19a6557..0000000 --- a/dichroism/src/models/new_photo_data.rs +++ /dev/null @@ -1,95 +0,0 @@ -use super::NewPhoto; -use super::NewPhotoSet; -use crate::error::DichroismError; -use crate::result::Result; -use base64::decode; -use image::imageops::FilterType; -use image::DynamicImage; -use image::GenericImageView; -use regex::Regex; -use std::path::PathBuf; -use uuid::Uuid; - -use once_cell::sync::Lazy; -static DATA_URI_RE: Lazy<Regex> = Lazy::new(|| { -    Regex::new("^data:image/(png|jpeg);base64,(?P<data>.+)") -        .expect("Couldn't parse data URI Regex.") -}); - -pub struct NewPhotoSetData { -    original: DynamicImage,  // original, just for safe-keeping -    fullsize: DynamicImage,  // full-size, "zoomed" view -    base: DynamicImage,      // basic viewing -    thumbnail: DynamicImage, // tiny, square thumbnail -} - -impl NewPhotoSetData { -    pub fn from_data_uri(uri: &str) -> Result<Self> { -        let data = DATA_URI_RE -            .captures(uri) -            .ok_or(DichroismError::UriDataExtract)? -            .name("data") -            .ok_or(DichroismError::UriDataExtract)? -            .as_str(); -        let original = image::load_from_memory(&decode(data)?)?; -        let fullsize = original.resize(1000, 1000, FilterType::Lanczos3); -        let base = original.resize(640, 640, FilterType::Lanczos3); - -        let (width, height) = original.dimensions(); -        let thumbnail = if width > height { -            let offset = (width - height) / 2; -            original.crop_imm(offset, 0, width - offset * 2, height) -        } else { -            let offset = (height - width) / 2; -            original.crop_imm(0, offset, width, height - offset * 2) -        } -        .resize(300, 300, FilterType::Lanczos3); - -        Ok(NewPhotoSetData { -            original, -            fullsize, -            base, -            thumbnail, -        }) -    } - -    pub fn commit(self, prefix: &str) -> Result<NewPhotoSet> { -        Ok(NewPhotoSet { -            original: self.commit_single(prefix, &self.original)?, -            fullsize: self.commit_single(prefix, &self.fullsize)?, -            base: self.commit_single(prefix, &self.base)?, -            thumbnail: self.commit_single(prefix, &self.thumbnail)?, -        }) -    } - -    fn commit_single(&self, prefix: &str, image: &DynamicImage) -> Result<NewPhoto> { -        let base_name = Uuid::new_v3(&Uuid::NAMESPACE_OID, &image.to_bytes()) -            .to_hyphenated() -            .to_string(); -        let mut path = PathBuf::new(); -        path.push(prefix); -        path.push(base_name); -        path.set_extension("jpg"); -        image.save(&path)?; - -        Ok(NewPhoto { -            path: path.to_str().ok_or(DichroismError::ImageWrite)?.to_string(), -        }) -    } -} - -#[cfg(test)] -mod tests { -    use super::*; - -    const TEST_DATA_URI: &str = include_str!("../unit_test_data/img_data_uri.txt"); -    const TEST_DATA_BASE64: &str = include_str!("../unit_test_data/test_data_base64.txt"); - -    #[test] -    fn test_gen_product_images() { -        NewPhotoSetData::from_data_uri(TEST_DATA_URI.trim()) -            .unwrap() -            .commit(".") -            .unwrap(); -    } -} diff --git a/dichroism/src/models/new_photo_set.rs b/dichroism/src/models/new_photo_set.rs deleted file mode 100644 index e907592..0000000 --- a/dichroism/src/models/new_photo_set.rs +++ /dev/null @@ -1,8 +0,0 @@ -use super::NewPhoto; - -pub struct NewPhotoSet { -    pub original: NewPhoto, -    pub fullsize: NewPhoto, -    pub base: NewPhoto, -    pub thumbnail: NewPhoto, -} diff --git a/dichroism/src/models/photo.rs b/dichroism/src/models/photo.rs index dee6288..6069085 100644 --- a/dichroism/src/models/photo.rs +++ b/dichroism/src/models/photo.rs @@ -11,6 +11,10 @@ pub struct Photo {  }  impl Photo { +    pub fn from_path(path: String) -> Self { +        Self { path } +    } +      pub fn from_image(image: &DynamicImage) -> Result<Self> {          let base_name = Uuid::new_v3(&Uuid::NAMESPACE_OID, &image.to_bytes())              .to_hyphenated() diff --git a/dichroism/src/models/photo_set.rs b/dichroism/src/models/photo_set.rs index 84fe0e1..7187c65 100644 --- a/dichroism/src/models/photo_set.rs +++ b/dichroism/src/models/photo_set.rs @@ -21,6 +21,15 @@ pub struct PhotoSet {  }  impl PhotoSet { +    pub fn from_photos(original: Photo, fullsize: Photo, base: Photo, thumbnail: Photo) -> Self { +        Self { +            original, +            fullsize, +            base, +            thumbnail, +        } +    } +      pub fn from_data_uri(uri: &str) -> Result<Self> {          let data = DATA_URI_RE              .captures(uri) @@ -50,19 +59,3 @@ impl PhotoSet {          })      }  } - -#[cfg(test)] -mod tests { -    //use super::*; - -    const TEST_DATA_URI: &str = include_str!("../unit_test_data/img_data_uri.txt"); -    const TEST_DATA_BASE64: &str = include_str!("../unit_test_data/test_data_base64.txt"); - -    #[test] -    fn test_gen_product_images() { -        //        PhotoSet::from_data_uri(TEST_DATA_URI.trim()) -        //            .unwrap() -        //            .commit(".") -        //            .unwrap(); -    } -}  |