From 8863e4575cbdea082c12f76d9a9a6891151f10c7 Mon Sep 17 00:00:00 2001 From: lencx Date: Sat, 7 Jan 2023 13:14:03 +0800 Subject: [PATCH] chore: dalle2 --- src-tauri/src/app/cmd.rs | 1 + src-tauri/src/app/menu.rs | 2 +- src-tauri/src/app/window.rs | 63 +++++++++++++++++++++------------- src-tauri/src/assets/core.js | 1 + src-tauri/src/assets/dalle2.js | 1 + 5 files changed, 44 insertions(+), 24 deletions(-) diff --git a/src-tauri/src/app/cmd.rs b/src-tauri/src/app/cmd.rs index 0d942ea..3d656fe 100644 --- a/src-tauri/src/app/cmd.rs +++ b/src-tauri/src/app/cmd.rs @@ -19,6 +19,7 @@ pub fn dalle2_window(app: AppHandle, query: String) { &app.app_handle(), Some(query), Some("ChatGPT & DALL·E 2".to_string()), + None, ); } diff --git a/src-tauri/src/app/menu.rs b/src-tauri/src/app/menu.rs index 681fe92..0f8bf18 100644 --- a/src-tauri/src/app/menu.rs +++ b/src-tauri/src/app/menu.rs @@ -330,7 +330,7 @@ pub fn menu_handler(event: WindowMenuEvent) { ChatConfJson::amend(&serde_json::json!({ "stay_on_top": stay_on_top }), None).unwrap(); } // Window - "dalle2" => window::dalle2_window(&app, None, None), + "dalle2" => window::dalle2_window(&app, None, None, Some(false)), // View "reload" => win.eval("window.location.reload()").unwrap(), "go_back" => win.eval("window.history.go(-1)").unwrap(), diff --git a/src-tauri/src/app/window.rs b/src-tauri/src/app/window.rs index 901a327..58ca282 100644 --- a/src-tauri/src/app/window.rs +++ b/src-tauri/src/app/window.rs @@ -31,12 +31,13 @@ pub fn tray_window(handle: &tauri::AppHandle) { }); } -pub fn dalle2_window(handle: &tauri::AppHandle, query: Option, title: Option) { +pub fn dalle2_window( + handle: &tauri::AppHandle, + query: Option, + title: Option, + is_new: Option, +) { info!("dalle2_query: {:?}", query); - let timestamp = SystemTime::now() - .duration_since(SystemTime::UNIX_EPOCH) - .unwrap() - .as_secs(); let theme = conf::ChatConfJson::theme(); let app = handle.clone(); @@ -49,24 +50,40 @@ pub fn dalle2_window(handle: &tauri::AppHandle, query: Option, title: Op "".to_string() }; - tauri::async_runtime::spawn(async move { - WindowBuilder::new( - &app, - format!("dalle2_{}", timestamp), - WindowUrl::App("https://labs.openai.com".into()), - ) - .title(title.unwrap_or_else(|| "DALL·E 2".to_string())) - .resizable(true) - .fullscreen(false) - .inner_size(800.0, 600.0) - .always_on_top(false) - .theme(theme) - .initialization_script(include_str!("../assets/core.js")) - .initialization_script(&query) - .initialization_script(include_str!("../assets/dalle2.js")) - .build() - .unwrap(); - }); + let label = if is_new.unwrap_or(true) { + let timestamp = SystemTime::now() + .duration_since(SystemTime::UNIX_EPOCH) + .unwrap() + .as_secs(); + format!("dalle2_{}", timestamp) + } else { + "dalle2".to_string() + }; + + if app.get_window("dalle2").is_none() { + tauri::async_runtime::spawn(async move { + WindowBuilder::new( + &app, + label, + WindowUrl::App("https://labs.openai.com".into()), + ) + .title(title.unwrap_or_else(|| "DALL·E 2".to_string())) + .resizable(true) + .fullscreen(false) + .inner_size(800.0, 600.0) + .always_on_top(false) + .theme(theme) + .initialization_script(include_str!("../assets/core.js")) + .initialization_script(&query) + .initialization_script(include_str!("../assets/dalle2.js")) + .build() + .unwrap(); + }); + } else { + let dalle2_win = app.get_window("dalle2").unwrap(); + dalle2_win.show().unwrap(); + dalle2_win.set_focus().unwrap(); + } } pub fn control_window(handle: &tauri::AppHandle) { diff --git a/src-tauri/src/assets/core.js b/src-tauri/src/assets/core.js index 8f50323..335daa8 100644 --- a/src-tauri/src/assets/core.js +++ b/src-tauri/src/assets/core.js @@ -71,6 +71,7 @@ async function init() { document.addEventListener("click", (e) => { const origin = e.target.closest("a"); + if (!origin.target) return; if (origin && origin.href && origin.target !== '_self') { invoke('open_link', { url: origin.href }); } diff --git a/src-tauri/src/assets/dalle2.js b/src-tauri/src/assets/dalle2.js index 9a5b2a4..e95d4c0 100644 --- a/src-tauri/src/assets/dalle2.js +++ b/src-tauri/src/assets/dalle2.js @@ -3,6 +3,7 @@ async function init() { document.addEventListener("click", (e) => { const origin = e.target.closest("a"); + if (!origin.target) return; if (origin && origin.href && origin.target !== '_self') { if (/\/(login|signup)$/.test(window.location.href)) { origin.target = '_self';