private SPFile CreateOrUpdateMinifiedFile(SPItemEventProperties properties) { SPFile returnValue = null; RunForMainFile(properties, (fileNameParser, targetFolder, mainFile, minifiedFile) => { var reader = new FileContentParser(mainFile); var content = reader.GetCompiledContent(); var minifier = new FileMinifier(fileNameParser.FileExtension, content); if (minifiedFile != null) { if (minifiedFile.CheckedOutByUser == null) { minifiedFile.CheckOut(); } minifiedFile.SaveBinary(minifier.MinifyAsByteArray()); } else { var fileHashDictionary = new FileHashDictionary(properties.ListItem.Web.Site); var fileHash = fileHashDictionary[fileNameParser.FilePath]; var minifiedFileName = fileNameParser.GenerateMinifiedVersionFileName(fileHash); string fileUrl = String.Format("{0}/{1}", targetFolder.Url, minifiedFileName); minifiedFile = targetFolder.Files.Add(fileUrl, minifier.MinifyAsByteArray()); } returnValue = minifiedFile; }); return(returnValue); }
/// <summary> /// An item is being deleted /// </summary> public override void ItemDeleting(SPItemEventProperties properties) { base.ItemDeleting(properties); lock (_lock) { RunForMainFile(properties, (fileNameParser, targetFolder, mainFile, minifiedFile) => { if (minifiedFile != null) { minifiedFile.Delete(); var path = FileUtilities.RemoveStyleLibraryFromPath(mainFile.Url); var fileHashDictionary = new FileHashDictionary(properties.ListItem.Web.Site); fileHashDictionary.Remove(path); } }); } }
private void PerformCheckIn(SPItemEventProperties properties, SPFile mainFile, SPFile minifiedFile) { CheckInType checkInType = new CheckInTypeDetector(properties).Detect(); if (checkInType != CheckInType.MajorVersion) { return; } var hash = FileUtilities.GetMD5Hash(minifiedFile.OpenBinary()); var path = FileUtilities.RemoveStyleLibraryFromPath(mainFile.Url); var fileNameParser = new FileNameParser(path); minifiedFile.CheckIn("", SPCheckinType.MajorCheckIn); minifiedFile.Item[SPBuiltInFieldId.FileLeafRef] = fileNameParser.GenerateMinifiedVersionFileName(hash); minifiedFile.Item.SystemUpdate(); var fileHashDictionary = new FileHashDictionary(properties.ListItem.Web.Site); fileHashDictionary.Update(path, hash); }
/// <summary> /// Gets the final path for the specified asset based on the environment mode /// </summary> /// <returns>Final path</returns> protected string GetFinalPath() { string path = FilePath; if (EnvironmentMode == EnvironmentMode.Production) { var fileNameParser = new FileNameParser(path); if (fileNameParser.ShouldBeMinified) { var fileHashDictionary = new FileHashDictionary(SPContext.Current.Site); var fileHash = fileHashDictionary[path]; var minifiedFileName = fileNameParser.GenerateMinifiedVersionFileName(fileHash); path = String.Format("{0}/{1}", Constants.SPMinFolderName, minifiedFileName); } } path = String.Format("{0}/Style Library/{1}", SPContext.Current.Site.RootWeb.ServerRelativeUrl, path); path = FileUtilities.RemoveDuplicatedSlashesFromPath(path); return(path); }
private void RunForMainFile(SPItemEventProperties properties, Action <FileNameParser, SPFolder, SPFile, SPFile> action) { SPListItem item = properties.ListItem; if (item.Folder != null) { return; } var url = FileUtilities.RemoveStyleLibraryFromPath(item.File.Url); var fileNameParser = new FileNameParser(url); if (fileNameParser.ShouldBeMinified) { SPList styleLibrary = properties.ListItem.ParentList; SPFolder spminFolder = EnsureSPMinFolder(styleLibrary); var fileHashDictionary = new FileHashDictionary(properties.ListItem.Web.Site); var fileHash = fileHashDictionary[url]; SPFile minifiedFile = FileUtilities.GetFile(spminFolder, fileNameParser.GenerateMinifiedVersionFileName(fileHash)); action(fileNameParser, spminFolder, item.File, minifiedFile); } }
private void RunForMainFile(SPItemEventProperties properties, Action<FileNameParser, SPFolder, SPFile, SPFile> action) { SPListItem item = properties.ListItem; if (item.Folder != null) return; var url = FileUtilities.RemoveStyleLibraryFromPath(item.File.Url); var fileNameParser = new FileNameParser(url); if (fileNameParser.ShouldBeMinified) { SPList styleLibrary = properties.ListItem.ParentList; SPFolder spminFolder = EnsureSPMinFolder(styleLibrary); var fileHashDictionary = new FileHashDictionary(properties.ListItem.Web.Site); var fileHash = fileHashDictionary[url]; SPFile minifiedFile = FileUtilities.GetFile(spminFolder, fileNameParser.GenerateMinifiedVersionFileName(fileHash)); action(fileNameParser, spminFolder, item.File, minifiedFile); } }
private void PerformCheckIn(SPItemEventProperties properties, SPFile mainFile, SPFile minifiedFile) { CheckInType checkInType = new CheckInTypeDetector(properties).Detect(); if (checkInType != CheckInType.MajorVersion) return; var hash = FileUtilities.GetMD5Hash(minifiedFile.OpenBinary()); var path = FileUtilities.RemoveStyleLibraryFromPath(mainFile.Url); var fileNameParser = new FileNameParser(path); minifiedFile.CheckIn("", SPCheckinType.MajorCheckIn); minifiedFile.Item[SPBuiltInFieldId.FileLeafRef] = fileNameParser.GenerateMinifiedVersionFileName(hash); minifiedFile.Item.SystemUpdate(); var fileHashDictionary = new FileHashDictionary(properties.ListItem.Web.Site); fileHashDictionary.Update(path, hash); }
private SPFile CreateOrUpdateMinifiedFile(SPItemEventProperties properties) { SPFile returnValue = null; RunForMainFile(properties, (fileNameParser, targetFolder, mainFile, minifiedFile) => { var reader = new FileContentParser(mainFile); var content = reader.GetCompiledContent(); var minifier = new FileMinifier(fileNameParser.FileExtension, content); if (minifiedFile != null) { if (minifiedFile.CheckedOutByUser == null) minifiedFile.CheckOut(); minifiedFile.SaveBinary(minifier.MinifyAsByteArray()); } else { var fileHashDictionary = new FileHashDictionary(properties.ListItem.Web.Site); var fileHash = fileHashDictionary[fileNameParser.FilePath]; var minifiedFileName = fileNameParser.GenerateMinifiedVersionFileName(fileHash); string fileUrl = String.Format("{0}/{1}", targetFolder.Url, minifiedFileName); minifiedFile = targetFolder.Files.Add(fileUrl, minifier.MinifyAsByteArray()); } returnValue = minifiedFile; }); return returnValue; }