Просмотр исходного кода

feat: move interpreter code into desktop

Jonathan Kelley 2 лет назад
Родитель
Сommit
c86cbd69da
3 измененных файлов с 42 добавлено и 39 удалено
  1. 31 27
      packages/desktop/src/lib.rs
  2. 0 7
      packages/desktop/src/main.js
  3. 11 5
      packages/desktop/src/protocol.rs

+ 31 - 27
packages/desktop/src/lib.rs

@@ -184,36 +184,40 @@ fn build_webview(
         .with_url("dioxus://index.html/")
         .unwrap()
         .with_ipc_handler(move |_window: &Window, payload: String| {
-            parse_ipc_message(&payload)
-                .map(|message| match message.method() {
-                    "eval_result" => {
-                        let result = message.params();
-                        eval_sender.send(result).unwrap();
-                    }
-                    "user_event" => {
-                        _ = event_tx.unbounded_send(message.params());
-                    }
-                    "initialize" => {
-                        is_ready.store(true, std::sync::atomic::Ordering::Relaxed);
-                        let _ = proxy.send_event(UserWindowEvent::EditsReady);
-                    }
-                    "browser_open" => {
-                        let data = message.params();
-                        log::trace!("Open browser: {:?}", data);
-                        if let Some(temp) = data.as_object() {
-                            if temp.contains_key("href") {
-                                let url = temp.get("href").unwrap().as_str().unwrap();
-                                if let Err(e) = webbrowser::open(url) {
-                                    log::error!("Open Browser error: {:?}", e);
-                                }
+            let message = match parse_ipc_message(&payload) {
+                Some(message) => message,
+                None => {
+                    log::error!("Failed to parse IPC message: {}", payload);
+                    return;
+                }
+            };
+
+            match message.method() {
+                "eval_result" => {
+                    let result = message.params();
+                    eval_sender.send(result).unwrap();
+                }
+                "user_event" => {
+                    _ = event_tx.unbounded_send(message.params());
+                }
+                "initialize" => {
+                    is_ready.store(true, std::sync::atomic::Ordering::Relaxed);
+                    let _ = proxy.send_event(UserWindowEvent::EditsReady);
+                }
+                "browser_open" => {
+                    let data = message.params();
+                    log::trace!("Open browser: {:?}", data);
+                    if let Some(temp) = data.as_object() {
+                        if temp.contains_key("href") {
+                            let url = temp.get("href").unwrap().as_str().unwrap();
+                            if let Err(e) = webbrowser::open(url) {
+                                log::error!("Open Browser error: {:?}", e);
                             }
                         }
                     }
-                    _ => (),
-                })
-                .unwrap_or_else(|| {
-                    log::warn!("invalid IPC message received");
-                });
+                }
+                _ => (),
+            }
         })
         .with_custom_protocol(String::from("dioxus"), move |r| {
             protocol::desktop_handler(

+ 0 - 7
packages/desktop/src/main.js

@@ -1,7 +0,0 @@
-export function main(rootname = "main") {
-  let root = window.document.getElementById(rootname);
-  if (root != null) {
-    window.interpreter = new Interpreter(root);
-    window.ipc.postMessage(serializeIpcMessage("initialize"));
-  }
-}

+ 11 - 5
packages/desktop/src/protocol.rs

@@ -1,3 +1,4 @@
+use dioxus_interpreter_js::INTERPRETER_JS;
 use std::path::{Path, PathBuf};
 use wry::{
     http::{status::StatusCode, Request, Response},
@@ -6,13 +7,18 @@ use wry::{
 
 fn module_loader(root_name: &str) -> String {
     format!(
-        "
+        r#"
 <script>
-    import(\"./index.js\").then(function (module) {{
-        module.main(\"{}\");
-    }});
+    {INTERPRETER_JS}
+
+    let rootname = "{}";
+    let root = window.document.getElementById(rootname);
+    if (root != null) {{
+        window.interpreter = new Interpreter(root);
+        window.ipc.postMessage(serializeIpcMessage("initialize"));
+    }}
 </script>
-",
+"#,
         root_name
     )
 }