mirror of
https://github.com/DioxusLabs/dioxus
synced 2024-11-10 14:44:12 +00:00
move hot reload socket into the target directory
This commit is contained in:
parent
b965fc23e9
commit
9a13df2c73
3 changed files with 22 additions and 20 deletions
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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));
|
||||||
|
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in a new issue