From 0c120c0868686268bad10f95670a64b263db7aab Mon Sep 17 00:00:00 2001 From: Ultradesu Date: Wed, 10 Jun 2026 23:20:18 +0100 Subject: [PATCH] Added support of TUI player --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/player/mod.rs | 25 +++++++++++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5b07d48..6544778 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1418,7 +1418,7 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "furumusic" -version = "0.4.5" +version = "0.4.6" dependencies = [ "anyhow", "async-trait", diff --git a/Cargo.toml b/Cargo.toml index ded4ada..d1472b7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "furumusic" -version = "0.4.6" +version = "0.4.7" edition = "2024" description = "Reusable web-app boilerplate: auth, OIDC/SSO, admin panel, user management, i18n, PostgreSQL" diff --git a/src/player/mod.rs b/src/player/mod.rs index caa756b..3f9d31d 100644 --- a/src/player/mod.rs +++ b/src/player/mod.rs @@ -861,6 +861,12 @@ fn native_device_name_from_user_agent(user_agent: Option<&str>) -> Option "Furumi MacOS".to_string(), }); } + if product.eq_ignore_ascii_case("FurumiTUI") || product.eq_ignore_ascii_case("furumi-tui") { + return Some(match version.as_deref() { + Some(v) => format!("Furumi TUI {v}"), + None => "Furumi TUI".to_string(), + }); + } } None } @@ -890,6 +896,9 @@ fn device_kind_from_user_agent(user_agent: Option<&str>) -> &'static str { if ua.contains("furumimac") { return "computer"; } + if ua.contains("furumitui/") || ua.contains("furumi-tui/") { + return "computer"; + } if ua.contains("iphone") || (ua.contains("android") && ua.contains("mobile")) { "phone" } else if ua.contains("ipad") || ua.contains("tablet") || ua.contains("android") { @@ -914,6 +923,22 @@ mod device_tests { assert_eq!(device_kind_from_user_agent(user_agent), "phone"); } + #[test] + fn detects_furumi_tui_native_client() { + let user_agent = Some("FurumiTUI/0.1.0 macos"); + + assert_eq!(device_name_from_user_agent(user_agent), "Furumi TUI 0.1.0"); + assert_eq!(device_kind_from_user_agent(user_agent), "computer"); + } + + #[test] + fn detects_furumi_tui_http_user_agent_token() { + let user_agent = Some("furumi-tui/0.1.0 (macos)"); + + assert_eq!(device_name_from_user_agent(user_agent), "Furumi TUI 0.1.0"); + assert_eq!(device_kind_from_user_agent(user_agent), "computer"); + } + #[test] fn keeps_browser_fallback_for_generic_android_user_agents() { let user_agent = Some("Mozilla/5.0 Android Mobile");