diff options
Diffstat (limited to 'server/src/ui/account')
-rw-r--r-- | server/src/ui/account/settings.rs | 46 |
1 files changed, 22 insertions, 24 deletions
diff --git a/server/src/ui/account/settings.rs b/server/src/ui/account/settings.rs index 677683b..d31c4ba 100644 --- a/server/src/ui/account/settings.rs +++ b/server/src/ui/account/settings.rs @@ -8,7 +8,10 @@ use crate::{ helper::{RequestInfo, A}, ui::error::MyResult, }; -use jellycommon::user::{PlayerKind, Theme}; +use jellycommon::{ + routes::u_account_settings, + user::{PlayerKind, Theme}, +}; use jellylogic::account::{ update_user_display_name, update_user_native_secret, update_user_password, update_user_player_preference, update_user_theme, @@ -17,7 +20,8 @@ use jellyui::{account::settings::SettingsPage, locale::tr, render_page, scaffold use rocket::{ form::{self, validate::len, Contextual, Form}, get, post, - response::content::RawHtml, + request::FlashMessage, + response::{content::RawHtml, Flash, Redirect}, FromForm, }; use std::ops::Range; @@ -37,11 +41,11 @@ fn option_len<'v>(value: &Option<String>, range: Range<usize>) -> form::Result<' value.as_ref().map(|v| len(v, range)).unwrap_or(Ok(())) } -// TODO use FlashMessage -fn settings_page(flash: Option<Result<String, String>>, ri: RequestInfo) -> RawHtml<String> { +#[get("/account/settings")] +pub fn r_account_settings(ri: RequestInfo, flash: Option<FlashMessage>) -> RawHtml<String> { RawHtml(render_page( &SettingsPage { - flash, + flash: &flash.map(FlashMessage::into_inner), session: &SessionInfo { user: ri.session.user.clone(), }, @@ -51,23 +55,18 @@ fn settings_page(flash: Option<Result<String, String>>, ri: RequestInfo) -> RawH )) } -#[get("/account/settings")] -pub fn r_account_settings(ri: RequestInfo) -> RawHtml<String> { - settings_page(None, ri) -} - #[post("/account/settings", data = "<form>")] pub fn r_account_settings_post( ri: RequestInfo, form: Form<Contextual<SettingsForm>>, -) -> MyResult<RawHtml<String>> { +) -> MyResult<Flash<Redirect>> { let form = match &form.value { Some(v) => v, None => { - return Ok(settings_page( - Some(Err(format_form_error(form).to_string())), - ri, - )) + return Ok(Flash::error( + Redirect::to(u_account_settings()), + format_form_error(form), + )); } }; @@ -95,15 +94,14 @@ pub fn r_account_settings_post( } if let Some(native_secret) = &form.native_secret { update_user_native_secret(&ri.session, native_secret)?; - out += "Native secret updated.\n"; + out += &*tr(ri.lang, "settings.native_secret.changed"); + out += "\n"; } + let out = if out.is_empty() { + tr(ri.lang, "settings.no_change").to_string() + } else { + out + }; - Ok(settings_page( - Some(Ok(if out.is_empty() { - tr(ri.lang, "settings.no_change").to_string() - } else { - out - })), - ri, // using the old session here, results in outdated theme being displayed - )) + Ok(Flash::success(Redirect::to(u_account_settings()), out)) } |