move hot reload socket into the target directory

This commit is contained in:
Evan Almloff 2023-12-07 07:00:59 -06:00
parent b965fc23e9
commit 9a13df2c73
3 changed files with 22 additions and 20 deletions

View file

@ -43,8 +43,6 @@ pub async fn startup(config: CrateConfig) -> Result<()> {
let hot_reload_tx = broadcast::channel(100).0; let hot_reload_tx = broadcast::channel(100).0;
clear_paths();
Some(HotReloadState { Some(HotReloadState {
messages: hot_reload_tx.clone(), messages: hot_reload_tx.clone(),
file_map: file_map.clone(), file_map: file_map.clone(),
@ -109,7 +107,13 @@ pub async fn serve(config: CrateConfig, hot_reload_state: Option<HotReloadState>
} }
async fn start_desktop_hot_reload(hot_reload_state: HotReloadState) -> Result<()> { async fn start_desktop_hot_reload(hot_reload_state: HotReloadState) -> Result<()> {
let path = std::env::temp_dir().join("dioxusin"); let metadata = cargo_metadata::MetadataCommand::new()
.no_deps()
.exec()
.unwrap();
let target_dir = metadata.target_directory.as_std_path();
let path = target_dir.join("dioxusin");
clear_paths(&path);
match LocalSocketListener::bind(path) { match LocalSocketListener::bind(path) {
Ok(local_socket_stream) => { Ok(local_socket_stream) => {
let aborted = Arc::new(Mutex::new(false)); let aborted = Arc::new(Mutex::new(false));
@ -182,17 +186,14 @@ async fn start_desktop_hot_reload(hot_reload_state: HotReloadState) -> Result<()
Ok(()) Ok(())
} }
fn clear_paths() { fn clear_paths(file_socket_path: &std::path::Path) {
if cfg!(target_os = "macos") { if cfg!(target_os = "macos") {
// On unix, if you force quit the application, it can leave the file socket open // On unix, if you force quit the application, it can leave the file socket open
// This will cause the local socket listener to fail to open // This will cause the local socket listener to fail to open
// We check if the file socket is already open from an old session and then delete it // We check if the file socket is already open from an old session and then delete it
let paths = ["./dioxusin", "./@dioxusin"];
for path in paths { if file_socket_path.exists() {
let path = std::env::temp_dir().join(path); let _ = std::fs::remove_file(file_socket_path);
if path.exists() {
let _ = std::fs::remove_file(path);
}
} }
} }
} }

View file

@ -152,22 +152,20 @@ pub fn init<Ctx: HotReloadingContext + Send + 'static>(cfg: Config<Ctx>) {
} }
let file_map = Arc::new(Mutex::new(file_map)); let file_map = Arc::new(Mutex::new(file_map));
let target_dir = crate_dir.join("target");
let hot_reload_socket_path = target_dir.join("dioxusin");
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
{ {
// On unix, if you force quit the application, it can leave the file socket open // On unix, if you force quit the application, it can leave the file socket open
// This will cause the local socket listener to fail to open // This will cause the local socket listener to fail to open
// We check if the file socket is already open from an old session and then delete it // We check if the file socket is already open from an old session and then delete it
let paths = ["./dioxusin"]; if hot_reload_socket_path.exists() {
for path in paths { let _ = std::fs::remove_file(hot_reload_socket_path);
let path = std::env::temp_dir().join(path);
if path.exists() {
let _ = std::fs::remove_file(path);
}
} }
} }
let path = std::env::temp_dir().join("dioxusin"); match LocalSocketListener::bind(hot_reload_socket_path) {
match LocalSocketListener::bind(path) {
Ok(local_socket_stream) => { Ok(local_socket_stream) => {
let aborted = Arc::new(Mutex::new(false)); let aborted = Arc::new(Mutex::new(false));

View file

@ -1,4 +1,7 @@
use std::io::{BufRead, BufReader}; use std::{
io::{BufRead, BufReader},
path::PathBuf,
};
use dioxus_core::Template; use dioxus_core::Template;
#[cfg(feature = "file_watcher")] #[cfg(feature = "file_watcher")]
@ -24,7 +27,7 @@ pub enum HotReloadMsg {
/// Connect to the hot reloading listener. The callback provided will be called every time a template change is detected /// Connect to the hot reloading listener. The callback provided will be called every time a template change is detected
pub fn connect(mut f: impl FnMut(HotReloadMsg) + Send + 'static) { pub fn connect(mut f: impl FnMut(HotReloadMsg) + Send + 'static) {
std::thread::spawn(move || { std::thread::spawn(move || {
let path = std::env::temp_dir().join("dioxusin"); let path = PathBuf::from("./").join("target").join("dioxusin");
if let Ok(socket) = LocalSocketStream::connect(path) { if let Ok(socket) = LocalSocketStream::connect(path) {
let mut buf_reader = BufReader::new(socket); let mut buf_reader = BufReader::new(socket);
loop { loop {