mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-07-31 11:01:36 +08:00
refactor(config): consolidate get_home_dir into single public function
Follow-up to #644: Extract duplicate get_home_dir() implementations into a single pub fn in config.rs, reducing code duplication across codex_config.rs, gemini_config.rs, and settings.rs. Also adds documentation comments to build.rs explaining the Windows manifest workaround for test binaries.
This commit is contained in:
@@ -1,6 +1,16 @@
|
|||||||
fn main() {
|
fn main() {
|
||||||
tauri_build::build();
|
tauri_build::build();
|
||||||
|
|
||||||
|
// Windows: Embed Common Controls v6 manifest for test binaries
|
||||||
|
//
|
||||||
|
// When running `cargo test`, the generated test executables don't include
|
||||||
|
// the standard Tauri application manifest. Without Common Controls v6,
|
||||||
|
// `tauri::test` calls fail with STATUS_ENTRYPOINT_NOT_FOUND.
|
||||||
|
//
|
||||||
|
// This workaround:
|
||||||
|
// 1. Embeds the manifest into test binaries via /MANIFEST:EMBED
|
||||||
|
// 2. Uses /MANIFEST:NO for the main binary to avoid duplicate resources
|
||||||
|
// (Tauri already handles manifest embedding for the app binary)
|
||||||
#[cfg(target_os = "windows")]
|
#[cfg(target_os = "windows")]
|
||||||
{
|
{
|
||||||
let manifest_path = std::path::PathBuf::from(
|
let manifest_path = std::path::PathBuf::from(
|
||||||
|
|||||||
@@ -2,28 +2,14 @@
|
|||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
use crate::config::{
|
use crate::config::{
|
||||||
atomic_write, delete_file, sanitize_provider_name, write_json_file, write_text_file,
|
atomic_write, delete_file, get_home_dir, sanitize_provider_name, write_json_file,
|
||||||
|
write_text_file,
|
||||||
};
|
};
|
||||||
use crate::error::AppError;
|
use crate::error::AppError;
|
||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
/// 获取用户主目录,带回退和日志
|
|
||||||
fn get_home_dir() -> PathBuf {
|
|
||||||
#[cfg(windows)]
|
|
||||||
if let Ok(home) = std::env::var("HOME") {
|
|
||||||
let trimmed = home.trim();
|
|
||||||
if !trimmed.is_empty() {
|
|
||||||
return PathBuf::from(trimmed);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dirs::home_dir().unwrap_or_else(|| {
|
|
||||||
log::warn!("无法获取用户主目录,回退到当前目录");
|
|
||||||
PathBuf::from(".")
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
/// 获取 Codex 配置目录路径
|
/// 获取 Codex 配置目录路径
|
||||||
pub fn get_codex_config_dir() -> PathBuf {
|
pub fn get_codex_config_dir() -> PathBuf {
|
||||||
if let Some(custom) = crate::settings::get_codex_override_dir() {
|
if let Some(custom) = crate::settings::get_codex_override_dir() {
|
||||||
|
|||||||
@@ -6,7 +6,10 @@ use std::path::{Path, PathBuf};
|
|||||||
use crate::error::AppError;
|
use crate::error::AppError;
|
||||||
|
|
||||||
/// 获取用户主目录,带回退和日志
|
/// 获取用户主目录,带回退和日志
|
||||||
fn get_home_dir() -> PathBuf {
|
///
|
||||||
|
/// On Windows, respects the `HOME` environment variable (if set) to support
|
||||||
|
/// test isolation. Falls back to `dirs::home_dir()` otherwise.
|
||||||
|
pub fn get_home_dir() -> PathBuf {
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
if let Ok(home) = std::env::var("HOME") {
|
if let Ok(home) = std::env::var("HOME") {
|
||||||
let trimmed = home.trim();
|
let trimmed = home.trim();
|
||||||
|
|||||||
@@ -1,25 +1,10 @@
|
|||||||
use crate::config::write_text_file;
|
use crate::config::{get_home_dir, write_text_file};
|
||||||
use crate::error::AppError;
|
use crate::error::AppError;
|
||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
/// 获取用户主目录,带回退和日志
|
|
||||||
fn get_home_dir() -> PathBuf {
|
|
||||||
#[cfg(windows)]
|
|
||||||
if let Ok(home) = std::env::var("HOME") {
|
|
||||||
let trimmed = home.trim();
|
|
||||||
if !trimmed.is_empty() {
|
|
||||||
return PathBuf::from(trimmed);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dirs::home_dir().unwrap_or_else(|| {
|
|
||||||
log::warn!("无法获取用户主目录,回退到当前目录");
|
|
||||||
PathBuf::from(".")
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
/// 获取 Gemini 配置目录路径(支持设置覆盖)
|
/// 获取 Gemini 配置目录路径(支持设置覆盖)
|
||||||
pub fn get_gemini_dir() -> PathBuf {
|
pub fn get_gemini_dir() -> PathBuf {
|
||||||
if let Some(custom) = crate::settings::get_gemini_override_dir() {
|
if let Some(custom) = crate::settings::get_gemini_override_dir() {
|
||||||
|
|||||||
@@ -163,18 +163,11 @@ impl Default for AppSettings {
|
|||||||
impl AppSettings {
|
impl AppSettings {
|
||||||
fn settings_path() -> Option<PathBuf> {
|
fn settings_path() -> Option<PathBuf> {
|
||||||
// settings.json 保留用于旧版本迁移和无数据库场景
|
// settings.json 保留用于旧版本迁移和无数据库场景
|
||||||
#[cfg(windows)]
|
Some(
|
||||||
if let Ok(home) = std::env::var("HOME") {
|
crate::config::get_home_dir()
|
||||||
let trimmed = home.trim();
|
.join(".cc-switch")
|
||||||
if !trimmed.is_empty() {
|
.join("settings.json"),
|
||||||
return Some(
|
)
|
||||||
PathBuf::from(trimmed)
|
|
||||||
.join(".cc-switch")
|
|
||||||
.join("settings.json"),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dirs::home_dir().map(|h| h.join(".cc-switch").join("settings.json"))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn normalize_paths(&mut self) {
|
fn normalize_paths(&mut self) {
|
||||||
|
|||||||
Reference in New Issue
Block a user