mirror of
https://github.com/NotAShelf/microfetch.git
synced 2026-04-12 12:57:41 +00:00
Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: Ia1c001eb099ea8cae9bdf76642b873376a6a6964
40 lines
1.1 KiB
Rust
40 lines
1.1 KiB
Rust
use alloc::string::String;
|
|
|
|
use crate::getenv_str;
|
|
|
|
#[must_use]
|
|
#[cfg_attr(feature = "hotpath", hotpath::measure)]
|
|
pub fn get_desktop_info() -> String {
|
|
let desktop_raw = getenv_str("XDG_CURRENT_DESKTOP").unwrap_or("Unknown");
|
|
let session_raw = getenv_str("XDG_SESSION_TYPE").unwrap_or("");
|
|
|
|
let desktop_str = desktop_raw.strip_prefix("none+").unwrap_or(desktop_raw);
|
|
|
|
let backend_str = if session_raw.is_empty() {
|
|
"Unknown"
|
|
} else {
|
|
session_raw
|
|
};
|
|
|
|
// Pre-calculate capacity: desktop_len + " (" + backend_len + ")"
|
|
// Capitalize first char needs temporary allocation only if backend exists
|
|
let mut result =
|
|
String::with_capacity(desktop_str.len() + backend_str.len() + 3);
|
|
result.push_str(desktop_str);
|
|
result.push_str(" (");
|
|
|
|
// Capitalize first character of backend
|
|
if let Some(first_byte) = backend_str.as_bytes().first() {
|
|
// Convert first byte to uppercase if it's ASCII lowercase
|
|
let upper = if first_byte.is_ascii_lowercase() {
|
|
(first_byte - b'a' + b'A') as char
|
|
} else {
|
|
*first_byte as char
|
|
};
|
|
result.push(upper);
|
|
result.push_str(&backend_str[1..]);
|
|
}
|
|
|
|
result.push(')');
|
|
result
|
|
}
|