示例#1
0
        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);
            }
        }
示例#5
0
        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);
        }
示例#6
0
        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);
        }
示例#8
0
        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());
            }
        }
示例#9
0
 void AddToCollection(ModConfiguration mod)
 {
     Configurations.Configurations.Add(mod);
     this.Save();
 }