public void HandleGetFilesReferencedBy(string fileName, TopLevelOrRecursive topLevelOrRecursive, List <string> listToFill) { ProjectOrDisk projectOrDisk = ProjectOrDisk.Project; GetReferencesInProjectOrDisk(fileName, topLevelOrRecursive, listToFill, projectOrDisk); }
internal GeneralResponse HandleFillWithReferencedFiles(FilePath filePath, List <FilePath> listToFill) { ProjectOrDisk projectOrDisk = ProjectOrDisk.Project; List <string> stringListToFill = new List <string>(); var respnse = GetReferencesInProjectOrDisk(filePath.Standardized, TopLevelOrRecursive.TopLevel, stringListToFill, projectOrDisk); listToFill.AddRange(stringListToFill .Select(item => new FilePath(item))); return(respnse); }
public void HandleGetFilesNeededOnDiskBy(string fileName, List <string> listToFill) { string oldRelativeDirectory = FileManager.RelativeDirectory; ProjectOrDisk projectOrDisk = ProjectOrDisk.Disk; // We aways only look at TopLevel, // This can sometimes crash if it is run multiple times (like if the user clicks to // refresh files quickly: try { GetReferencesInProjectOrDisk(fileName, TopLevelOrRecursive.TopLevel, listToFill, projectOrDisk); } catch (Exception e) { PluginManager.ReceiveError("Non-critical error: " + e.Message); FileManager.RelativeDirectory = oldRelativeDirectory; } }
private void FillAllFilesWithFilesInList(List <string> allFiles, ReferencedFileSave[] referencedFileList, TopLevelOrRecursive topLevelOrRecursive, ProjectOrDisk projectOrFile) { foreach (var rfs in referencedFileList) { allFiles.Add(rfs.Name); AddFilesReferenced(rfs.Name, allFiles, topLevelOrRecursive, projectOrFile); for (int i = 0; i < rfs.ProjectSpecificFiles.Count; i++) { ProjectSpecificFile psf = rfs.ProjectSpecificFiles[i]; allFiles.Add(psf.FilePath); AddFilesReferenced(psf.FilePath, allFiles, topLevelOrRecursive, projectOrFile); } } }
private void AddFilesReferenced(string fileName, List <string> allFiles, TopLevelOrRecursive topLevelOrRecursive, ProjectOrDisk projectOrFile) { // The project may have been unloaded: if (GlueState.CurrentMainContentProject != null) { string absoluteFileName = GlueCommands.GetAbsoluteFileName(fileName, isContent: true); if (File.Exists(absoluteFileName)) { #if GLUE List <string> referencedFiles = null; if (projectOrFile == ProjectOrDisk.Project) { referencedFiles = FlatRedBall.Glue.Managers.FileReferenceManager.Self.GetFilesReferencedBy(absoluteFileName, topLevelOrRecursive); } else { referencedFiles = FlatRedBall.Glue.Managers.FileReferenceManager.Self.GetFilesNeededOnDiskBy(absoluteFileName, topLevelOrRecursive); } #else List <string> referencedFiles = ContentParser.GetFilesReferencedByAsset(absoluteFileName, topLevelOrRecursive); #endif // 12/14/2010 // The referencedFiles // instance may be null // if the absoluteFileName // references a file that doesn't // exist on the file system. This // happens if someone checks in a GLUX // file but forgets to check in a newly- // created file. Not deadly, so Glue shouldn't // crash. Also, Glue displays warning messages in // a different part of the code, so we shouldn't pester // the user here with another one. if (referencedFiles != null) { allFiles.AddRange(referencedFiles); } } else { // Do nothing? } } }
private void FillAllFilesWithFilesInList(List<string> allFiles, IEnumerable<ReferencedFileSave> referencedFileList, TopLevelOrRecursive topLevelOrRecursive, ProjectOrDisk projectOrFile) { foreach(var rfs in referencedFileList) { allFiles.Add(rfs.Name); AddFilesReferenced(rfs.Name, allFiles, topLevelOrRecursive, projectOrFile); for (int i = 0; i < rfs.ProjectSpecificFiles.Count; i++) { ProjectSpecificFile psf = rfs.ProjectSpecificFiles[i]; allFiles.Add(psf.FilePath); AddFilesReferenced(psf.FilePath, allFiles, topLevelOrRecursive, projectOrFile); } } }
private void AddFilesReferenced(string fileName, List<string> allFiles, TopLevelOrRecursive topLevelOrRecursive, ProjectOrDisk projectOrFile) { string absoluteFileName = ProjectManager.MakeAbsolute(fileName); if (File.Exists(absoluteFileName)) { #if GLUE List<string> referencedFiles = null; if (projectOrFile == ProjectOrDisk.Project) { referencedFiles = FlatRedBall.Glue.Managers.FileReferenceManager.Self.GetFilesReferencedBy(absoluteFileName, topLevelOrRecursive); } else { referencedFiles = FlatRedBall.Glue.Managers.FileReferenceManager.Self.GetFilesNeededOnDiskBy(absoluteFileName, topLevelOrRecursive); } #else List<string> referencedFiles = ContentParser.GetFilesReferencedByAsset(absoluteFileName, topLevelOrRecursive); #endif // 12/14/2010 // The referencedFiles // instance may be null // if the absoluteFileName // references a file that doesn't // exist on the file system. This // happens if someone checks in a GLUX // file but forgets to check in a newly- // created file. Not deadly, so Glue shouldn't // crash. Also, Glue displays warning messages in // a different part of the code, so we shouldn't pester // the user here with another one. if (referencedFiles != null) { allFiles.AddRange(referencedFiles); } } else { // Do nothing? } }
private void AddFilesReferencedBy(TopLevelOrRecursive topLevelOrRecursive, List <string> listToFill, ElementSave element, ProjectOrDisk projectOrDisk) { string fullFileName = FileManager.RelativeDirectory + element.Subfolder + "\\" + element.Name + "." + element.FileExtension; fullFileName = FileManager.RemoveDotDotSlash(fullFileName); listToFill.Add(fullFileName); if (topLevelOrRecursive == TopLevelOrRecursive.Recursive) { throw new NotImplementedException("This does not support recursive calls - should use the Glue system to track reference files"); } }
private void GetFilesReferencedBy(GumProjectSave gumProjectSave, TopLevelOrRecursive topLevelOrRecursive, List <string> listToFill, ProjectOrDisk projectOrDisk) { AppState.Self.GumProjectSave = gumProjectSave; foreach (var element in gumProjectSave.Screens) { AddFilesReferencedBy(topLevelOrRecursive, listToFill, element, projectOrDisk); } foreach (var element in gumProjectSave.Components) { AddFilesReferencedBy(topLevelOrRecursive, listToFill, element, projectOrDisk); } foreach (var element in gumProjectSave.StandardElements) { AddFilesReferencedBy(topLevelOrRecursive, listToFill, element, projectOrDisk); } StringFunctions.RemoveDuplicates(listToFill); }
private GeneralResponse GetReferencesInProjectOrDisk(string fileName, TopLevelOrRecursive topLevelOrRecursive, List <string> listToFill, ProjectOrDisk projectOrDisk) { GeneralResponse generalResponse = GeneralResponse.SuccessfulResponse; if (CanTrackDependenciesOn(fileName)) { string extension = FileManager.GetExtension(fileName); string oldRelative = FileManager.RelativeDirectory; string gumxFile = null; FileManager.RelativeDirectory = GetGumxDirectory(fileName); LoadGumxIfNecessaryFromDirectory(FileManager.RelativeDirectory); string absoluteFileName = fileName; if (FileManager.IsRelative(absoluteFileName)) { absoluteFileName = FileManager.RelativeDirectory + absoluteFileName; } string errors = null; if (System.IO.File.Exists(absoluteFileName)) { switch (extension) { case "gumx": { try { LoadGumxIfNecessaryFromDirectory(FileManager.RelativeDirectory, force: true); GetFilesReferencedBy(Gum.Managers.ObjectFinder.Self.GumProjectSave, topLevelOrRecursive, listToFill, projectOrDisk); } catch (Exception e) { errors = "Error tracking Gum references for " + absoluteFileName + "\n" + e.ToString(); } } break; case "gucx": { ComponentSave gumComponentSave = null; try { gumComponentSave = FileManager.XmlDeserialize <ComponentSave>(absoluteFileName); gumComponentSave.FileName = absoluteFileName; // See an explanation for this in LoadGumxIfNecessaryFromDirectory gumComponentSave.Initialize(gumComponentSave.DefaultState); GetFilesReferencedBy(gumComponentSave, topLevelOrRecursive, listToFill, projectOrDisk); } catch (Exception e) { errors = "Error tracking Gum references for " + absoluteFileName + "\n" + e.ToString(); } } break; case "gusx": { ScreenSave gumScreenSave = null; try { gumScreenSave = FileManager.XmlDeserialize <ScreenSave>(absoluteFileName); gumScreenSave.FileName = absoluteFileName; // See an explanation for this in LoadGumxIfNecessaryFromDirectory gumScreenSave.Initialize(gumScreenSave.DefaultState); GetFilesReferencedBy(gumScreenSave, topLevelOrRecursive, listToFill, projectOrDisk); } catch (Exception e) { errors = "Error tracking Gum references for " + absoluteFileName + "\n" + e.ToString(); } } break; case "gutx": { StandardElementSave standardElementSave = null; try { standardElementSave = FileManager.XmlDeserialize <StandardElementSave>(absoluteFileName); standardElementSave.FileName = absoluteFileName; // See an explanation for this in LoadGumxIfNecessaryFromDirectory standardElementSave.Initialize(standardElementSave.DefaultState); GetFilesReferencedBy(standardElementSave, topLevelOrRecursive, listToFill, projectOrDisk); } catch (Exception e) { errors = "Error tracking Gum references for " + absoluteFileName + "\n" + e.ToString(); } } break; } } if (errors != null) { generalResponse = new GeneralResponse { Succeeded = false, Message = errors }; } FileManager.RelativeDirectory = oldRelative; } return(generalResponse); }
private void GetRegularVariableFileReferences(List <string> listToFill, Gum.DataTypes.Variables.StateSave state, IList <InstanceSave> instances, ProjectOrDisk projectOrDisk) { var fileVariables = state.Variables .Where(item => item.IsFile && !string.IsNullOrEmpty(item.Value as string)) .ToArray(); foreach (var variable in fileVariables) { bool isGraphicFile = FileManager.IsGraphicFile(variable.Value as string); bool shouldConsider = !UseAtlases || !isGraphicFile || projectOrDisk == ProjectOrDisk.Disk; var instanceName = variable.SourceObject; if (shouldConsider && !string.IsNullOrEmpty(instanceName)) { // make sure this isn't a left-over variable reference var foundInstance = instances.FirstOrDefault(item => item.Name == instanceName); shouldConsider = foundInstance != null; } if (shouldConsider) { if (IsNineSliceSource(variable, state)) { string variableValue = variable.Value as string; var shouldUsePattern = RenderingLibrary.Graphics.NineSlice.GetIfShouldUsePattern(variableValue); if (shouldUsePattern) { string extension = FileManager.GetExtension(variableValue); string variableWithoutExtension = FileManager.RemoveExtension(variableValue); string bareTexture = RenderingLibrary.Graphics.NineSlice.GetBareTextureForNineSliceTexture( variableValue); foreach (var side in RenderingLibrary.Graphics.NineSlice.PossibleNineSliceEndings) { listToFill.Add(FileManager.RelativeDirectory + bareTexture + side + "." + extension); } } else { listToFill.Add(FileManager.RelativeDirectory + variableValue); } } else { string absoluteFileName = FileManager.RelativeDirectory + variable.Value as string; absoluteFileName = FileManager.RemoveDotDotSlash(absoluteFileName); listToFill.Add(absoluteFileName); } } } }
private void GetFilesReferencedBy(ElementSave element, TopLevelOrRecursive topLevelOrRecursive, List <string> listToFill, ProjectOrDisk projectOrDisk) { if (!string.IsNullOrEmpty(element.FileName) && projectOrDisk == ProjectOrDisk.Disk) { var fileWithoutExtension = FileManager.RemoveExtension(element.FileName); var potentialAnimationName = fileWithoutExtension + "Animations.ganx"; if (System.IO.File.Exists(potentialAnimationName)) { listToFill.Add(potentialAnimationName); } } // Use AllStates so that we get stuff referenced in categorized states too foreach (var state in element.AllStates) { state.ParentContainer = element; TryGetFontReferences(topLevelOrRecursive, listToFill, state); GetRegularVariableFileReferences(listToFill, state, element.Instances, projectOrDisk); foreach (var variableList in state.VariableLists) { if (variableList.IsFile) { throw new NotImplementedException(); } } } foreach (var instance in element.Instances) { var type = instance.BaseType; // find the element. var referencedElement = AppState.Self.GetElementSave(type); if (referencedElement != null) { if (referencedElement is StandardElementSave) { listToFill.Add(FileManager.RelativeDirectory + "Standards/" + referencedElement.Name + ".gutx"); } else if (referencedElement is ComponentSave) { listToFill.Add(FileManager.RelativeDirectory + "Components/" + referencedElement.Name + ".gucx"); } else { throw new Exception(); } if (topLevelOrRecursive == TopLevelOrRecursive.Recursive) { GetFilesReferencedBy(referencedElement, topLevelOrRecursive, listToFill, projectOrDisk); } } } StringFunctions.RemoveDuplicates(listToFill); }
private void GetRegularVariableFileReferences(List <string> listToFill, Gum.DataTypes.Variables.StateSave state, ProjectOrDisk projectOrDisk) { foreach (var variable in state.Variables.Where(item => item.IsFile)) { if (!string.IsNullOrEmpty(variable.Value as string)) { bool isGraphicFile = FileManager.IsGraphicFile(variable.Value as string); bool shouldConsider = !UseAtlases || !isGraphicFile || projectOrDisk == ProjectOrDisk.Disk; if (shouldConsider) { if (IsNineSliceSource(variable, state)) { string variableValue = variable.Value as string; var shouldUsePattern = RenderingLibrary.Graphics.NineSlice.GetIfShouldUsePattern(variableValue); if (shouldUsePattern) { string extension = FileManager.GetExtension(variableValue); string variableWithoutExtension = FileManager.RemoveExtension(variableValue); string bareTexture = RenderingLibrary.Graphics.NineSlice.GetBareTextureForNineSliceTexture( variableValue); foreach (var side in RenderingLibrary.Graphics.NineSlice.PossibleNineSliceEndings) { listToFill.Add(FileManager.RelativeDirectory + bareTexture + side + "." + extension); } } else { listToFill.Add(FileManager.RelativeDirectory + variableValue); } } else { string absoluteFileName = FileManager.RelativeDirectory + variable.Value as string; absoluteFileName = FileManager.RemoveDotDotSlash(absoluteFileName); listToFill.Add(absoluteFileName); } } } } }