/// <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; }
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); }
/// <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; }