add upload user banner

This commit is contained in:
Felix Ableitner 2024-12-18 11:26:59 +01:00
parent 5f0619534e
commit 5f49b2aaec
4 changed files with 22 additions and 12 deletions

View file

@ -3,12 +3,10 @@ use actix_web::web::Json;
use lemmy_api_common::{ use lemmy_api_common::{
context::LemmyContext, context::LemmyContext,
person::SaveUserSettings, person::SaveUserSettings,
request::replace_image,
utils::{ utils::{
get_url_blocklist, get_url_blocklist,
local_site_to_slur_regex, local_site_to_slur_regex,
process_markdown_opt, process_markdown_opt,
proxy_image_link_opt_api,
send_verification_email, send_verification_email,
}, },
SuccessResponse, SuccessResponse,
@ -21,7 +19,7 @@ use lemmy_db_schema::{
person::{Person, PersonUpdateForm}, person::{Person, PersonUpdateForm},
}, },
traits::Crud, traits::Crud,
utils::{diesel_string_update, diesel_url_update}, utils::diesel_string_update,
}; };
use lemmy_db_views::structs::{LocalUserView, SiteView}; use lemmy_db_views::structs::{LocalUserView, SiteView};
use lemmy_utils::{ use lemmy_utils::{
@ -46,10 +44,6 @@ pub async fn save_user_settings(
.as_deref(), .as_deref(),
); );
let banner = diesel_url_update(data.banner.as_deref())?;
replace_image(&banner, &local_user_view.person.banner, &context).await?;
let banner = proxy_image_link_opt_api(banner, &context).await?;
let display_name = diesel_string_update(data.display_name.as_deref()); let display_name = diesel_string_update(data.display_name.as_deref());
let matrix_user_id = diesel_string_update(data.matrix_user_id.as_deref()); let matrix_user_id = diesel_string_update(data.matrix_user_id.as_deref());
let email_deref = data.email.as_deref().map(str::to_lowercase); let email_deref = data.email.as_deref().map(str::to_lowercase);
@ -104,7 +98,6 @@ pub async fn save_user_settings(
bio, bio,
matrix_user_id, matrix_user_id,
bot_account: data.bot_account, bot_account: data.bot_account,
banner,
..Default::default() ..Default::default()
}; };

View file

@ -114,9 +114,6 @@ pub struct SaveUserSettings {
/// The language of the lemmy interface /// The language of the lemmy interface
#[cfg_attr(feature = "full", ts(optional))] #[cfg_attr(feature = "full", ts(optional))]
pub interface_language: Option<String>, pub interface_language: Option<String>,
/// A URL for your banner.
#[cfg_attr(feature = "full", ts(optional))]
pub banner: Option<String>,
/// Your display name, which can contain strange characters, and does not need to be unique. /// Your display name, which can contain strange characters, and does not need to be unique.
#[cfg_attr(feature = "full", ts(optional))] #[cfg_attr(feature = "full", ts(optional))]
pub display_name: Option<String>, pub display_name: Option<String>,

View file

@ -22,6 +22,7 @@ use UploadType::*;
pub enum UploadType { pub enum UploadType {
Avatar, Avatar,
Banner,
Other, Other,
} }
@ -58,6 +59,24 @@ pub async fn upload_user_avatar(
Ok(Json(SuccessResponse::default())) Ok(Json(SuccessResponse::default()))
} }
pub async fn upload_user_banner(
req: HttpRequest,
body: Payload,
local_user_view: LocalUserView,
context: Data<LemmyContext>,
) -> LemmyResult<Json<SuccessResponse>> {
let image = do_upload_image(req, body, Banner, &local_user_view, &context).await?;
delete_old_image(&local_user_view.person.banner, &context).await?;
let person_form = PersonUpdateForm {
banner: Some(Some(image.image_url.into())),
..Default::default()
};
Person::update(&mut context.pool(), local_user_view.person.id, &person_form).await?;
Ok(Json(SuccessResponse::default()))
}
pub async fn do_upload_image( pub async fn do_upload_image(
req: HttpRequest, req: HttpRequest,
body: Payload, body: Payload,

View file

@ -162,7 +162,7 @@ use lemmy_routes::images::{
delete_image, delete_image,
download::{get_image, image_proxy}, download::{get_image, image_proxy},
pictrs_health, pictrs_health,
upload::{upload_image, upload_user_avatar}, upload::{upload_image, upload_user_avatar, upload_user_banner},
}; };
use lemmy_utils::rate_limit::RateLimitCell; use lemmy_utils::rate_limit::RateLimitCell;
@ -320,6 +320,7 @@ pub fn config(cfg: &mut ServiceConfig, rate_limit: &RateLimitCell) {
.route("/list_logins", get().to(list_logins)) .route("/list_logins", get().to(list_logins))
.route("/validate_auth", get().to(validate_auth)) .route("/validate_auth", get().to(validate_auth))
.route("/avatar", post().to(upload_user_avatar)) .route("/avatar", post().to(upload_user_avatar))
.route("/banner", post().to(upload_user_banner))
.service( .service(
scope("/block") scope("/block")
.route("/person", post().to(user_block_person)) .route("/person", post().to(user_block_person))