aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-05-13 14:57:19 +0200
committermetamuffin <metamuffin@disroot.org>2025-05-13 14:57:19 +0200
commit09f86ee5b25fbddf667ef98a22eaa076cedba23c (patch)
tree2abca01286840cb918acbbdc3735f414fd26595e
parent55434f87ff252c784e5e00b4775b9555da31ebb0 (diff)
downloadjellything-09f86ee5b25fbddf667ef98a22eaa076cedba23c.tar
jellything-09f86ee5b25fbddf667ef98a22eaa076cedba23c.tar.bz2
jellything-09f86ee5b25fbddf667ef98a22eaa076cedba23c.tar.zst
move AcceptJson and AcceptLanguage guard in preperation to remove them
-rw-r--r--server/src/api.rs50
-rw-r--r--server/src/helper/accept.rs68
-rw-r--r--server/src/helper/language.rs (renamed from server/src/locale.rs)5
-rw-r--r--server/src/helper/mod.rs12
-rw-r--r--server/src/main.rs1
-rw-r--r--server/src/ui/account/mod.rs3
-rw-r--r--server/src/ui/account/settings.rs5
-rw-r--r--server/src/ui/admin/log.rs5
-rw-r--r--server/src/ui/admin/mod.rs2
-rw-r--r--server/src/ui/admin/user.rs5
-rw-r--r--server/src/ui/home.rs2
-rw-r--r--server/src/ui/items.rs2
-rw-r--r--server/src/ui/mod.rs5
-rw-r--r--server/src/ui/node.rs2
-rw-r--r--server/src/ui/player.rs5
-rw-r--r--server/src/ui/search.rs2
-rw-r--r--server/src/ui/stats.rs2
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};