|
| 1 | +use std::fmt::Write; |
| 2 | + |
1 | 3 | #[must_use] |
2 | 4 | #[cfg_attr(feature = "hotpath", hotpath::measure)] |
3 | 5 | pub fn get_desktop_info() -> String { |
4 | 6 | // Retrieve the environment variables and handle Result types |
5 | 7 | let desktop_env = std::env::var("XDG_CURRENT_DESKTOP"); |
6 | | - let display_backend_result = std::env::var("XDG_SESSION_TYPE"); |
| 8 | + let display_backend = std::env::var("XDG_SESSION_TYPE"); |
7 | 9 |
|
8 | | - // Capitalize the first letter of the display backend value |
9 | | - let mut display_backend = display_backend_result.unwrap_or_default(); |
10 | | - if let Some(c) = display_backend.as_mut_str().get_mut(0..1) { |
11 | | - c.make_ascii_uppercase(); |
12 | | - } |
| 10 | + let desktop_str = match desktop_env { |
| 11 | + Err(_) => "Unknown", |
| 12 | + Ok(ref s) if s.starts_with("none+") => &s[5..], |
| 13 | + Ok(ref s) => s.as_str(), |
| 14 | + }; |
13 | 15 |
|
14 | | - // Trim "none+" from the start of desktop_env if present |
15 | | - // Use "Unknown" if desktop_env is empty or has an error |
16 | | - let desktop_env = match desktop_env { |
17 | | - Err(_) => "Unknown".to_owned(), |
18 | | - Ok(s) => s.trim_start_matches("none+").to_owned(), |
| 16 | + let backend_str = match display_backend { |
| 17 | + Err(_) => "Unknown", |
| 18 | + Ok(ref s) if s.is_empty() => "Unknown", |
| 19 | + Ok(ref s) => s.as_str(), |
19 | 20 | }; |
20 | 21 |
|
21 | | - // Handle the case where display_backend might be empty after capitalization |
22 | | - let display_backend = if display_backend.is_empty() { |
23 | | - "Unknown" |
24 | | - } else { |
25 | | - &display_backend |
| 22 | + // Pre-calculate capacity: desktop_len + " (" + backend_len + ")" |
| 23 | + // Capitalize first char needs temporary allocation only if backend exists |
| 24 | + let mut result = |
| 25 | + String::with_capacity(desktop_str.len() + backend_str.len() + 3); |
| 26 | + result.push_str(desktop_str); |
| 27 | + result.push_str(" ("); |
| 28 | + |
| 29 | + // Capitalize first character of backend |
| 30 | + if let Some(first_char) = backend_str.chars().next() { |
| 31 | + let _ = write!(result, "{}", first_char.to_ascii_uppercase()); |
| 32 | + result.push_str(&backend_str[first_char.len_utf8()..]); |
26 | 33 | } |
27 | | - .to_owned(); |
28 | 34 |
|
29 | | - format!("{desktop_env} ({display_backend})") |
| 35 | + result.push(')'); |
| 36 | + result |
30 | 37 | } |
0 commit comments