/// <summary>
        /// Compress the css files and store them in the specified css file.
        /// </summary>
        /// <param name="outputFileInfo">The virtual path for the crushed js file.</param>
        /// <param name="cssRootUri">The path for the crushed css file.</param>
        /// <param name="files">The css files to be crushed.</param>
        /// <param name="directories">The css directories to be crushed.</param>
        /// <param name="appendHashToAssets"></param>
        public virtual CssCrushedOutput ProcessGroup(FileInfo outputFileInfo, Uri cssRootUri, IEnumerable <CssFile> files, IEnumerable <CssDirectory> directories, bool appendHashToAssets)
        {
            var filesToWatch = GetFilesToWatch(files, directories);

            var filesToProcess = filesToWatch
                                 .Select(cssFile => new CssFileProcessor(RetryableFileOpener, PathProvider, CssPathRewriter, cssFile.FilePath, cssFile.CompressionType, cssRootUri, appendHashToAssets));

            var localCssAssetFilesThatExist = new List <FileInfo>();

            if (WatchAssets)
            {
                localCssAssetFilesThatExist = filesToProcess
                                              .SelectMany(x => x.GetLocalCssAssetFilesThatExist().Select(y => y.File))
                                              .ToList();
            }

            var metaDataFiles = filesToWatch
                                .Select(x => new FileInfo(x.FilePath)).Concat(localCssAssetFilesThatExist)
                                .Distinct()
                                .OrderBy(x => x.FullName);

            var isMetaDataFresh = FileMetaData.IsMetaDataFresh(outputFileInfo, metaDataFiles);

            if (!isMetaDataFresh)
            {
                var content = GetGroupContent(filesToProcess);

                RetryableFileWriter.SaveContentsToFile(content, outputFileInfo);

                FileMetaData.CreateMetaData(outputFileInfo, metaDataFiles);
            }

            var foldersToWatch = directories
                                 .Select(x => Talifun.FileWatcher.EnhancedFileSystemWatcherFactory.Instance
                                         .CreateEnhancedFileSystemWatcher(new Uri(PathProvider.MapPath(x.DirectoryPath)).LocalPath, x.IncludeFilter, x.ExcludeFilter, x.PollTime, x.IncludeSubDirectories));

            var crushedOutput = new CssCrushedOutput
            {
                FilesToWatch      = filesToWatch,
                FoldersToWatch    = foldersToWatch,
                CssAssetFilePaths = localCssAssetFilesThatExist
            };

            return(crushedOutput);
        }
        private StringBuilder CreateLogEntries(CssGroupToProcess cssGroupToProcess, Uri outputUri, CssCrushedOutput crushedOutput, Stopwatch stopwatch)
        {
            outputUri = new Uri(cssGroupToProcess.PathProvider.ToAbsolute(outputUri.ToString()), UriKind.Absolute);
            var rootPath = cssGroupToProcess.PathProvider.GetAbsoluteUriDirectory("~/");

            var output = new StringBuilder();
            output.AppendFormat("{0} ({1} - {2} ms)\r\n", rootPath.MakeRelativeUri(outputUri), cssGroupToProcess.Group.Name, stopwatch.ElapsedMilliseconds);
            output.AppendFormat("{0}   (Css)\r\n", rootPath.MakeRelativeUri(outputUri));
            foreach (var cssFile in crushedOutput.FilesToWatch)
            {
                outputUri = new Uri(cssGroupToProcess.PathProvider.ToAbsolute(cssFile.FilePath), UriKind.Absolute);
                output.AppendFormat("      {0}\r\n", rootPath.MakeRelativeUri(outputUri));
            }
            output.AppendFormat("{0}   (Css Assets)\r\n", rootPath.MakeRelativeUri(outputUri));
            foreach (var cssAssetFile in crushedOutput.CssAssetFilePaths)
            {
                outputUri = new Uri(cssGroupToProcess.PathProvider.ToAbsolute(cssAssetFile.FullName), UriKind.Absolute);
                output.AppendFormat("      {0}\r\n", rootPath.MakeRelativeUri(outputUri));
            }
            return output;
        }
Exemple #3
0
        private StringBuilder CreateLogEntries(CssGroupToProcess cssGroupToProcess, Uri outputUri, CssCrushedOutput crushedOutput, Stopwatch stopwatch)
        {
            outputUri = new Uri(cssGroupToProcess.PathProvider.ToAbsolute(outputUri.ToString()), UriKind.Absolute);
            var rootPath = cssGroupToProcess.PathProvider.GetAbsoluteUriDirectory("~/");

            var output = new StringBuilder();

            output.AppendFormat("{0} ({1} - {2} ms)\r\n", rootPath.MakeRelativeUri(outputUri), cssGroupToProcess.Group.Name, stopwatch.ElapsedMilliseconds);
            output.AppendFormat("{0}   (Css)\r\n", rootPath.MakeRelativeUri(outputUri));
            foreach (var cssFile in crushedOutput.FilesToWatch)
            {
                outputUri = new Uri(cssGroupToProcess.PathProvider.ToAbsolute(cssFile.FilePath), UriKind.Absolute);
                output.AppendFormat("      {0}\r\n", rootPath.MakeRelativeUri(outputUri));
            }
            output.AppendFormat("{0}   (Css Assets)\r\n", rootPath.MakeRelativeUri(outputUri));
            foreach (var cssAssetFile in crushedOutput.CssAssetFilePaths)
            {
                outputUri = new Uri(cssGroupToProcess.PathProvider.ToAbsolute(cssAssetFile.FullName), UriKind.Absolute);
                output.AppendFormat("      {0}\r\n", rootPath.MakeRelativeUri(outputUri));
            }
            return(output);
        }
Exemple #4
0
        /// <summary>
        /// Compress the css files and store them in the specified css file.
        /// </summary>
        /// <param name="outputFileInfo">The virtual path for the crushed js file.</param>
        /// <param name="cssRootUri">The path for the crushed css file.</param>
        /// <param name="files">The css files to be crushed.</param>
        /// <param name="directories">The css directories to be crushed.</param>
        /// <param name="appendHashToAssets"></param>
        public virtual CssCrushedOutput ProcessGroup(FileInfo outputFileInfo, Uri cssRootUri, IEnumerable<CssFile> files, IEnumerable<CssDirectory> directories, bool appendHashToAssets)
        {
    		var filesToWatch = GetFilesToWatch(files, directories);

            var filesToProcess = filesToWatch
                .Select(cssFile => new CssFileProcessor(RetryableFileOpener, PathProvider, CssPathRewriter, cssFile.FilePath, cssFile.CompressionType, cssRootUri, appendHashToAssets));

            var localCssAssetFilesThatExist = new List<FileInfo>();
            if (WatchAssets)
            {
                localCssAssetFilesThatExist = filesToProcess
                    .SelectMany(x => x.GetLocalCssAssetFilesThatExist().Select(y => y.File))
                    .ToList();
            }

            var metaDataFiles = filesToWatch
                .Select(x => new FileInfo(x.FilePath)).Concat(localCssAssetFilesThatExist)
                .Distinct()
                .OrderBy(x => x.FullName);

            var isMetaDataFresh = FileMetaData.IsMetaDataFresh(outputFileInfo, metaDataFiles);

            if (!isMetaDataFresh)
            {
                var content = GetGroupContent(filesToProcess);

                RetryableFileWriter.SaveContentsToFile(content, outputFileInfo);

                FileMetaData.CreateMetaData(outputFileInfo, metaDataFiles);
            }

            var foldersToWatch = directories
                .Select(x => Talifun.FileWatcher.EnhancedFileSystemWatcherFactory.Instance
                .CreateEnhancedFileSystemWatcher(new Uri(PathProvider.MapPath(x.DirectoryPath)).LocalPath, x.IncludeFilter, x.ExcludeFilter, x.PollTime, x.IncludeSubDirectories));

            var crushedOutput = new CssCrushedOutput
            {
				FilesToWatch = filesToWatch,
                FoldersToWatch = foldersToWatch,
                CssAssetFilePaths = localCssAssetFilesThatExist
            };

            return crushedOutput;
        }