localsnd 0.5.31

CLI implementation of localsend
Documentation
use std::{ffi::OsString, net::SocketAddr};

use uuid::Uuid;

use crate::localsend_lib::Result;

pub fn alias() -> String {
	if let Ok(Ok(name)) = hostname::get().map(OsString::into_string)
		&& !name.is_empty()
	{
		return name;
	}
	"Desktop CLI".to_string()
}

#[cfg(target_os = "windows")]
pub fn device_model() -> String {
	"Windows".to_string()
}

#[cfg(target_os = "linux")]
pub fn device_model() -> String {
	"Linux".to_string()
}

#[cfg(target_os = "macos")]
pub fn device_model() -> String {
	"macOS".to_string()
}

pub fn fingerprint() -> String {
	if let Some(uid) = std::option_env!("LOCALSEND_FINGERPRINT")
		&& !uid.is_empty()
	{
		return uid.to_string();
	}
	Uuid::new_v4().to_string()
}

pub fn local_addr() -> Result<SocketAddr> {
	let socket = std::net::UdpSocket::bind("0.0.0.0:0")?;
	socket.connect("8.8.8.8:80")?;
	Ok(socket.local_addr()?)
}