use crate::config::CONFIG; use crate::types::ThreadsData; pub async fn get_local_ip() -> ThreadsData { let addrs = nix::ifaddrs::getifaddrs().unwrap(); let mut ip = String::new(); let mut ip6 = String::new(); let mut found4 = !CONFIG.local_ip.show4; let mut found6 = !CONFIG.local_ip.show4; for ifaddr in addrs { match ifaddr.address { Some(address) => { if found4 && found6 { break; } if ifaddr.interface_name == CONFIG.local_ip.interface { match address.family() { nix::sys::socket::AddressFamily::Inet => { if found4 { continue; } ip = if CONFIG.local_ip.show4 { address.to_string().split(':').next().unwrap().to_string() } else { String::from(" ") }; found4 = true; } nix::sys::socket::AddressFamily::Inet6 => { if found6 { continue; } ip6 = if CONFIG.local_ip.show6 { address.to_string().rsplit_once(':').unwrap().0.to_string() } else { String::from(" ") }; found6 = true; } _ => continue, }; } } None => continue, } } if ip.is_empty() { ip = String::from("Error!") } if !ip6.is_empty() { ip6 = format!(" {}", ip6) } let data = format!(" {} {}{} {}", CONFIG.local_ip.icon, ip, ip6, CONFIG.seperator); ThreadsData::LocalIp(data) }