removed languages.json and territories.json

lib.rs is separated into src/modules now for cleaner code

optimized error handling to -> (storage.rs, uptime.rs, meta.rs, memory.rs, os.rs, network.rs)
optimized struct types to -> (storage.rs, uptime.rs, meta.rs, memory.rs, os.rs, network.rs)
This commit is contained in:
D0RYU 2025-05-01 19:02:59 -04:00
parent 91c80d0f91
commit 528d4b03a3
28 changed files with 1261 additions and 1726 deletions

View file

@ -0,0 +1,63 @@
use serde::Serialize;
use serde_json::{Value, json};
use std::{cmp::Ordering::Equal, collections::HashMap};
use sysinfo::{System, Users};
#[derive(Debug, Serialize)]
pub struct SoftwareInfo {
name: String,
count: usize,
}
#[derive(Debug, Serialize)]
pub struct ExternalInfo {
softwares: Vec<SoftwareInfo>,
}
#[allow(dead_code)]
pub fn get_struct() -> ExternalInfo {
let mut system = System::new_all();
system.refresh_all();
let users = &Users::new_with_refreshed_list();
let mut grouped_processes: HashMap<String, Vec<i32>> = HashMap::new();
for process in system.processes().values() {
let name = process.name().to_str().unwrap().to_string();
let user_id = process.user_id();
let is_user_owned = user_id.is_some_and(|uid| {
users
.list()
.iter()
.any(|u| u.id() == uid && u.name() != "root")
});
if is_user_owned && !name.trim().is_empty() && !name.starts_with('[') {
grouped_processes
.entry(name)
.or_default()
.push(process.pid().as_u32() as i32);
}
}
let mut softwares = Vec::new();
let mut grouped_vec: Vec<_> = grouped_processes.into_iter().collect();
grouped_vec.sort_by(|a, b| match b.1.len().cmp(&a.1.len()) {
Equal => a.0.to_lowercase().cmp(&b.0.to_lowercase()),
other => other,
});
for (name, pids) in grouped_vec {
softwares.push(SoftwareInfo {
name,
count: pids.len(),
});
}
ExternalInfo { softwares }
}
#[allow(dead_code)]
pub fn get_json() -> Value {
json!(get_struct())
}