Ejemplo n.º 1
0
        public void Clean()
        {
            if (Project == null)
            {
                return;
            }

            currentBuild = BuildStep.Clean;
            BuildStatusChanged?.BeginInvoke(this, BuildStep.Clean, null, null);
            buildingThread = new System.Threading.Thread(new System.Threading.ThreadStart(delegate()
            {
                string outputDir = getOutputDir();
                IsBuilding       = true;
                foreach (var file in cache.Files.Where(x => x.Value.IsBuilt(outputDir)).Select(x => x.Value.InputFile))
                {
                    ContentFile item;
                    if (builtFiles.TryGetValue(file, out item))
                    {
                        ItemProgress?.BeginInvoke(this, new ItemProgressEventArgs(BuildStep.Clean, item), null, null);
                        if (System.IO.File.Exists(getDestinationFileAbsolute(item)))
                        {
                            System.IO.File.Delete(getDestinationFileAbsolute(item));
                        }
                    }
                }
                IsBuilding = false;
                BuildStatusChanged?.Invoke(this, BuildStep.Clean | BuildStep.Finished);
            }));
            buildingThread.Start();
        }
Ejemplo n.º 2
0
 private void CleanThread()
 {
     IsBuilding = true;
     foreach (var cachedItem in cache.Files)
     {
         var item = Project.GetElement(cachedItem.Value.InputFile) as ContentFile;
         if (item != null)
         {
             ItemProgress?.BeginInvoke(this, new ItemProgressEventArgs(BuildStep.Clean, item), null, null);
             if (System.IO.File.Exists(GetDestinationFileAbsolute(item)))
             {
                 System.IO.File.Delete(GetDestinationFileAbsolute(item));
             }
         }
     }
     IsBuilding = false;
     BuildStatusChanged?.Invoke(this, BuildStep.Clean | BuildStep.Finished);
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Builds a File based on the given File, ImporterContext and Processor Context
        /// </summary>
        /// <param name="contentFile"></param>
        /// <param name="importerContext"></param>
        /// <param name="processorContext"></param>
        public Tuple <object, object> BuildFile(ContentFile contentFile, ContentImporterContext importerContext, ContentProcessorContext processorContext)
        {
            string importDir  = System.IO.Path.GetDirectoryName(Project.File);
            string importFile = System.IO.Path.Combine(importDir, contentFile.getPath());
            string destFile   = GetDestinationFileAbsolute(contentFile);
            string outputPath = GetOutputDir();

            CreateFolderIfNeeded(destFile);

            if (!cache.NeedsRebuild(importDir, outputPath, contentFile.getPath()))
            {
                RaiseBuildMessage(this, new BuildMessageEventArgs(contentFile.Name, "skipped!", BuildMessageEventArgs.BuildMessageType.Information));
                return(null);
            }
            BuildInfo cacheInfo = new BuildInfo(importDir, contentFile.getPath(), GetDestinationFile(contentFile));
            var       importer  = contentFile.Importer;

            if (importer == null)
            {
                return(null);
            }

            object importerOutput = importer.Import(importFile, importerContext);

            if (importerOutput == null)
            {
                return(null);
            }

            cacheInfo.Dependencies.AddRange(importerContext.Dependencies);
            cache.AddDependencies(importDir, importerContext.Dependencies);

            engenious.Content.Pipeline.IContentProcessor processor = contentFile.Processor;
            if (processor == null)
            {
                return(new Tuple <object, object>(importerOutput, null));
            }

            object processedData = processor.Process(importerOutput, importFile, processorContext);

            if (processedData == null)
            {
                return(new Tuple <object, object>(importerOutput, null));
            }
            cacheInfo.Dependencies.AddRange(processorContext.Dependencies);
            cache.AddDependencies(importDir, processorContext.Dependencies);

            engenious.Content.Serialization.IContentTypeWriter typeWriter = engenious.Content.Serialization.SerializationManager.Instance.GetWriter(processedData.GetType());
            engenious.Content.ContentFile outputFileWriter = new engenious.Content.ContentFile(typeWriter.RuntimeReaderName);

            BinaryFormatter formatter = new BinaryFormatter();

            using (FileStream fs = new FileStream(destFile, FileMode.Create, FileAccess.Write))
            {
                formatter.Serialize(fs, outputFileWriter);
                engenious.Content.Serialization.ContentWriter writer = new engenious.Content.Serialization.ContentWriter(fs);
                writer.WriteObject(processedData, typeWriter);
            }
            cacheInfo.BuildDone(outputPath);
            cache.AddBuildInfo(cacheInfo);
            builtFiles[contentFile.getPath()] = contentFile;
            ItemProgress?.BeginInvoke(this, new ItemProgressEventArgs(BuildStep.Build, contentFile), null, null);

            return(new Tuple <object, object>(importerOutput, processedData));
        }