/// <summary> /// /// </summary> /// <param name="newPath"></param> /// <param name="oldName"></param> /// <param name="newFileName"></param> /// <param name="alreadyCloned"></param> /// <param name="execute">whether to actual execute the clone. otherwise, this is just a preview</param> /// <returns></returns> public virtual bool Clone(string newPath, CloneObjectParameters parameters, HashSet <string> alreadyCloned, bool execute) { // Ensure directory exists string directory = System.IO.Path.GetDirectoryName(newPath); alreadyCloned.Add(newPath); if (execute) { System.IO.Directory.CreateDirectory(directory); } // Figure out what dependency files need to exist foreach (KeyValuePair <string, FileData> dependencyKV in GetDependencies()) { string dependencyName = dependencyKV.Key; FileData dependencyFile = dependencyKV.Value; if (dependencyFile != null && ShouldCloneDependency(dependencyName, parameters)) { // We want to clone this dependency IModuleFileData modFileData = dependencyFile as IModuleFileData; if (modFileData != null && modFileData.GetModuleFile() != null) { // This dependency is an alias. Clone the alias. ModuleFile linkedAlias = modFileData.GetModuleFile(); string aliasNewName = parameters.TransformAlias(dependencyName); if (!alreadyCloned.Contains(aliasNewName)) { alreadyCloned.Add(aliasNewName); linkedAlias.Clone(parameters, alreadyCloned, execute); } } else { // This dependency is just a FileData, clone the fileData. string transformedDependencyName = parameters.TransformModPath(dependencyName); string newDependencyPath = ModuleDataManager.GetInstance().GetMod(parameters.TargetModule).ParentDirectory + parameters.TransformParameter(transformedDependencyName); if (!alreadyCloned.Contains(newDependencyPath)) { alreadyCloned.Add(newDependencyPath); dependencyFile.Clone(newDependencyPath, parameters, alreadyCloned, execute); } } } } if (execute) { string flatFileData = ResolveLocalizedStrings(parameters, FlatFileData); string newFlatFile = parameters.TransformParameter(flatFileData); using (StreamWriter wr = new StreamWriter(newPath, false, new UTF8Encoding(false))) { wr.Write(newFlatFile); } } return(true); }
/// <summary> /// /// </summary> /// <param name="newPath"></param> /// <param name="oldName"></param> /// <param name="newFileName"></param> /// <param name="alreadyCloned"></param> /// <param name="execute">whether to actual execute the clone. otherwise, this is just a preview</param> /// <returns></returns> public virtual bool Clone(string newPath, CloneObjectParameters parameters, HashSet<string> alreadyCloned, bool execute) { // Ensure directory exists string directory = System.IO.Path.GetDirectoryName(newPath); alreadyCloned.Add(newPath); if (execute) { System.IO.Directory.CreateDirectory(directory); } // Figure out what dependency files need to exist foreach (KeyValuePair<string, FileData> dependencyKV in GetDependencies()) { string dependencyName = dependencyKV.Key; FileData dependencyFile = dependencyKV.Value; if (ShouldCloneDependency(dependencyName, parameters)) { // We want to clone this dependency IModuleFileData modFileData = dependencyFile as IModuleFileData; if (modFileData != null && modFileData.GetModuleFile() != null) { // This dependency is an alias. Clone the alias. ModuleFile linkedAlias = modFileData.GetModuleFile(); string aliasNewName = parameters.TransformAlias(dependencyName); if (!alreadyCloned.Contains(aliasNewName)) { alreadyCloned.Add(aliasNewName); linkedAlias.Clone(parameters, alreadyCloned, execute); } } else { // This dependency is just a FileData, clone the fileData. string transformedDependencyName = parameters.TransformModPath(dependencyName); string linkedPath = ModuleDataManager.GetInstance().ModsDirectoryPath + transformedDependencyName; string newDependencyPath = ModuleDataManager.GetInstance().ModsDirectoryPath + parameters.TransformParameter(transformedDependencyName); if (!alreadyCloned.Contains(newDependencyPath)) { alreadyCloned.Add(newDependencyPath); dependencyFile.Clone(newDependencyPath, parameters, alreadyCloned, execute); } } } } if (execute) { string newFlatFile = parameters.TransformParameter(FlatFileData); using (StreamWriter wr = new StreamWriter(newPath, false, new UTF8Encoding(false))) { wr.Write(newFlatFile); } } return true; }