diff --git a/OpenRA.FileFormats/Support/Log.cs b/OpenRA.FileFormats/Support/Log.cs index 104e6e8748..a09de04d41 100755 --- a/OpenRA.FileFormats/Support/Log.cs +++ b/OpenRA.FileFormats/Support/Log.cs @@ -37,14 +37,20 @@ namespace OpenRA public static class Log { - public static string LogPathPrefix = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + Path.DirectorySeparatorChar; + static string LogPathPrefix = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + Path.DirectorySeparatorChar; static Dictionary channels = new Dictionary(); - static Log() + public static string LogPath { - AddChannel("debug", "openra.log.txt", false, false); + get { return LogPathPrefix; } + set + { + LogPathPrefix = value; + if (!Directory.Exists(LogPathPrefix)) + Directory.CreateDirectory(LogPathPrefix); + } } - + public static void AddChannel(string channelName, string filename, bool upload, bool diff) { if (channels.ContainsKey(channelName)) return; @@ -57,7 +63,7 @@ namespace OpenRA { writer = File.CreateText(LogPathPrefix + filename); } - catch(IOException e){ filename = new Random().Next().ToString() + filename; } + catch(IOException){ filename = new Random().Next().ToString() + filename; } } writer.AutoFlush = true; diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index 0e0915daec..25d625d29c 100644 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -563,7 +563,14 @@ namespace OpenRA { AppDomain.CurrentDomain.AssemblyResolve += FileSystem.ResolveAssembly; - LoadUserSettings(settings); + LoadUserSettings(settings); + + Log.LogPath = SupportDir + "Logs" + Path.DirectorySeparatorChar; + Log.AddChannel("perf", "perf.log", false, false); + Log.AddChannel("debug", "debug.log", false, false); + Log.AddChannel("sync", "syncreport.log", true, true); + + LobbyInfo.GlobalSettings.Mods = Settings.InitialMods; // Load the default mod to access required files @@ -596,7 +603,6 @@ namespace OpenRA ResetTimer(); - Log.AddChannel("sync", "openra.syncreport.txt", true, true); } static void LoadUserSettings(Settings settings) @@ -636,13 +642,26 @@ namespace OpenRA Chrome.rootWidget.CloseWindow(); Chrome.rootWidget.OpenWindow("MAINMENU_BG"); - } + } + + public static string SupportDir + { + get { + // Unless the user has specified otherwise, put support files in a subdirectory of the game install + if (Settings.SupportDir == null) + return Environment.CurrentDirectory + Path.DirectorySeparatorChar + "Support" + Path.DirectorySeparatorChar; + + // Custom paths are relative to the home directory (My Documents under windows) + return Environment.GetFolderPath(Environment.SpecialFolder.Personal) + Path.DirectorySeparatorChar + Settings.SupportDir; + } + } + internal static int GetGameId() { try { - string s = File.ReadAllText(Log.LogPathPrefix + "openra.gameid"); + string s = File.ReadAllText(SupportDir + "currentgameid"); return int.Parse(s); } catch (Exception) @@ -653,7 +672,7 @@ namespace OpenRA internal static void SetGameId(int id) { - var file = File.CreateText(Log.LogPathPrefix + "openra.gameid"); + var file = File.CreateText(SupportDir + "currentgameid"); file.Write(id); file.Flush(); file.Close(); diff --git a/OpenRA.Game/GameRules/UserSettings.cs b/OpenRA.Game/GameRules/UserSettings.cs index 661658462a..91afb0e088 100644 --- a/OpenRA.Game/GameRules/UserSettings.cs +++ b/OpenRA.Game/GameRules/UserSettings.cs @@ -24,6 +24,8 @@ namespace OpenRA.GameRules { public class UserSettings { + public readonly string SupportDir = null; + // Debug settings public bool UnitDebug = false; public bool PathDebug = true; diff --git a/OpenRA.Game/Network/OrderManager.cs b/OpenRA.Game/Network/OrderManager.cs index 5a6cda2fd7..5ee8bc0061 100755 --- a/OpenRA.Game/Network/OrderManager.cs +++ b/OpenRA.Game/Network/OrderManager.cs @@ -62,10 +62,9 @@ namespace OpenRA.Network public OrderManager( IConnection conn, string replayFilename ) : this( conn ) { - string path = Environment.GetFolderPath(Environment.SpecialFolder.Personal) - + Path.DirectorySeparatorChar + ".openra"; + string path = Game.SupportDir + "Replays" + Path.DirectorySeparatorChar; if (!Directory.Exists(path)) Directory.CreateDirectory(path); - replaySaveFile = File.Create( path + Path.DirectorySeparatorChar + replayFilename ); + replaySaveFile = File.Create( path + replayFilename ); } public void IssueOrders( Order[] orders ) diff --git a/OpenRA.Game/Support/Program.cs b/OpenRA.Game/Support/Program.cs index 9128d400aa..515d1f82ef 100644 --- a/OpenRA.Game/Support/Program.cs +++ b/OpenRA.Game/Support/Program.cs @@ -33,7 +33,6 @@ namespace OpenRA { // brutal hack Application.CurrentCulture = CultureInfo.InvariantCulture; - Log.AddChannel("perf", "openra.perf.txt", false, false); if (Debugger.IsAttached || args.Contains("--just-die")) { diff --git a/packaging/osx/OpenRA.app/Contents/MacOS/OpenRA b/packaging/osx/OpenRA.app/Contents/MacOS/OpenRA index 8bc3055453..c13cf790fc 100755 --- a/packaging/osx/OpenRA.app/Contents/MacOS/OpenRA +++ b/packaging/osx/OpenRA.app/Contents/MacOS/OpenRA @@ -86,7 +86,7 @@ fi # Run the game cd "${GAME_PATH}" -${EXE_PATH}mono "OpenRA.Game.exe" InitialMods=$MOD +${EXE_PATH}mono "OpenRA.Game.exe" InitialMods=$MOD SupportDir=Library/"Application Support"/OpenRA/ # Did we crash? STATUS=$? diff --git a/packaging/osx/OpenRA.app/Contents/MacOS/download_package b/packaging/osx/OpenRA.app/Contents/MacOS/download_package index f9854f1edb..0810099026 100755 --- a/packaging/osx/OpenRA.app/Contents/MacOS/download_package +++ b/packaging/osx/OpenRA.app/Contents/MacOS/download_package @@ -36,11 +36,11 @@ fi cd "$SUPPORT_PATH" mkdir -p "${2}" -if [ -e "downloads/${1}" ]; then +if [ -e "Downloads/${1}" ]; then /usr/bin/osascript << EOT tell application "Terminal" activate - do script "cd \"${SUPPORT_PATH}\"; unzip -o \"downloads/${1}\" -d \"${2}\"; touch done; exit;" + do script "cd \"${SUPPORT_PATH}\"; unzip -o \"Downloads/${1}\" -d \"${2}\"; touch done; exit;" end tell EOT # Hack around osascript returning before the download finishes @@ -66,7 +66,7 @@ EOT` /usr/bin/osascript << EOT tell application "Terminal" activate - do script "cd \"${SUPPORT_PATH}\"; curl --create-dirs -o \"./downloads/${1}\" \"${5}\"; unzip -o \"downloads/${1}\" -d \"${2}\"; touch done; exit;" + do script "cd \"${SUPPORT_PATH}\"; curl --create-dirs -o \"./Downloads/${1}\" \"${5}\"; unzip -o \"Downloads/${1}\" -d \"${2}\"; touch done; exit;" end tell EOT # Hack around osascript returning before the download finishes