From 9d44668d5f370d9c6a563d42e05483bd5724f85a Mon Sep 17 00:00:00 2001
From: GyDi <segydi@foxmail.com>
Date: Sat, 26 Mar 2022 18:56:16 +0800
Subject: [PATCH] feat: supports silent start

---
 src-tauri/src/core/verge.rs               |  6 ++++++
 src-tauri/src/utils/resolve.rs            | 13 ++++++++++---
 src/components/setting/setting-system.tsx | 15 +++++++++++++++
 src/services/types.ts                     |  1 +
 4 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/src-tauri/src/core/verge.rs b/src-tauri/src/core/verge.rs
index f3a1f85..f5a728f 100644
--- a/src-tauri/src/core/verge.rs
+++ b/src-tauri/src/core/verge.rs
@@ -31,6 +31,9 @@ pub struct VergeConfig {
   /// can the app auto startup
   pub enable_auto_launch: Option<bool>,
 
+  /// not show the window on launch
+  pub enable_silent_start: Option<bool>,
+
   /// set system proxy
   pub enable_system_proxy: Option<bool>,
 
@@ -197,6 +200,9 @@ impl Verge {
     if patch.traffic_graph.is_some() {
       self.config.traffic_graph = patch.traffic_graph;
     }
+    if patch.enable_silent_start.is_some() {
+      self.config.enable_silent_start = patch.enable_silent_start;
+    }
 
     // should update system startup
     if patch.enable_auto_launch.is_some() {
diff --git a/src-tauri/src/utils/resolve.rs b/src-tauri/src/utils/resolve.rs
index 16a7129..244345a 100644
--- a/src-tauri/src/utils/resolve.rs
+++ b/src-tauri/src/utils/resolve.rs
@@ -4,8 +4,6 @@ use tauri::{App, AppHandle, Manager};
 
 /// handle something when start app
 pub fn resolve_setup(app: &App) {
-  resolve_window(app);
-
   // setup a simple http server for singleton
   server::embed_server(&app.handle());
 
@@ -46,6 +44,8 @@ pub fn resolve_setup(app: &App) {
       .get_item("system_proxy")
       .set_selected(enable));
   });
+
+  resolve_window(app, verge.config.enable_silent_start.clone());
 }
 
 /// reset system proxy
@@ -57,9 +57,16 @@ pub fn resolve_reset(app_handle: &AppHandle) {
 }
 
 /// customize the window theme
-fn resolve_window(app: &App) {
+fn resolve_window(app: &App, hide: Option<bool>) {
   let window = app.get_window("main").unwrap();
 
+  // silent start
+  hide.map(|hide| {
+    if hide {
+      window.hide().unwrap();
+    }
+  });
+
   #[cfg(target_os = "windows")]
   {
     use window_shadows::set_shadow;
diff --git a/src/components/setting/setting-system.tsx b/src/components/setting/setting-system.tsx
index a09b3b4..be49d64 100644
--- a/src/components/setting/setting-system.tsx
+++ b/src/components/setting/setting-system.tsx
@@ -19,6 +19,7 @@ const SettingSystem = ({ onError }: Props) => {
   const {
     enable_tun_mode,
     enable_auto_launch,
+    enable_silent_start,
     enable_system_proxy,
     system_proxy_bypass,
     enable_proxy_guard,
@@ -59,6 +60,20 @@ const SettingSystem = ({ onError }: Props) => {
         </GuardState>
       </SettingItem>
 
+      <SettingItem>
+        <ListItemText primary={t("Silent Start")} />
+        <GuardState
+          value={enable_silent_start ?? false}
+          valueProps="checked"
+          onCatch={onError}
+          onFormat={onSwitchFormat}
+          onChange={(e) => onChangeData({ enable_silent_start: e })}
+          onGuard={(e) => patchVergeConfig({ enable_silent_start: e })}
+        >
+          <Switch edge="end" />
+        </GuardState>
+      </SettingItem>
+
       <SettingItem>
         <ListItemText
           primary={
diff --git a/src/services/types.ts b/src/services/types.ts
index 2a059bd..18727e1 100644
--- a/src/services/types.ts
+++ b/src/services/types.ts
@@ -126,6 +126,7 @@ export namespace CmdType {
     traffic_graph?: boolean;
     enable_tun_mode?: boolean;
     enable_auto_launch?: boolean;
+    enable_silent_start?: boolean;
     enable_system_proxy?: boolean;
     enable_proxy_guard?: boolean;
     system_proxy_bypass?: string;
-- 
GitLab