diff --git a/src/ARKServerManager/Lib/Server.cs b/src/ARKServerManager/Lib/Server.cs index cefc3d33..380d4d30 100644 --- a/src/ARKServerManager/Lib/Server.cs +++ b/src/ARKServerManager/Lib/Server.cs @@ -70,7 +70,7 @@ namespace ServerManagerTool.Lib public static Server FromPath(string path) { - var loadedProfile = ServerProfile.LoadFrom(path); + var loadedProfile = ServerProfile.LoadFrom(path, profile: null); if (loadedProfile == null) return null; return new Server(loadedProfile); diff --git a/src/ARKServerManager/Lib/ServerProfile.cs b/src/ARKServerManager/Lib/ServerProfile.cs index 48663510..1c393910 100644 --- a/src/ARKServerManager/Lib/ServerProfile.cs +++ b/src/ARKServerManager/Lib/ServerProfile.cs @@ -3511,10 +3511,23 @@ namespace ServerManagerTool.Lib #region Methods #region Common Methods - public void ChangeInstallationFolder(string folder) + public void ChangeInstallationFolder(string folder, bool reloadConfigFiles) { InstallDirectory = folder; + if (reloadConfigFiles) + { + var serverConfigPath = GetProfileServerConfigDir(); + if (Directory.Exists(serverConfigPath)) + { + var serverConfigFile = Path.Combine(serverConfigPath, Config.Default.ServerGameUserSettingsConfigFile); + if (File.Exists(serverConfigFile)) + { + LoadFromConfigFiles(serverConfigFile, this, exclusions: null); + } + } + } + LoadServerFiles(true, true, true); SetupServerFilesWatcher(); } @@ -4035,12 +4048,12 @@ namespace ServerManagerTool.Lib return LoadFromProfileFile(file, profile); var filePath = Path.GetDirectoryName(file); - profile = LoadFromINIFiles(file, profile); + profile = LoadFromConfigFiles(file, profile, exclusions: null); if (filePath.EndsWith(Config.Default.ServerConfigRelativePath)) { var installDirectory = filePath.Replace(Config.Default.ServerConfigRelativePath, string.Empty).TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); - profile.ChangeInstallationFolder(installDirectory); + profile.ChangeInstallationFolder(installDirectory, reloadConfigFiles: false); } if (profile.PlayerLevels.Count == 0) @@ -4075,7 +4088,7 @@ namespace ServerManagerTool.Lib return profile; } - public static ServerProfile LoadFromINIFiles(string file, ServerProfile profile, IEnumerable exclusions = null) + public static ServerProfile LoadFromConfigFiles(string file, ServerProfile profile, IEnumerable exclusions = null) { if (string.IsNullOrWhiteSpace(file) || !File.Exists(file)) return null; @@ -4186,10 +4199,10 @@ namespace ServerManagerTool.Lib return null; } - var configIniPath = Path.Combine(GetProfileServerConfigDir(profile), Config.Default.ServerGameUserSettingsConfigFile); - if (File.Exists(configIniPath)) + var serverConfigFile = Path.Combine(GetProfileServerConfigDir(profile), Config.Default.ServerGameUserSettingsConfigFile); + if (File.Exists(serverConfigFile)) { - profile = LoadFromINIFiles(configIniPath, profile); + profile = LoadFromConfigFiles(serverConfigFile, profile, exclusions: null); } profile._lastSaveLocation = file; @@ -4460,10 +4473,10 @@ namespace ServerManagerTool.Lib // string configDir = GetProfileServerConfigDir(); Directory.CreateDirectory(configDir); - SaveINIFile(configDir); + SaveConfigFile(configDir); } - public void SaveINIFile(string profileIniDir, IEnumerable exclusions = null) + public void SaveConfigFile(string profileIniDir, IEnumerable exclusions = null) { if (exclusions == null) exclusions = GetExclusions(); diff --git a/src/ARKServerManager/UserControls/ServerSettingsControl.xaml.cs b/src/ARKServerManager/UserControls/ServerSettingsControl.xaml.cs index a6037eda..844cd4c0 100644 --- a/src/ARKServerManager/UserControls/ServerSettingsControl.xaml.cs +++ b/src/ARKServerManager/UserControls/ServerSettingsControl.xaml.cs @@ -1036,10 +1036,12 @@ namespace ServerManagerTool private void SelectInstallDirectory_Click(object sender, RoutedEventArgs e) { - var dialog = new CommonOpenFileDialog(); - dialog.IsFolderPicker = true; - dialog.Title = _globalizer.GetResourceString("ServerSettings_InstallServer_Title"); - if (!String.IsNullOrWhiteSpace(Settings.InstallDirectory)) + var dialog = new CommonOpenFileDialog + { + IsFolderPicker = true, + Title = _globalizer.GetResourceString("ServerSettings_InstallServer_Title") + }; + if (!string.IsNullOrWhiteSpace(Settings.InstallDirectory)) { dialog.InitialDirectory = Settings.InstallDirectory; } @@ -1047,7 +1049,10 @@ namespace ServerManagerTool var result = dialog.ShowDialog(Window.GetWindow(this)); if (result == CommonFileDialogResult.Ok) { - Settings.ChangeInstallationFolder(dialog.FileName); + Settings.ServerMap = string.Empty; + Settings.TotalConversionModId = string.Empty; + + Settings.ChangeInstallationFolder(dialog.FileName, reloadConfigFiles: true); } } @@ -2047,7 +2052,7 @@ namespace ServerManagerTool var configIniFile = Path.Combine(ServerProfile.GetProfileServerConfigDir(Settings), Config.Default.ServerGameUserSettingsConfigFile); // load only this section, using the full exclusion list - var tempServerProfile = ServerProfile.LoadFromINIFiles(configIniFile, null, exclusions); + var tempServerProfile = ServerProfile.LoadFromConfigFiles(configIniFile, null, exclusions); // perform a profile sync Settings.SyncSettings(ServerProfileCategory.CustomGameUserSettings, tempServerProfile); } @@ -2208,7 +2213,7 @@ namespace ServerManagerTool var configIniFile = Path.Combine(ServerProfile.GetProfileServerConfigDir(Settings), Config.Default.ServerGameUserSettingsConfigFile); // load only this section, using the full exclusion list - var tempServerProfile = ServerProfile.LoadFromINIFiles(configIniFile, null, exclusions); + var tempServerProfile = ServerProfile.LoadFromConfigFiles(configIniFile, null, exclusions); // perform a profile sync Settings.SyncSettings(ServerProfileCategory.CustomGameSettings, tempServerProfile); } @@ -2369,7 +2374,7 @@ namespace ServerManagerTool var configIniFile = Path.Combine(ServerProfile.GetProfileServerConfigDir(Settings), Config.Default.ServerGameUserSettingsConfigFile); // load only this section, using the full exclusion list - var tempServerProfile = ServerProfile.LoadFromINIFiles(configIniFile, null, exclusions); + var tempServerProfile = ServerProfile.LoadFromConfigFiles(configIniFile, null, exclusions); // perform a profile sync Settings.SyncSettings(ServerProfileCategory.CustomEngineSettings, tempServerProfile); } diff --git a/src/ARKServerManager/VersionFeed.xml b/src/ARKServerManager/VersionFeed.xml index 939e84ab..db185b87 100644 --- a/src/ARKServerManager/VersionFeed.xml +++ b/src/ARKServerManager/VersionFeed.xml @@ -25,6 +25,7 @@
  • Gamedata Files - when adding, deleteing or reloading the gamedata files via the gamedata window, the server manager will reload them and update the settings window.
  • +
  • Main Window - when changing the location of the server, it will reload the profile with the config settings in the new location.
  • Main Window - added discord server button.
  • Main Window - re-organised the buttons.
  • pt-BR Translation file updated.
  • diff --git a/src/ARKServerManager/VersionFeedBeta.xml b/src/ARKServerManager/VersionFeedBeta.xml index 775bddb1..f2faada4 100644 --- a/src/ARKServerManager/VersionFeedBeta.xml +++ b/src/ARKServerManager/VersionFeedBeta.xml @@ -19,6 +19,7 @@ CHANGE
      +
    • Main Window - when changing the location of the server, it will reload the profile with the config settings in the new location.
    • Main Window - added discord server button.
    • Main Window - re-organised the buttons.
    diff --git a/src/ConanServerManager/Lib/Server.cs b/src/ConanServerManager/Lib/Server.cs index 11b3d178..2b2c01bb 100644 --- a/src/ConanServerManager/Lib/Server.cs +++ b/src/ConanServerManager/Lib/Server.cs @@ -70,7 +70,7 @@ namespace ServerManagerTool.Lib public static Server FromPath(string path) { - var loadedProfile = ServerProfile.LoadFrom(path); + var loadedProfile = ServerProfile.LoadFrom(path, profile: null); if (loadedProfile == null) return null; return new Server(loadedProfile); diff --git a/src/ConanServerManager/Lib/ServerProfile.cs b/src/ConanServerManager/Lib/ServerProfile.cs index f470781b..612df5cf 100644 --- a/src/ConanServerManager/Lib/ServerProfile.cs +++ b/src/ConanServerManager/Lib/ServerProfile.cs @@ -213,7 +213,7 @@ namespace ServerManagerTool.Lib set { SetValue(QueryPortProperty, value); } } - public static readonly DependencyProperty ServerMapProperty = DependencyProperty.Register(nameof(ServerMap), typeof(string), typeof(ServerProfile), new PropertyMetadata("ConanSandbox")); + public static readonly DependencyProperty ServerMapProperty = DependencyProperty.Register(nameof(ServerMap), typeof(string), typeof(ServerProfile), new PropertyMetadata(String.Empty)); [DataMember] public string ServerMap { @@ -225,7 +225,7 @@ namespace ServerManagerTool.Lib } } - public static readonly DependencyProperty ServerMapSaveFileNameProperty = DependencyProperty.Register(nameof(ServerMapSaveFileName), typeof(string), typeof(ServerProfile), new PropertyMetadata("game.db")); + public static readonly DependencyProperty ServerMapSaveFileNameProperty = DependencyProperty.Register(nameof(ServerMapSaveFileName), typeof(string), typeof(ServerProfile), new PropertyMetadata(String.Empty)); [DataMember] public string ServerMapSaveFileName { @@ -710,10 +710,23 @@ namespace ServerManagerTool.Lib #region Methods #region Common Methods - public void ChangeInstallationFolder(string folder) + public void ChangeInstallationFolder(string folder, bool reloadConfigFiles) { InstallDirectory = folder; + if (reloadConfigFiles) + { + var serverConfigPath = GetProfileServerConfigDir(); + if (Directory.Exists(serverConfigPath)) + { + var serverConfigFile = Path.Combine(serverConfigPath, Config.Default.ServerGameConfigFile); + if (File.Exists(serverConfigFile)) + { + LoadFromConfigFiles(serverConfigFile, this, exclusions: null); + } + } + } + LoadServerFiles(true, true); SetupServerFilesWatcher(); } @@ -903,12 +916,12 @@ namespace ServerManagerTool.Lib return LoadFromProfileFile(file, profile); var filePath = Path.GetDirectoryName(file); - profile = LoadFromConfigFiles(file, profile); + profile = LoadFromConfigFiles(file, profile, exclusions: null); if (filePath.EndsWith(Config.Default.ServerConfigRelativePath)) { var installDirectory = filePath.Replace(Config.Default.ServerConfigRelativePath, string.Empty).TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); - profile.ChangeInstallationFolder(installDirectory); + profile.ChangeInstallationFolder(installDirectory, reloadConfigFiles: false); } return profile; @@ -927,6 +940,13 @@ namespace ServerManagerTool.Lib profile = profile ?? new ServerProfile(); iniFile.Deserialize(profile, exclusions); + if (string.IsNullOrWhiteSpace(profile.ServerModIds) && iniPath.EndsWith(Config.Default.ServerConfigRelativePath)) + { + var installDirectory = iniPath.Replace(Config.Default.ServerConfigRelativePath, string.Empty).TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); + var modIds = ModUtils.ReadModListFile(installDirectory); + profile.ServerModIds = string.Join(",", modIds); + } + return profile; } diff --git a/src/ConanServerManager/UserControls/ServerSettingsControl.xaml.cs b/src/ConanServerManager/UserControls/ServerSettingsControl.xaml.cs index beb76349..135cee98 100644 --- a/src/ConanServerManager/UserControls/ServerSettingsControl.xaml.cs +++ b/src/ConanServerManager/UserControls/ServerSettingsControl.xaml.cs @@ -796,7 +796,7 @@ namespace ServerManagerTool IsFolderPicker = true, Title = _globalizer.GetResourceString("ServerSettings_InstallServer_Title") }; - if (!String.IsNullOrWhiteSpace(Settings.InstallDirectory)) + if (!string.IsNullOrWhiteSpace(Settings.InstallDirectory)) { dialog.InitialDirectory = Settings.InstallDirectory; } @@ -804,7 +804,10 @@ namespace ServerManagerTool var result = dialog.ShowDialog(Window.GetWindow(this)); if (result == CommonFileDialogResult.Ok) { - Settings.ChangeInstallationFolder(dialog.FileName); + Settings.ServerMap = string.Empty; + Settings.ServerMapSaveFileName = string.Empty; + + Settings.ChangeInstallationFolder(dialog.FileName, reloadConfigFiles: true); } } diff --git a/src/ConanServerManager/Utils/ModUtils.cs b/src/ConanServerManager/Utils/ModUtils.cs index 6435e68e..f5496cef 100644 --- a/src/ConanServerManager/Utils/ModUtils.cs +++ b/src/ConanServerManager/Utils/ModUtils.cs @@ -1,11 +1,11 @@ using ServerManagerTool.Common; +using ServerManagerTool.Common.Extensions; using ServerManagerTool.Common.Lib; using ServerManagerTool.Common.Utils; using System; using System.Collections.Generic; using System.IO; using System.Linq; -using System.Text.RegularExpressions; namespace ServerManagerTool.Utils { @@ -170,6 +170,28 @@ namespace ServerManagerTool.Utils } } + public static List ReadModListFile(string installDirectory) + { + if (string.IsNullOrWhiteSpace(installDirectory) || !Directory.Exists(installDirectory)) + return new List(); + + // get the folder/file details + var modRootFolder = GetModRootPath(installDirectory); + var modListFileName = Config.Default.ServerModListFile; + var modListFile = IOUtils.NormalizePath(Path.Combine(modRootFolder, modListFileName)); + + // check if the folder/file exists + if (!Directory.Exists(modRootFolder) || !File.Exists(modListFile)) + return new List(); + + var modFiles = File.ReadAllLines(modListFile); + return modFiles + .Select(m => Path.GetFileNameWithoutExtension(m)) + .Where(m => m.IsNumeric()) + .Where(m => !string.IsNullOrWhiteSpace(m)) + .ToList(); + } + public static List ValidateModList(List modIdList) { // remove all duplicate mod ids. diff --git a/src/ConanServerManager/VersionFeed.xml b/src/ConanServerManager/VersionFeed.xml index 06b8b7e0..10b2c4da 100644 --- a/src/ConanServerManager/VersionFeed.xml +++ b/src/ConanServerManager/VersionFeed.xml @@ -20,6 +20,7 @@
    • Gamedata Files - when adding, deleteing or reloading the gamedata files via the gamedata window, the server manager will reload them and update the settings window.
    • +
    • Main Window - when changing the location of the server, it will reload the profile with the config settings in the new location.
    • Main Window - added discord server button.
    • Main Window - re-organised the buttons.
    diff --git a/src/ConanServerManager/VersionFeedBeta.xml b/src/ConanServerManager/VersionFeedBeta.xml index 3dabb3d2..23d10d4c 100644 --- a/src/ConanServerManager/VersionFeedBeta.xml +++ b/src/ConanServerManager/VersionFeedBeta.xml @@ -19,6 +19,7 @@ CHANGE
      +
    • Main Window - when changing the location of the server, it will reload the profile with the config settings in the new location.
    • Main Window - added discord server button.
    • Main Window - re-organised the buttons.
    diff --git a/src/ServerManager.Common/Extensions/StringExtensions.cs b/src/ServerManager.Common/Extensions/StringExtensions.cs index d136b455..a59bc546 100644 --- a/src/ServerManager.Common/Extensions/StringExtensions.cs +++ b/src/ServerManager.Common/Extensions/StringExtensions.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; namespace ServerManagerTool.Common.Extensions { @@ -13,5 +14,10 @@ namespace ServerManagerTool.Common.Extensions return value.IndexOf(substring, comparisonType) >= 0; } + + public static bool IsNumeric(this string value) + { + return value.All(char.IsNumber); + } } }