Adding blurhash to image_details.

- Fixes #5142
This commit is contained in:
Dessalines 2024-11-25 11:24:35 -05:00
parent ba3d574d92
commit c4a88e56ee
6 changed files with 26 additions and 7 deletions

View file

@ -12,7 +12,7 @@ use futures::StreamExt;
use lemmy_db_schema::{ use lemmy_db_schema::{
newtypes::DbUrl, newtypes::DbUrl,
source::{ source::{
images::{ImageDetailsForm, LocalImage, LocalImageForm}, images::{ImageDetailsInsertForm, LocalImage, LocalImageForm},
post::{Post, PostUpdateForm}, post::{Post, PostUpdateForm},
site::Site, site::Site,
}, },
@ -271,17 +271,20 @@ pub struct PictrsFileDetails {
pub height: u16, pub height: u16,
pub content_type: String, pub content_type: String,
pub created_at: DateTime<Utc>, pub created_at: DateTime<Utc>,
// TODO this can get changed to String on future versions of pictrs
pub blurhash: Option<String>,
} }
impl PictrsFileDetails { impl PictrsFileDetails {
/// Builds the image form. This should always use the thumbnail_url, /// Builds the image form. This should always use the thumbnail_url,
/// Because the post_view joins to it /// Because the post_view joins to it
pub fn build_image_details_form(&self, thumbnail_url: &Url) -> ImageDetailsForm { pub fn build_image_details_form(&self, thumbnail_url: &Url) -> ImageDetailsInsertForm {
ImageDetailsForm { ImageDetailsInsertForm {
link: thumbnail_url.clone().into(), link: thumbnail_url.clone().into(),
width: self.width.into(), width: self.width.into(),
height: self.height.into(), height: self.height.into(),
content_type: self.content_type.clone(), content_type: self.content_type.clone(),
blurhash: self.blurhash.clone(),
} }
} }
} }

View file

@ -1,7 +1,7 @@
use crate::{ use crate::{
newtypes::DbUrl, newtypes::DbUrl,
schema::{image_details, local_image, remote_image}, schema::{image_details, local_image, remote_image},
source::images::{ImageDetails, ImageDetailsForm, LocalImage, LocalImageForm, RemoteImage}, source::images::{ImageDetails, ImageDetailsInsertForm, LocalImage, LocalImageForm, RemoteImage},
utils::{get_conn, DbPool}, utils::{get_conn, DbPool},
}; };
use diesel::{ use diesel::{
@ -20,7 +20,7 @@ impl LocalImage {
pub async fn create( pub async fn create(
pool: &mut DbPool<'_>, pool: &mut DbPool<'_>,
form: &LocalImageForm, form: &LocalImageForm,
image_details_form: &ImageDetailsForm, image_details_form: &ImageDetailsInsertForm,
) -> Result<Self, Error> { ) -> Result<Self, Error> {
let conn = &mut get_conn(pool).await?; let conn = &mut get_conn(pool).await?;
conn conn
@ -84,7 +84,10 @@ impl RemoteImage {
} }
impl ImageDetails { impl ImageDetails {
pub async fn create(pool: &mut DbPool<'_>, form: &ImageDetailsForm) -> Result<usize, Error> { pub async fn create(
pool: &mut DbPool<'_>,
form: &ImageDetailsInsertForm,
) -> Result<usize, Error> {
let conn = &mut get_conn(pool).await?; let conn = &mut get_conn(pool).await?;
insert_into(image_details::table) insert_into(image_details::table)

View file

@ -303,6 +303,8 @@ diesel::table! {
width -> Int4, width -> Int4,
height -> Int4, height -> Int4,
content_type -> Text, content_type -> Text,
#[max_length = 50]
blurhash -> Nullable<Varchar>,
} }
} }

View file

@ -64,14 +64,16 @@ pub struct ImageDetails {
pub width: i32, pub width: i32,
pub height: i32, pub height: i32,
pub content_type: String, pub content_type: String,
pub blurhash: Option<String>,
} }
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
#[cfg_attr(feature = "full", derive(Insertable, AsChangeset))] #[cfg_attr(feature = "full", derive(Insertable, AsChangeset))]
#[cfg_attr(feature = "full", diesel(table_name = image_details))] #[cfg_attr(feature = "full", diesel(table_name = image_details))]
pub struct ImageDetailsForm { pub struct ImageDetailsInsertForm {
pub link: DbUrl, pub link: DbUrl,
pub width: i32, pub width: i32,
pub height: i32, pub height: i32,
pub content_type: String, pub content_type: String,
pub blurhash: Option<String>,
} }

View file

@ -0,0 +1,3 @@
ALTER TABLE image_details
DROP COLUMN blurhash;

View file

@ -0,0 +1,6 @@
-- Add a blurhash column for image_details
ALTER TABLE image_details
-- Supposed to be 20-30 chars, use 50 to be safe
-- TODO this should be made not null for future versions of pictrs
ADD COLUMN blurhash varchar(50);