diff options
author | metamuffin <metamuffin@disroot.org> | 2024-01-30 13:58:52 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-01-30 13:58:52 +0100 |
commit | 0010717b6e86bb662fa04dab94968eee6fe8de64 (patch) | |
tree | 77c806b7eccdf5dd461f5b074d1693d9f9bd915d /server/src/routes/ui/account/settings.rs | |
parent | 88734e0f3ffdbce436fd0ceeabea70b96c60f1f8 (diff) | |
download | jellything-0010717b6e86bb662fa04dab94968eee6fe8de64.tar jellything-0010717b6e86bb662fa04dab94968eee6fe8de64.tar.bz2 jellything-0010717b6e86bb662fa04dab94968eee6fe8de64.tar.zst |
support native player in settings and jst
Diffstat (limited to 'server/src/routes/ui/account/settings.rs')
-rw-r--r-- | server/src/routes/ui/account/settings.rs | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/server/src/routes/ui/account/settings.rs b/server/src/routes/ui/account/settings.rs index 48e0e9f..e91bec0 100644 --- a/server/src/routes/ui/account/settings.rs +++ b/server/src/routes/ui/account/settings.rs @@ -18,7 +18,7 @@ use jellybase::{ database::{ReadableTable, Ser, T_USER}, permission::PermissionSetExt, }; -use jellycommon::user::{Theme, UserPermission}; +use jellycommon::user::{PlayerKind, Theme, UserPermission}; use markup::{Render, RenderAttributeValue}; use rocket::{ form::{self, validate::len, Contextual, Form}, @@ -35,6 +35,7 @@ pub struct SettingsForm { #[field(validate = option_len(4..32))] display_name: Option<String>, theme: Option<Theme>, + player_preference: Option<PlayerKind>, } fn option_len<'v>(value: &Option<String>, range: Range<usize>) -> form::Result<'v, ()> { @@ -80,14 +81,23 @@ fn settings_page(session: Session, flash: Option<MyResult<String>>) -> DynLayout } input[type="submit", value="Apply"]; } + form[method="POST", action=uri!(r_account_settings_post())] { + fieldset { + legend { "Preferred Media Player" } + @for (t, tlabel) in PlayerKind::LIST { + label { input[type="radio", name="player_preference", value=A(*t), checked=session.user.player_preference==*t]; @tlabel } br; + } + } + input[type="submit", value="Apply"]; + } }, ..Default::default() } } -struct A(pub Theme); -impl RenderAttributeValue for A {} -impl Render for A { +struct A<T>(pub T); +impl<T: UriDisplay<Query>> RenderAttributeValue for A<T> {} +impl<T: UriDisplay<Query>> Render for A<T> { fn render(&self, writer: &mut impl std::fmt::Write) -> std::fmt::Result { writer.write_fmt(format_args!("{}", &self.0 as &dyn UriDisplay<Query>)) } @@ -137,6 +147,10 @@ pub fn r_account_settings_post( user.theme = theme; out += "Theme updated\n"; } + if let Some(player_preference) = form.player_preference { + user.player_preference = player_preference; + out += "Player preference changed.\n"; + } users.insert(&*session.user.name, Ser(user))?; drop(users); |