allow specifying language via client cookie

This commit is contained in:
2025-08-13 15:31:33 +02:00
parent 998248acb7
commit fb1bb429c3
4 changed files with 21 additions and 16 deletions

View File

@@ -10,7 +10,7 @@ use axum::{
routing::{get, post},
Form, Router,
};
use axum_extra::extract::PrivateCookieJar;
use axum_extra::extract::{CookieJar, PrivateCookieJar};
use maud::{html, Markup, PreEscaped};
use serde::Deserialize;
use std::sync::Arc;
@@ -19,18 +19,20 @@ use uuid::Uuid;
async fn index(
State(backend): State<Arc<Backend>>,
cookies: PrivateCookieJar,
lang_cookies: CookieJar,
headers: HeaderMap,
) -> Response {
retu(backend, cookies, headers, None).await
retu(backend, cookies, lang_cookies, headers, None).await
}
async fn retu(
backend: Arc<Backend>,
cookies: PrivateCookieJar,
lang_cookies: CookieJar,
headers: HeaderMap,
message: Option<MyMessage>,
) -> Response {
let (cookies, req) = backend.client_full(cookies, &headers).await;
let (cookies, req) = backend.client_full(cookies, &lang_cookies, &headers).await;
let client = req.client;
rust_i18n::set_locale(&req.lang.to_string());
@@ -107,19 +109,20 @@ async fn retu(
async fn game(
State(backend): State<Arc<Backend>>,
cookies: PrivateCookieJar,
lang_cookies: CookieJar,
headers: HeaderMap,
Path(uuid): Path<String>,
) -> Response {
let (cookies, req) = backend.client_full(cookies, &headers).await;
let (cookies, req) = backend.client_full(cookies, &lang_cookies, &headers).await;
let client = req.client;
rust_i18n::set_locale(req.lang.to_locale());
let Ok(uuid) = Uuid::parse_str(&uuid) else {
return not_found(cookies, headers).await.into_response();
return not_found(lang_cookies, headers).await.into_response();
};
let Some(camera) = backend.get_camera(&uuid).await else {
return not_found(cookies, headers).await.into_response();
return not_found(lang_cookies, headers).await.into_response();
};
let message = if let Ok(number) = backend.client_found_camera(&client, &camera).await {
@@ -132,10 +135,10 @@ async fn game(
)
};
retu(backend, cookies, headers, Some(message)).await
retu(backend, cookies, lang_cookies, headers, Some(message)).await
}
async fn not_found(cookies: PrivateCookieJar, headers: HeaderMap) -> Markup {
async fn not_found(cookies: CookieJar, headers: HeaderMap) -> Markup {
let lang = language(&cookies, &headers);
Page::new(lang).content(html! {
h1 { (t!("not_found_title")) }
@@ -150,10 +153,11 @@ struct NameForm {
async fn set_name(
State(backend): State<Arc<Backend>>,
cookies: PrivateCookieJar,
lang_cookies: CookieJar,
headers: HeaderMap,
Form(form): Form<NameForm>,
) -> Response {
let (cookies, req) = backend.client_full(cookies, &headers).await;
let (cookies, req) = backend.client_full(cookies, &lang_cookies, &headers).await;
let client = req.client;
rust_i18n::set_locale(req.lang.to_locale());
@@ -176,7 +180,7 @@ async fn set_name(
),
};
retu(backend, cookies, headers, Some(message)).await
retu(backend, cookies, lang_cookies, headers, Some(message)).await
}
pub(super) fn routes() -> Router<AppState> {