diff options
-rw-r--r-- | server/src/api.rs | 50 | ||||
-rw-r--r-- | server/src/helper/accept.rs | 68 | ||||
-rw-r--r-- | server/src/helper/language.rs (renamed from server/src/locale.rs) | 5 | ||||
-rw-r--r-- | server/src/helper/mod.rs | 12 | ||||
-rw-r--r-- | server/src/main.rs | 1 | ||||
-rw-r--r-- | server/src/ui/account/mod.rs | 3 | ||||
-rw-r--r-- | server/src/ui/account/settings.rs | 5 | ||||
-rw-r--r-- | server/src/ui/admin/log.rs | 5 | ||||
-rw-r--r-- | server/src/ui/admin/mod.rs | 2 | ||||
-rw-r--r-- | server/src/ui/admin/user.rs | 5 | ||||
-rw-r--r-- | server/src/ui/home.rs | 2 | ||||
-rw-r--r-- | server/src/ui/items.rs | 2 | ||||
-rw-r--r-- | server/src/ui/mod.rs | 5 | ||||
-rw-r--r-- | server/src/ui/node.rs | 2 | ||||
-rw-r--r-- | server/src/ui/player.rs | 5 | ||||
-rw-r--r-- | server/src/ui/search.rs | 2 | ||||
-rw-r--r-- | server/src/ui/stats.rs | 2 |
17 files changed, 115 insertions, 61 deletions
diff --git a/server/src/api.rs b/server/src/api.rs index 6c22010..38bab08 100644 --- a/server/src/api.rs +++ b/server/src/api.rs @@ -4,7 +4,7 @@ Copyright (C) 2025 metamuffin <metamuffin.org> */ use super::ui::error::MyResult; -use crate::{helper::A, locale::AcceptLanguage}; +use crate::helper::{accept::AcceptJson, language::AcceptLanguage, A}; use jellycommon::{user::CreateSessionParams, NodeID, Visibility}; use jellyimport::asset_token::AssetInner; use jellylogic::{ @@ -13,18 +13,9 @@ use jellylogic::{ Database, }; use jellyui::locale::get_translation_table; -use rocket::{ - get, - http::MediaType, - outcome::Outcome, - post, - request::{self, FromRequest}, - response::Redirect, - serde::json::Json, - Either, Request, State, -}; +use rocket::{get, post, response::Redirect, serde::json::Json, Either, State}; use serde_json::{json, Value}; -use std::{collections::HashMap, ops::Deref}; +use std::collections::HashMap; #[get("/api")] pub fn r_api_root() -> Redirect { @@ -92,38 +83,3 @@ pub fn r_nodes_modified_since( }); Ok(Json(nodes)) } - -pub struct AcceptJson(bool); -impl Deref for AcceptJson { - type Target = bool; - fn deref(&self) -> &Self::Target { - &self.0 - } -} -impl<'r> FromRequest<'r> for AcceptJson { - type Error = (); - - fn from_request<'life0, 'async_trait>( - request: &'r Request<'life0>, - ) -> ::core::pin::Pin< - Box< - dyn ::core::future::Future<Output = request::Outcome<Self, Self::Error>> - + ::core::marker::Send - + 'async_trait, - >, - > - where - 'r: 'async_trait, - 'life0: 'async_trait, - Self: 'async_trait, - { - Box::pin(async move { - Outcome::Success(AcceptJson( - request - .accept() - .map(|a| a.preferred().exact_eq(&MediaType::JSON)) - .unwrap_or(false), - )) - }) - } -} diff --git a/server/src/helper/accept.rs b/server/src/helper/accept.rs new file mode 100644 index 0000000..3ac53c8 --- /dev/null +++ b/server/src/helper/accept.rs @@ -0,0 +1,68 @@ +/* + This file is part of jellything (https://codeberg.org/metamuffin/jellything) + which is licensed under the GNU Affero General Public License (version 3); see /COPYING. + Copyright (C) 2025 metamuffin <metamuffin.org> +*/ +use rocket::{ + http::MediaType, + outcome::Outcome, + request::{self, FromRequest}, + Request, +}; +use std::ops::Deref; + +#[derive(Debug, Default)] +pub enum Accept { + #[default] + Other, + Json, + Image, + Media, + Html, +} +impl Accept { + pub fn from_request_ut(request: &Request) -> Self { + if let Some(a) = request.accept() { + if a.preferred().exact_eq(&MediaType::JSON) { + Accept::Json + } else { + Accept::Other + } + } else { + Accept::Other + } + } +} + +pub struct AcceptJson(bool); +impl Deref for AcceptJson { + type Target = bool; + fn deref(&self) -> &Self::Target { + &self.0 + } +} +impl<'r> FromRequest<'r> for AcceptJson { + type Error = (); + + fn from_request<'life0, 'async_trait>( + request: &'r Request<'life0>, + ) -> ::core::pin::Pin< + Box< + dyn ::core::future::Future<Output = request::Outcome<Self, Self::Error>> + + ::core::marker::Send + + 'async_trait, + >, + > + where + 'r: 'async_trait, + 'life0: 'async_trait, + Self: 'async_trait, + { + Box::pin(async move { + Outcome::Success(AcceptJson(matches!( + Accept::from_request_ut(request), + Accept::Json + ))) + }) + } +} diff --git a/server/src/locale.rs b/server/src/helper/language.rs index 8314306..a441919 100644 --- a/server/src/locale.rs +++ b/server/src/helper/language.rs @@ -1,3 +1,8 @@ +/* + This file is part of jellything (https://codeberg.org/metamuffin/jellything) + which is licensed under the GNU Affero General Public License (version 3); see /COPYING. + Copyright (C) 2025 metamuffin <metamuffin.org> +*/ use jellyui::locale::Language; use rocket::{ outcome::Outcome, diff --git a/server/src/helper/mod.rs b/server/src/helper/mod.rs index f068cbc..4b0644c 100644 --- a/server/src/helper/mod.rs +++ b/server/src/helper/mod.rs @@ -3,11 +3,23 @@ which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2025 metamuffin <metamuffin.org> */ +pub mod accept; pub mod cache; pub mod cors; pub mod filter_sort; +pub mod language; pub mod node_id; pub mod session; +use accept::Accept; +use jellylogic::session::Session; +use jellyui::locale::Language; + #[derive(Debug, Clone, Copy, Default)] pub struct A<T>(pub T); + +pub struct RequestInfo { + pub lang: Language, + pub accept: Accept, + pub session: Session, +} diff --git a/server/src/main.rs b/server/src/main.rs index 0e237f9..5113542 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -21,7 +21,6 @@ pub mod api; pub mod compat; pub mod config; pub mod helper; -pub mod locale; pub mod logic; pub mod routes; pub mod ui; diff --git a/server/src/ui/account/mod.rs b/server/src/ui/account/mod.rs index f3cd450..51da348 100644 --- a/server/src/ui/account/mod.rs +++ b/server/src/ui/account/mod.rs @@ -7,8 +7,7 @@ pub mod settings; use super::error::MyError; use crate::{ - helper::A, - locale::AcceptLanguage, + helper::{language::AcceptLanguage, A}, ui::{error::MyResult, home::rocket_uri_macro_r_home}, }; use anyhow::anyhow; diff --git a/server/src/ui/account/settings.rs b/server/src/ui/account/settings.rs index 93f442c..f1a367d 100644 --- a/server/src/ui/account/settings.rs +++ b/server/src/ui/account/settings.rs @@ -4,7 +4,10 @@ Copyright (C) 2025 metamuffin <metamuffin.org> */ use super::{format_form_error, hash_password}; -use crate::{helper::A, locale::AcceptLanguage, ui::error::MyResult}; +use crate::{ + helper::{language::AcceptLanguage, A}, + ui::error::MyResult, +}; use jellycommon::user::{PlayerKind, Theme}; use jellyimport::is_importing; use jellylogic::{session::Session, Database}; diff --git a/server/src/ui/admin/log.rs b/server/src/ui/admin/log.rs index 64782ba..f0a85f2 100644 --- a/server/src/ui/admin/log.rs +++ b/server/src/ui/admin/log.rs @@ -3,7 +3,10 @@ which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2025 metamuffin <metamuffin.org> */ -use crate::{helper::A, locale::AcceptLanguage, ui::error::MyResult}; +use crate::{ + helper::{language::AcceptLanguage, A}, + ui::error::MyResult, +}; use jellyimport::is_importing; use jellylogic::{ admin::log::{get_log_buffer, get_log_stream}, diff --git a/server/src/ui/admin/mod.rs b/server/src/ui/admin/mod.rs index a03d09b..942f4f8 100644 --- a/server/src/ui/admin/mod.rs +++ b/server/src/ui/admin/mod.rs @@ -10,7 +10,7 @@ use super::{ assets::{resolve_asset, AVIF_QUALITY, AVIF_SPEED}, error::MyResult, }; -use crate::{helper::A, locale::AcceptLanguage}; +use crate::helper::{language::AcceptLanguage, A}; use anyhow::{anyhow, Context}; use jellycommon::routes::u_admin_dashboard; use jellyimport::{asset_token::AssetInner, import_wrap, is_importing}; diff --git a/server/src/ui/admin/user.rs b/server/src/ui/admin/user.rs index eedf66c..939ee83 100644 --- a/server/src/ui/admin/user.rs +++ b/server/src/ui/admin/user.rs @@ -3,7 +3,10 @@ which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2025 metamuffin <metamuffin.org> */ -use crate::{helper::A, locale::AcceptLanguage, ui::error::MyResult}; +use crate::{ + helper::{language::AcceptLanguage, A}, + ui::error::MyResult, +}; use anyhow::{anyhow, Context}; use jellycommon::user::UserPermission; use jellyimport::is_importing; diff --git a/server/src/ui/home.rs b/server/src/ui/home.rs index d323b11..555b654 100644 --- a/server/src/ui/home.rs +++ b/server/src/ui/home.rs @@ -5,7 +5,7 @@ */ use super::error::MyResult; -use crate::{api::AcceptJson, helper::A, locale::AcceptLanguage}; +use crate::helper::{accept::AcceptJson, language::AcceptLanguage, A}; use jellycommon::api::ApiHomeResponse; use jellyimport::is_importing; use jellylogic::{session::Session, Database}; diff --git a/server/src/ui/items.rs b/server/src/ui/items.rs index 31902f8..ed16c61 100644 --- a/server/src/ui/items.rs +++ b/server/src/ui/items.rs @@ -4,7 +4,7 @@ Copyright (C) 2025 metamuffin <metamuffin.org> */ use super::error::MyError; -use crate::{api::AcceptJson, helper::A, locale::AcceptLanguage}; +use crate::helper::{accept::AcceptJson, language::AcceptLanguage, A}; use jellycommon::api::{ApiItemsResponse, NodeFilterSort}; use jellyimport::is_importing; use jellylogic::{items::all_items, session::Session, Database}; diff --git a/server/src/ui/mod.rs b/server/src/ui/mod.rs index 041dadc..e71b08d 100644 --- a/server/src/ui/mod.rs +++ b/server/src/ui/mod.rs @@ -3,7 +3,10 @@ which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2025 metamuffin <metamuffin.org> */ -use crate::{helper::A, locale::AcceptLanguage, CONF}; +use crate::{ + helper::{language::AcceptLanguage, A}, + CONF, +}; use error::MyResult; use home::rocket_uri_macro_r_home; use jellylogic::session::Session; diff --git a/server/src/ui/node.rs b/server/src/ui/node.rs index eced16a..00445a9 100644 --- a/server/src/ui/node.rs +++ b/server/src/ui/node.rs @@ -4,7 +4,7 @@ Copyright (C) 2025 metamuffin <metamuffin.org> */ use super::error::MyResult; -use crate::{api::AcceptJson, helper::A, locale::AcceptLanguage}; +use crate::helper::{accept::AcceptJson, language::AcceptLanguage, A}; use jellycommon::{ api::{ApiNodeResponse, NodeFilterSort}, NodeID, diff --git a/server/src/ui/player.rs b/server/src/ui/player.rs index 614bf4a..1fd9e07 100644 --- a/server/src/ui/player.rs +++ b/server/src/ui/player.rs @@ -4,7 +4,10 @@ Copyright (C) 2025 metamuffin <metamuffin.org> */ use super::error::MyResult; -use crate::{helper::A, locale::AcceptLanguage, CONF}; +use crate::{ + helper::{language::AcceptLanguage, A}, + CONF, +}; use jellycommon::{ api::NodeFilterSort, stream::{StreamContainer, StreamSpec}, diff --git a/server/src/ui/search.rs b/server/src/ui/search.rs index 92fcfce..750c8bd 100644 --- a/server/src/ui/search.rs +++ b/server/src/ui/search.rs @@ -4,7 +4,7 @@ Copyright (C) 2025 metamuffin <metamuffin.org> */ use super::error::MyResult; -use crate::{api::AcceptJson, helper::A, locale::AcceptLanguage}; +use crate::helper::{accept::AcceptJson, language::AcceptLanguage, A}; use anyhow::anyhow; use jellycommon::api::ApiSearchResponse; use jellyimport::is_importing; diff --git a/server/src/ui/stats.rs b/server/src/ui/stats.rs index d991fa0..b6e9321 100644 --- a/server/src/ui/stats.rs +++ b/server/src/ui/stats.rs @@ -4,7 +4,7 @@ Copyright (C) 2025 metamuffin <metamuffin.org> */ use super::error::MyError; -use crate::{api::AcceptJson, helper::A, locale::AcceptLanguage}; +use crate::helper::{accept::AcceptJson, language::AcceptLanguage, A}; use jellycommon::api::ApiStatsResponse; use jellyimport::is_importing; use jellylogic::{session::Session, stats::stats, Database}; |