hotfix: finding hotreload path fails when not running under cargo

This commit is contained in:
Jonathan Kelley 2024-03-20 09:54:57 -07:00
parent e923c6462c
commit 6c9f991f0b
No known key found for this signature in database
GPG key ID: 1FBB50F7EB0A08BE
3 changed files with 20 additions and 5 deletions

View file

@ -49,7 +49,14 @@ async fn hotreload_loop(mut socket: WebSocket, state: HotReloadState) -> anyhow:
let msg = futures_util::select! { let msg = futures_util::select! {
msg = _rx => msg, msg = _rx => msg,
_ = _socket => break, e = _socket => {
if let Some(Err(e)) = e {
log::info!("🔥 Hot Reload WebSocket disconnected: {}", e);
break;
} else {
continue;
}
},
}; };
let Ok(msg) = msg else { break }; let Ok(msg) = msg else { break };

View file

@ -441,6 +441,7 @@ pub async fn hot_reload_handler(ws: axum::extract::WebSocketUpgrade) -> impl Int
let mut rx = let mut rx =
tokio_stream::wrappers::WatchStream::from_changes(state.message_receiver.clone()); tokio_stream::wrappers::WatchStream::from_changes(state.message_receiver.clone());
while let Some(change) = rx.next().await { while let Some(change) = rx.next().await {
if let Some(template) = change { if let Some(template) = change {
let template = { serde_json::to_string(&template).unwrap() }; let template = { serde_json::to_string(&template).unwrap() };
@ -449,6 +450,8 @@ pub async fn hot_reload_handler(ws: axum::extract::WebSocketUpgrade) -> impl Int
}; };
} }
} }
println!("😳 Hot Reload WebSocket disconnected");
}) })
} }

View file

@ -30,12 +30,15 @@ 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(callback: impl FnMut(HotReloadMsg) + Send + 'static) { pub fn connect(callback: impl FnMut(HotReloadMsg) + Send + 'static) {
let Ok(_manifest_dir) = std::env::var("CARGO_MANIFEST_DIR") else { // FIXME: this is falling back onto the current directory when not running under cargo, which is how the CLI runs this.
return; // This needs to be fixed.
}; let _manifest_dir = std::env::var("CARGO_MANIFEST_DIR");
// get the cargo manifest directory, where the target dir lives // get the cargo manifest directory, where the target dir lives
let mut path = PathBuf::from(_manifest_dir); let mut path = match _manifest_dir {
Ok(manifest_dir) => PathBuf::from(manifest_dir),
Err(_) => std::env::current_dir().unwrap(),
};
// walk the path until we a find a socket named `dioxusin` inside that folder's target directory // walk the path until we a find a socket named `dioxusin` inside that folder's target directory
loop { loop {
@ -53,6 +56,8 @@ pub fn connect(callback: impl FnMut(HotReloadMsg) + Send + 'static) {
}; };
} }
println!("connecting to {:?}", path);
connect_at(path, callback); connect_at(path, callback);
} }