diff --git a/src/main.rs b/src/main.rs index 59351d9..273d1b1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,11 +1,11 @@ -use crate::config::get_config; +use crate::config::{get_config, modify_config, Storage}; use crate::filesystem::credentials::save_credentials_webdav; use crate::filesystem::mount::{mount, unmount}; use crate::filesystem::mounted::{is_mounted, is_mounted_as}; use crate::log::log; use crate::log::LogLevel; use crate::network::network_interface::{get_active_network_interface, get_interface_ip_address}; -use crate::network::utils::{get_ip_from_mac, get_network_address, is_reachable, wake_on_land}; +use crate::network::utils::{get_ip_from_mac, get_mac_from_ip, get_network_address, is_reachable, wake_on_land}; use crate::sudo::{is_run_as_root, run_as_root}; use std::process::exit; use std::thread; @@ -83,24 +83,39 @@ fn mount_local(network_address: String) { let mount_point: &str = get_config().general.mount_point.as_str(); let mac_address: &str = get_config().local.device_mac.as_str(); - let mount_type: &str = &get_config().local.mount_type.as_str(); + let mount_type: &str = get_config().local.mount_type.as_str(); + + let mut device_address: Option = None; + + if get_config().storage.is_some() { + device_address = Some(get_config().storage.clone().unwrap().device_ip); + + if !is_reachable(device_address.clone().unwrap().as_str()) && get_mac_from_ip(device_address.clone().unwrap().as_str()).unwrap() != mac_address { + device_address = None; + } + } - let mut device_address: Option; let mut count: i32 = 0; - loop { - device_address = get_ip_from_mac(mac_address, network_address.as_str()); + if device_address.is_none() { + loop { + device_address = get_ip_from_mac(mac_address, network_address.as_str()); + if device_address.is_some() || count >= 10 { + modify_config(|config| { + let storage = config.storage.get_or_insert(Storage::default()); + storage.device_ip = device_address.clone().unwrap(); + }); - if device_address.is_some() || count >= 10 { - break; + break; + } + + log("main", "Couldn't find MAC adress in local network, sending awake call...", LogLevel::Info); + wake_on_land(mac_address); + + log("main", "Waiting 30 seconds...", LogLevel::Info); + count = count + 1; + sleep(Duration::from_secs(30)); } - - log("main", "Couldn't find MAC adress in local network, sending awake call...", LogLevel::Info); - wake_on_land(mac_address); - - log("main", "Waiting 30 seconds...", LogLevel::Info); - count = count + 1; - sleep(Duration::from_secs(30)); } if device_address.is_none() {