void IInitializable.Initialize()
        {
            SledSpfWriter.ExcludeDomNodeType(SledLuaSchema.SledLuaCompileAttributeType.Type);
            SledSpfWriter.ExcludeDomNodeType(SledLuaSchema.SledLuaCompileSettingsType.Type);
            SledSpfWriter.ExcludeDomNodeType(SledLuaSchema.SledLuaFunctionType.Type);
            SledSpfWriter.ExcludeDomNodeType(SledLuaSchema.SledLuaProjectFilesWatchType.Type);
            SledSpfWriter.ExcludeDomNodeType(SledLuaSchema.SledLuaVarFiltersType.Type);
            SledSpfWriter.ExcludeDomNodeType(SledLuaSchema.SledLuaVarFilterType.Type);
            SledSpfWriter.ExcludeDomNodeType(SledLuaSchema.SledLuaVarFilterTypesType.Type);

            // Copy Lua compile settings from project temporary settings file to project file
            SledSpfReader.RegisterCopier(
                new SledSpfReader.DomNodeTypeRootCopier(
                    SledLuaSchema.SledLuaCompileSettingsType.Type));

            // Copy Lua watched variables from project temporary settings file to project file
            SledSpfReader.RegisterCopier(
                new SledSpfReader.DomNodeTypeRootCopier(
                    SledLuaSchema.SledLuaProjectFilesWatchType.Type));

            // Copy variable filters from project temporary settings file to project file
            SledSpfReader.RegisterCopier(
                new SledSpfReader.DomNodeTypeRootCopier(
                    SledLuaSchema.SledLuaVarFiltersType.Type));
        }
Beispiel #2
0
        /// <summary>
        /// Open the project file and remove any duplicates
        /// </summary>
        /// <param name="szAbsPath"></param>
        public static void CleanupProjectFileDuplicates(string szAbsPath)
        {
            if (!File.Exists(szAbsPath))
            {
                return;
            }

            if (SledUtil.IsFileReadOnly(szAbsPath))
            {
                return;
            }

            try
            {
                var schemaLoader = SledServiceInstance.TryGet <SledSharedSchemaLoader>();
                if (schemaLoader == null)
                {
                    return;
                }

                var uri    = new Uri(szAbsPath);
                var reader = new SledSpfReader(schemaLoader);

                var root = reader.Read(uri, false);
                if (root == null)
                {
                    return;
                }

                var lstProjFiles = new List <SledProjectFilesFileType>();

                // Gather up all project files in the project
                SledDomUtil.GatherAllAs(root, lstProjFiles);

                if (lstProjFiles.Count <= 1)
                {
                    return;
                }

                var uniquePaths   = new Dictionary <string, SledProjectFilesFileType>(StringComparer.CurrentCultureIgnoreCase);
                var lstDuplicates = new List <SledProjectFilesFileType>();

                foreach (var projFile in lstProjFiles)
                {
                    if (uniquePaths.ContainsKey(projFile.Path))
                    {
                        lstDuplicates.Add(projFile);
                    }
                    else
                    {
                        uniquePaths.Add(projFile.Path, projFile);
                    }
                }

                if (lstDuplicates.Count <= 0)
                {
                    return;
                }

                foreach (var projFile in lstDuplicates)
                {
                    projFile.DomNode.RemoveFromParent();
                }

                var writer = new SledSpfWriter(schemaLoader.TypeCollection);

                // Write changes back to disk
                writer.Write(root, uri, false);
            }
            catch (Exception ex)
            {
                SledOutDevice.OutLine(
                    SledMessageType.Error,
                    SledUtil.TransSub(Localization.SledProjectFilesErrorRemovingDuplicates, ex.Message, szAbsPath));
            }
        }