From 78a82662e90979c459f031f51447fafa8f2b9dc8 Mon Sep 17 00:00:00 2001 From: Chris Privitere <23177737+cprivitere@users.noreply.github.com> Date: Wed, 13 May 2026 19:48:33 -0500 Subject: [PATCH] =?UTF-8?q?fix:=20macOS=20Project=20Gorgon=20file=20path?= =?UTF-8?q?=20split=20=E2=80=94=20Player.log=20and=20game=20data=20are=20i?= =?UTF-8?q?n=20separate=20locations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src-tauri/src/lib.rs | 5 +- src-tauri/src/settings.rs | 65 ++++++++++-- src-tauri/src/setup_commands.rs | 10 +- src/components/Help/HelpSetupTab.vue | 4 +- src/components/Settings/GeneralSettings.vue | 109 ++++++++++++++++++-- src/components/Startup/SetupPathStep.vue | 9 +- src/stores/settingsStore.ts | 14 +-- 7 files changed, 185 insertions(+), 31 deletions(-) diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 6affeba..be71872 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -217,7 +217,8 @@ use external_fetch::{fetch_github_releases, fetch_pg_news}; use gst_manager::{gst_check_status, gst_download, gst_launch}; use unified_search::unified_search; use settings::{ - get_server_list, get_settings_file_path, load_settings, save_settings, SettingsManager, + get_default_game_data_path_command, get_default_player_log_path_command, get_server_list, + get_settings_file_path, load_settings, save_settings, SettingsManager, }; use setup_commands::{ complete_setup, delete_character, get_user_characters, import_latest_inventory_for_character, @@ -617,6 +618,8 @@ pub fn run() { load_settings, save_settings, get_settings_file_path, + get_default_player_log_path_command, + get_default_game_data_path_command, get_server_list, // Setup / Onboarding validate_game_data_path, diff --git a/src-tauri/src/settings.rs b/src-tauri/src/settings.rs index 17f5d90..fb57b16 100644 --- a/src-tauri/src/settings.rs +++ b/src-tauri/src/settings.rs @@ -15,7 +15,9 @@ pub struct AppSettings { /// Auto-watch Player.log on startup (legacy) pub auto_watch_on_startup: bool, - /// Root game data directory (%AppData%\LocalLow\Elder Game\Project Gorgon\) + /// Root game data directory. + /// Windows: %AppData%\..\LocalLow\Elder Game\Project Gorgon\ + /// macOS: ~/Library/Application Support/unity.Elder Game.Project Gorgon/ pub game_data_path: String, /// Automatically purge old data @@ -261,7 +263,7 @@ fn default_report_watch_interval() -> u32 { impl Default for AppSettings { fn default() -> Self { Self { - log_file_path: String::new(), + log_file_path: get_default_player_log_path(), auto_watch_on_startup: false, game_data_path: get_default_game_data_path(), auto_purge_enabled: false, @@ -374,10 +376,17 @@ impl SettingsManager { self.settings.read().unwrap().game_data_path.clone() } - /// Get Player.log path (constructed from game data path) + /// Get Player.log path. + /// + /// Uses the explicit `log_file_path` setting when non-empty (macOS). + /// Falls back to `game_data_path / "Player.log"` for backward compat (Windows). pub fn get_player_log_path(&self) -> Option { let settings = self.settings.read().unwrap(); + if !settings.log_file_path.is_empty() { + return Some(PathBuf::from(&settings.log_file_path)); + } + if settings.game_data_path.is_empty() { return None; } @@ -397,9 +406,31 @@ impl SettingsManager { } } -/// Get default game data path (Windows-specific) -fn get_default_game_data_path() -> String { - // %APPDATA%\..\LocalLow\Elder Game\Project Gorgon\ +/// Get the default Player.log path, or empty string if not determinable. +/// On macOS Player.log lives under ~/Library/Logs/, separate from game data. +/// On Windows returns empty so callers fall back to game_data_path/Player.log. +pub fn get_default_player_log_path() -> String { + if cfg!(target_os = "macos") { + if let Ok(home) = std::env::var("HOME") { + return PathBuf::from(home) + .join("Library") + .join("Logs") + .join("Elder Game") + .join("Project Gorgon") + .join("Player.log") + .to_str() + .unwrap_or_default() + .to_string(); + } + } + String::new() +} + +/// Get default game data path (platform-aware). +/// +/// Windows: %APPDATA%\..\LocalLow\Elder Game\Project Gorgon\ +/// macOS: ~/Library/Application Support/unity.Elder Game.Project Gorgon/ +pub fn get_default_game_data_path() -> String { if cfg!(target_os = "windows") { if let Ok(local_appdata_low) = std::env::var("APPDATA") { // APPDATA points to Roaming, we need LocalLow @@ -413,6 +444,16 @@ fn get_default_game_data_path() -> String { return path; } } + } else if cfg!(target_os = "macos") { + if let Ok(home) = std::env::var("HOME") { + return PathBuf::from(home) + .join("Library") + .join("Application Support") + .join("unity.Elder Game.Project Gorgon") + .to_str() + .unwrap_or_default() + .to_string(); + } } // Fallback for other OSes or if we can't determine the path @@ -446,6 +487,18 @@ pub fn get_server_list() -> Vec { PG_SERVERS.iter().map(|s| s.to_string()).collect() } +/// Return the platform-appropriate default Player.log path. +#[tauri::command] +pub fn get_default_player_log_path_command() -> String { + get_default_player_log_path() +} + +/// Return the platform-appropriate default game data path. +#[tauri::command] +pub fn get_default_game_data_path_command() -> String { + get_default_game_data_path() +} + /// Get the settings file path (for user reference) #[tauri::command] pub fn get_settings_file_path( diff --git a/src-tauri/src/setup_commands.rs b/src-tauri/src/setup_commands.rs index a21a69a..68654c1 100644 --- a/src-tauri/src/setup_commands.rs +++ b/src-tauri/src/setup_commands.rs @@ -11,7 +11,7 @@ use tauri::State; use crate::cdn_commands::GameDataState; use crate::db::DbPool; -use crate::settings::SettingsManager; +use crate::settings::{get_default_player_log_path, SettingsManager}; /// Timestamped log line for startup diagnostics. macro_rules! startup_log { @@ -65,9 +65,15 @@ struct ReportHeader { #[tauri::command] pub fn validate_game_data_path(path: String) -> GameDataPathValidation { let base = Path::new(&path); + + // Player.log may live alongside game data (Windows) or at the default + // macOS path (~/Library/Logs/Elder Game/Project Gorgon/Player.log). + let player_log_found = base.join("Player.log").exists() + || Path::new(&get_default_player_log_path()).exists(); + GameDataPathValidation { path_exists: base.exists() && base.is_dir(), - player_log_found: base.join("Player.log").exists(), + player_log_found, chat_logs_found: base.join("ChatLogs").is_dir(), reports_found: base.join("Reports").is_dir(), } diff --git a/src/components/Help/HelpSetupTab.vue b/src/components/Help/HelpSetupTab.vue index 3ae045d..2a2e169 100644 --- a/src/components/Help/HelpSetupTab.vue +++ b/src/components/Help/HelpSetupTab.vue @@ -13,8 +13,8 @@
Go to - and set the path to your Project: Gorgon installation folder. - This is the folder containing your Player.log file. This should have been auto-detected during the setup, but in case that failed you can manually set it here. + and set the path to your Project: Gorgon data folder. + This is the folder containing ChatLogs and Reports. On Windows Player.log lives here too; on macOS it is auto-detected from ~/Library/Logs/. In Project Gorgon, open Settings → GUI and enable diff --git a/src/components/Settings/GeneralSettings.vue b/src/components/Settings/GeneralSettings.vue index 8205c72..42e4a42 100644 --- a/src/components/Settings/GeneralSettings.vue +++ b/src/components/Settings/GeneralSettings.vue @@ -11,24 +11,49 @@ v-model="localGameDataPath" @blur="handleGameDataPathInput" @keyup.enter="handleGameDataPathInput" - placeholder="Path to Elder Game\Project Gorgon folder..." + placeholder="Path to Project Gorgon data folder..." class="input flex-1" />

- Default location: %APPDATA%\..\LocalLow\Elder Game\Project Gorgon\ -
- This folder contains Player.log, ChatLogs, and Reports subfolders. - Auto-detection works on Windows. + Contains ChatLogs, Reports, and other game data.
+ Windows: %APPDATA%\..\LocalLow\Elder Game\Project Gorgon\
+ macOS: ~/Library/Application Support/unity.Elder Game.Project Gorgon/

-
- +
+

+ On macOS this is separate from the data folder:
+ ~/Library/Logs/Elder Game/Project Gorgon/Player.log +

+ + +
+ + +
@@ -149,11 +174,13 @@