diff --git a/crates/api/src/local_user/list_media.rs b/crates/api/src/local_user/list_media.rs index 3cc21b251..25df8a4c2 100644 --- a/crates/api/src/local_user/list_media.rs +++ b/crates/api/src/local_user/list_media.rs @@ -15,12 +15,11 @@ pub async fn list_media( ) -> Result, LemmyError> { let page = data.page; let limit = data.limit; - let images = LocalImage::get_all_by_local_user_id( + let images = LocalImage::get_all_paged_by_local_user_id( &mut context.pool(), local_user_view.local_user.id, page, limit, - false, ) .await?; Ok(Json(ListMediaResponse { images })) diff --git a/crates/api/src/site/purge/person.rs b/crates/api/src/site/purge/person.rs index 7af01e139..658846eab 100644 --- a/crates/api/src/site/purge/person.rs +++ b/crates/api/src/site/purge/person.rs @@ -31,14 +31,8 @@ pub async fn purge_person( // Read the local user to get their images, and delete them if let Ok(local_user) = LocalUserView::read_person(&mut context.pool(), data.person_id).await { - let pictrs_uploads = LocalImage::get_all_by_local_user_id( - &mut context.pool(), - local_user.local_user.id, - None, - None, - true, - ) - .await?; + let pictrs_uploads = + LocalImage::get_all_by_local_user_id(&mut context.pool(), local_user.local_user.id).await?; for upload in pictrs_uploads { delete_image_from_pictrs(&upload.pictrs_alias, &upload.pictrs_delete_token, &context) diff --git a/crates/db_schema/src/impls/images.rs b/crates/db_schema/src/impls/images.rs index 7f21592ea..40d5c5853 100644 --- a/crates/db_schema/src/impls/images.rs +++ b/crates/db_schema/src/impls/images.rs @@ -25,26 +25,20 @@ impl LocalImage { .await } - pub async fn get_all_by_local_user_id( + pub async fn get_all_paged_by_local_user_id( pool: &mut DbPool<'_>, user_id: LocalUserId, page: Option, limit: Option, - ignore_page_limits: bool, ) -> Result, Error> { - let conn = &mut get_conn(pool).await?; - let mut query = local_image::table - .filter(local_image::local_user_id.eq(user_id)) - .select(local_image::all_columns) - .order_by(local_image::published.desc()) - .into_boxed(); + Self::get_all_helper(pool, Some(user_id), page, limit, false).await + } - if !ignore_page_limits { - let (limit, offset) = limit_and_offset(page, limit)?; - query = query.limit(limit).offset(offset); - } - - query.load::(conn).await + pub async fn get_all_by_local_user_id( + pool: &mut DbPool<'_>, + user_id: LocalUserId, + ) -> Result, Error> { + Self::get_all_helper(pool, Some(user_id), None, None, true).await } pub async fn get_all( @@ -52,16 +46,32 @@ impl LocalImage { page: Option, limit: Option, ) -> Result, Error> { - let conn = &mut get_conn(pool).await?; - let (limit, offset) = limit_and_offset(page, limit)?; + Self::get_all_helper(pool, None, page, limit, false).await + } - local_image::table + async fn get_all_helper( + pool: &mut DbPool<'_>, + user_id: Option, + page: Option, + limit: Option, + ignore_page_limits: bool, + ) -> Result, Error> { + let conn = &mut get_conn(pool).await?; + let mut query = local_image::table .select(local_image::all_columns) .order_by(local_image::published.desc()) - .limit(limit) - .offset(offset) - .load::(conn) - .await + .into_boxed(); + + if let Some(user_id) = user_id { + query = query.filter(local_image::local_user_id.eq(user_id)) + } + + if !ignore_page_limits { + let (limit, offset) = limit_and_offset(page, limit)?; + query = query.limit(limit).offset(offset); + } + + query.load::(conn).await } pub async fn delete_by_alias(pool: &mut DbPool<'_>, alias: &str) -> Result {