aboutsummaryrefslogtreecommitdiff
path: root/server/src/routes/ui/account/settings.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/routes/ui/account/settings.rs')
-rw-r--r--server/src/routes/ui/account/settings.rs22
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);