diff --git a/README-ZH.md b/README-ZH.md index 0f8ce5b..dd2edf3 100644 --- a/README-ZH.md +++ b/README-ZH.md @@ -60,9 +60,12 @@ cask "popcorn-time", args: { "no-quarantine": true } - `Theme` - `Light`, `Dark` (仅支持 macOS 和 Windows) - `Always On Top`: 窗口置顶 - `Titlebar`: 是否显示 `Titlebar`,仅 macOS 支持 - - `User Agent` ([#17](https://github.com/lencx/ChatGPT/issues/17)): 自定义 `user agent` 防止网站安全检测,默认值为空。 - `Inject Script`: 用于修改网站的用户自定义脚本 - - `Switch Origin` ([#14](https://github.com/lencx/ChatGPT/issues/14)): 切换网站源地址,默认为 `https://chat.openai.com`。需要注意的是镜像网站的 UI 需要和原网站一致,否则可能会导致某些功能不工作 + - `Control Center`: ChatGPT 应用的控制中心,它将为应用提供无限的可能 + - 设置 `Theme`,`Always on Top`,`Titlebar` 等 + - `User Agent` ([#17](https://github.com/lencx/ChatGPT/issues/17)): 自定义 `user agent` 防止网站安全检测,默认值为空 + - `Switch Origin` ([#14](https://github.com/lencx/ChatGPT/issues/14)): 切换网站源地址,默认为 `https://chat.openai.com`。需要注意的是镜像网站的 UI 需要和原网站一致,否则可能会导致某些功能不工作 + - `Go to Config`: 打开 ChatGPT 配置目录 (`path: ~/.chatgpt/*`) - `Clear Config`: 清除 ChatGPT 配置数据 (`path: ~/.chatgpt/*`), 这是危险操作,请提前备份数据 - `Restart ChatGPT`: 重启应用。如果注入脚本编辑完成,或者应用可卡死可以通过此菜单重新启动应用 - `Awesome ChatGPT`: 一个很棒的 ChatGPT 推荐列表 diff --git a/dist/.gitkeep b/dist/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src-tauri/src/conf.rs b/src-tauri/src/conf.rs index f57e076..482a37e 100644 --- a/src-tauri/src/conf.rs +++ b/src-tauri/src/conf.rs @@ -60,19 +60,19 @@ impl ChatConfJson { /// path: ~/.chatgpt/chat.conf.json pub fn init() -> PathBuf { let conf_file = ChatConfJson::conf_path(); + let content = if cfg!(target_os = "macos") { + DEFAULT_CHAT_CONF_MAC + } else { + DEFAULT_CHAT_CONF + }; if !exists(&conf_file) { create_file(&conf_file).unwrap(); - - #[cfg(target_os = "macos")] - fs::write(conf_file.clone(), DEFAULT_CHAT_CONF_MAC).unwrap(); - - #[cfg(not(target_os = "macos"))] - fs::write(conf_file.clone(), DEFAULT_CHAT_CONF).unwrap(); - + fs::write(&conf_file, content).unwrap(); return conf_file; } + let conf_file = ChatConfJson::conf_path(); let file_content = fs::read_to_string(&conf_file).unwrap(); match serde_json::from_str(&file_content) { Ok(v) => v, @@ -80,14 +80,10 @@ impl ChatConfJson { if err.to_string() == "invalid type: map, expected unit at line 1 column 0" { return conf_file; } - - #[cfg(target_os = "macos")] - fs::write(&conf_file, DEFAULT_CHAT_CONF_MAC).unwrap(); - - #[cfg(not(target_os = "macos"))] - fs::write(&conf_file, DEFAULT_CHAT_CONF).unwrap(); + fs::write(&conf_file, content).unwrap(); } }; + conf_file } @@ -96,11 +92,27 @@ impl ChatConfJson { } pub fn get_chat_conf() -> Self { - let config_file = fs::read_to_string(ChatConfJson::conf_path()) - .unwrap_or_else(|_| DEFAULT_CHAT_CONF.to_string()); - let config: Value = - serde_json::from_str(&config_file).expect("failed to parse chat.conf.json"); - serde_json::from_value(config).unwrap() + let conf_file = ChatConfJson::conf_path(); + let file_content = fs::read_to_string(&conf_file).unwrap(); + let content = if cfg!(target_os = "macos") { + DEFAULT_CHAT_CONF_MAC + } else { + DEFAULT_CHAT_CONF + }; + + match serde_json::from_value(match serde_json::from_str(&file_content) { + Ok(v) => v, + Err(_) => { + fs::write(&conf_file, content).unwrap(); + serde_json::from_str(content).unwrap() + } + }) { + Ok(v) => v, + Err(_) => { + fs::write(&conf_file, content).unwrap(); + serde_json::from_value(serde_json::from_str(content).unwrap()).unwrap() + } + } } // https://users.rust-lang.org/t/updating-object-fields-given-dynamic-json/39049/3