public bool UninstallMod(string ID) { if (_log.IsDebugEnabled) { _log.DebugFormat("Starting {0}", MethodBase.GetCurrentMethod().ToString()); } ModConfiguration item = null; bool retVal = false; foreach (ModConfiguration config in Configurations.Configurations) { if (config.ID == ID) { item = config; break; } } if (item != null) { retVal = UninstallMod(item); } else { retVal = false; } if (_log.IsDebugEnabled) { _log.DebugFormat("Ending {0}", MethodBase.GetCurrentMethod().ToString()); } return(retVal); }
public bool ActivateConfiguration(ModConfiguration config) { if (_log.IsDebugEnabled) { _log.DebugFormat("Starting {0}", MethodBase.GetCurrentMethod().ToString()); } bool retVal = true; if (config != null) { if (!IsAlreadyActive(config.ID)) { config.ActivateMod(); config.Sequence = Configurations.Configurations.Count; this.UIThreadAddToCollection <ModConfiguration>(Configurations.Configurations, config); SaveData(); } } if (_log.IsDebugEnabled) { _log.DebugFormat("Ending {0}", MethodBase.GetCurrentMethod().ToString()); } return(retVal); }
public bool DeactivateStock() { if (_log.IsDebugEnabled) { _log.DebugFormat("Starting {0}", MethodBase.GetCurrentMethod().ToString()); } bool retVal = true; if (Configurations.Configurations.Count == 1) { ModConfiguration config = Configurations.Configurations[0]; config.DeactivateMod(); Configurations.Configurations.Remove(config); } else { retVal = false; if (Configurations.Configurations.Count > 1) { throw new InvalidOperationException("Cannot deactivate Stock while other Mods are active."); } } if (_log.IsDebugEnabled) { _log.DebugFormat("Ending {0}", MethodBase.GetCurrentMethod().ToString()); } return(retVal); }
public ModConfiguration(string definitionFile) { Initialize(); ModConfiguration config = XmlConverter.ToObject(definitionFile, typeof(ModConfiguration)) as ModConfiguration; if (config != null) { this.CopyProperties(config); } }
public bool InstallMod(ModConfiguration mod, string source) { if (_log.IsDebugEnabled) { _log.DebugFormat("Starting {0}", MethodBase.GetCurrentMethod().ToString()); } bool retVal = false; if (mod != null && !string.IsNullOrEmpty(source)) { if (ModAlreadyInstalled(mod.ID)) { retVal = false; } else { if (!VersionOK(source)) { return(false); } FileHelper.CreatePath(Locations.ArtemisCopyPath); string src = source; FileAttributes attr = File.GetAttributes(src); if ((attr & FileAttributes.Directory) == FileAttributes.Directory) { ModManagement.DoMessage(AMLResources.Properties.Resources.InstallingMod); mod.InstallMod(src); } else if (src.EndsWith("EXE", StringComparison.OrdinalIgnoreCase)) { ModManagement.DoMessage(AMLResources.Properties.Resources.InstallingMod); InstallEXE(mod, src); } else { ModManagement.DoMessage(AMLResources.Properties.Resources.UnpackagingMod); src = mod.Unpackage(source); if (string.IsNullOrEmpty(src)) { return(false); } } this.Dispatcher.BeginInvoke(new Action <ModConfiguration>(AddToCollection), mod); retVal = true; } } if (_log.IsDebugEnabled) { _log.DebugFormat("Ending {0}", MethodBase.GetCurrentMethod().ToString()); } return(retVal); }
public bool UninstallMod(ModConfiguration mod) { if (_log.IsDebugEnabled) { _log.DebugFormat("Starting {0}", MethodBase.GetCurrentMethod().ToString()); } bool retVal = true; if (mod != null) { if (Configurations.Configurations.Contains(mod)) { if (mod.UninstallMod()) { Configurations.Configurations.Remove(mod); Save(); } else { retVal = false; } } else { retVal = false; } } else { retVal = false; } if (_log.IsDebugEnabled) { _log.DebugFormat("Ending {0}", MethodBase.GetCurrentMethod().ToString()); } return(retVal); }
public bool DeactivateLastConfig() { if (_log.IsDebugEnabled) { _log.DebugFormat("Starting {0}", MethodBase.GetCurrentMethod().ToString()); } bool retVal = true; if (Configurations.Configurations.Count > 1) { ModConfiguration config = Configurations.Configurations[Configurations.Configurations.Count - 1]; if (_log.IsInfoEnabled) { _log.InfoFormat("~~~~~~~~~~~~~ Beginning Deactivation of {0}", config.Title); } config.DeactivateMod(); Application.Current.UIThreadRemoveFromCollection <ModConfiguration>(Configurations.Configurations, config); //Configurations.Configurations.Remove(config); for (int i = Configurations.Configurations.Count - 1; i >= 0; i--) { foreach (FileMap m in Configurations.Configurations[i].ActiveFiles.Files) { if (!File.Exists(m.Target)) { if (File.Exists(m.Source)) { if (_log.IsInfoEnabled) { _log.InfoFormat("Restoring \"{0}\" from config {1}", m.Source, Configurations.Configurations[i].Title); } RussLibrary.Helpers.FileHelper.Copy(m.Source, m.Target); } else { if (_log.IsWarnEnabled) { _log.WarnFormat("Source file is missing: \"{0}\"", m.Source); } //A source file from Mod "{0}" is missing. StringBuilder sb = new StringBuilder(); sb.AppendFormat(AMLResources.Properties.Resources.SourceNotFoundPrefix, Configurations.Configurations[i].Title); sb.AppendLine(); sb.AppendLine(); sb.AppendLine(AMLResources.Properties.Resources.CorruptedMod); sb.AppendLine(); sb.AppendLine(AMLResources.Properties.Resources.ProcessingContinue); sb.AppendLine(); sb.AppendFormat(AMLResources.Properties.Resources.MissingFileLabel, m.Source); Locations.MessageBoxShow(sb.ToString(), MessageBoxButton.OK, MessageBoxImage.Exclamation); } } } } //Do Save. SaveData(); if (_log.IsInfoEnabled) { _log.InfoFormat("~~~~~~~~~~~~~ Ending Deactivation of {0}", config.Title); } Locations.MessageBoxShow(config.Title + " deactivated.", MessageBoxButton.OK, MessageBoxImage.Information); } else { retVal = false; } if (_log.IsDebugEnabled) { _log.DebugFormat("Ending {0}", MethodBase.GetCurrentMethod().ToString()); } return(retVal); }
private static void InstallEXE(ModConfiguration config, string file) { if (_log.IsDebugEnabled) { _log.DebugFormat("Starting {0}", MethodBase.GetCurrentMethod().ToString()); } if (string.IsNullOrEmpty(file) || !file.EndsWith(".EXE", StringComparison.OrdinalIgnoreCase)) { throw new InvalidOperationException("Must be an EXE file to call InstallEXE Method."); } if (config != null) { Locations.MessageBoxShow( AMLResources.Properties.Resources.EXEInstallWarning + DataStrings.CRCR + AMLResources.Properties.Resources.FullRestoreWarning, MessageBoxButton.OK, MessageBoxImage.Information); //First get list of files ModManagement.DoMessage(AMLResources.Properties.Resources.LoadingListOfFiles); #if EXETest string testPath = @"D:\Stuff\Downloads\Artemis backup"; FileInfo[] PreInstall = new DirectoryInfo(testPath).GetFiles("*.*", SearchOption.AllDirectories); #else FileInfo[] PreInstall = new DirectoryInfo(UserConfiguration.Current.GetArtemisInstallPath()).GetFiles("*.*", SearchOption.AllDirectories); ModManagement.DoMessage(AMLResources.Properties.Resources.InstallingModMessage); RunAdminProcess(file, string.Empty); #endif ModManagement.DoMessage(AMLResources.Properties.Resources.LoadingListAddedByMod); FileInfo[] PostInstall = new DirectoryInfo(UserConfiguration.Current.GetArtemisInstallPath()).GetFiles("*.*", SearchOption.AllDirectories); if (VersionOK(UserConfiguration.Current.GetArtemisInstallPath())) { //Now identify what changed, and copy changed files to work path. string wrkPath = Path.Combine(Locations.InstalledModsPath, config.ID); if (_log.IsInfoEnabled) { _log.InfoFormat("Work Path set to \"{0}\"", wrkPath); } Dictionary <string, FileInfo> PreInstallFiles = new Dictionary <string, FileInfo>(); foreach (FileInfo f in PreInstall) { string fn = f.FullName; #if EXETest fn = fn.Replace(testPath, Locations.ArtemisInstallPath); #endif PreInstallFiles.Add(fn, f); } ModManagement.DoMessage(AMLResources.Properties.Resources.CopyingToModInstallation); foreach (FileInfo f in PostInstall) { if (_log.IsInfoEnabled) { _log.InfoFormat("Post install file: {0}", f.FullName); } string relative = f.DirectoryName.Substring(UserConfiguration.Current.GetArtemisInstallPath().Length); if (relative.EndsWith("\\", StringComparison.OrdinalIgnoreCase)) { relative = relative.Substring(0, relative.Length - 1); } if (relative.StartsWith("\\", StringComparison.OrdinalIgnoreCase)) { relative = relative.Substring(1, relative.Length - 1); } string folder = Path.Combine(wrkPath, relative); if (_log.IsInfoEnabled) { _log.InfoFormat("Relative path = \"{1}\". Target folder set to \"{0}\"", folder, relative); } if (PreInstallFiles.ContainsKey(f.FullName)) { if (_log.IsInfoEnabled) { _log.Info("File found amoung preinstall."); } if (f.Length != PreInstallFiles[f.FullName].Length || f.LastWriteTimeUtc.CompareTo(PreInstallFiles[f.FullName].LastWriteTimeUtc) != 0) { if (_log.IsInfoEnabled) { _log.Info("File size or last modified date not match."); } DoCopy(folder, f); } else { if (_log.IsInfoEnabled) { _log.Info("File matches perfectly."); } } } else { if (_log.IsInfoEnabled) { _log.Info("File was not found among pre-installed files."); } DoCopy(folder, f); } } } #if !EXETest if (!string.IsNullOrEmpty(config.Uninstall)) { ModManagement.DoMessage(AMLResources.Properties.Resources.UninstallingEXEMod); RunAdminProcess(Path.Combine(UserConfiguration.Current.GetArtemisInstallPath(), config.Uninstall), string.Empty); System.Threading.Thread.Sleep(10000); } else { Locations.MessageBoxShow( AMLResources.Properties.Resources.PleaseRunUninstaller, MessageBoxButton.OK, MessageBoxImage.Exclamation); } ModManagement.DoMessage(AMLResources.Properties.Resources.RestoringOriginalArtemis); // config.InstallMod(wrkPath); ModConfiguration stock = new ModConfiguration(Locations.MODStockDefinition); string StockPath = Path.Combine(Locations.InstalledModsPath, stock.ID); string xcopy = Path.Combine(Path.GetTempPath(), DataStrings.RestoreArtemisCmd); using (StreamWriter sw = new StreamWriter(xcopy)) { sw.WriteLine(string.Format(DataStrings.XcopyCommand, StockPath, UserConfiguration.Current.GetArtemisInstallPath())); } RunAdminProcess(xcopy, string.Empty); #endif } if (_log.IsDebugEnabled) { _log.DebugFormat("Ending {0}", MethodBase.GetCurrentMethod().ToString()); } }
void AddToCollection(ModConfiguration mod) { Configurations.Configurations.Add(mod); this.Save(); }