예제 #1
0
        public void HandleGetFilesReferencedBy(string fileName, TopLevelOrRecursive topLevelOrRecursive,
                                               List <string> listToFill)
        {
            ProjectOrDisk projectOrDisk = ProjectOrDisk.Project;

            GetReferencesInProjectOrDisk(fileName, topLevelOrRecursive, listToFill, projectOrDisk);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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;
            }
        }
예제 #4
0
        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);
                }
            }
        }
예제 #5
0
        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?
                }
            }
        }
예제 #6
0
        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);
                }
            }
        }
예제 #7
0
        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?
            }
        }
예제 #8
0
        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");
            }
        }
예제 #9
0
        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);
        }
예제 #10
0
        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);
        }
예제 #11
0
        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);
                    }
                }
            }
        }
예제 #12
0
        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);
        }
예제 #13
0
        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);
                        }
                    }
                }
            }
        }