private async Task GenerateAsync(BundleDocument bundle, string extension, bool hasUpdated = false) { _dte.StatusBar.Text = "Generating bundle..."; if (ProjectHelpers.GetProjectItem(bundle.FileName) == null) { ProjectHelpers.AddFileToActiveProject(bundle.FileName); } string bundleFile = Path.Combine(Path.GetDirectoryName(bundle.FileName), Path.GetFileNameWithoutExtension(bundle.FileName)); if (!string.IsNullOrEmpty(bundle.OutputDirectory)) { bundleFile = ProjectHelpers.GetAbsolutePathFromSettings(bundle.OutputDirectory, Path.Combine(Path.GetDirectoryName(bundle.FileName), Path.GetFileNameWithoutExtension(bundle.FileName))); } ProjectHelpers.CreateDirectoryInProject(bundleFile); bool hasChanged = await BundleGenerator.MakeBundle(bundle, bundleFile, UpdateBundleAsync); ProjectHelpers.AddFileToProject(bundle.FileName, bundleFile); if (!hasUpdated) { WebEssentialsPackage.DTE.ItemOperations.OpenFile(bundle.FileName); } if (bundle.Minified) { await BundleGenerator.MakeMinFile(bundleFile, extension, hasChanged); } _dte.StatusBar.Text = "Bundle generated"; }
public static async Task UpdateAllBundlesAsync(bool isBuild = false) { foreach (Project project in ProjectHelpers.GetAllProjects()) { if (project.ProjectItems.Count == 0) { continue; } string folder = ProjectHelpers.GetRootFolder(project); if (string.IsNullOrEmpty(folder)) { continue; } BundleFilesMenu menu = new BundleFilesMenu(); foreach (string file in Directory.EnumerateFiles(folder, "*" + _ext, SearchOption.AllDirectories)) { if (ProjectHelpers.GetProjectItem(file) == null) { continue; } await menu.UpdateBundleAsync(file, isBuild); } } }
private async void SolutionEvents_Opened() { foreach (Project project in ProjectHelpers.GetAllProjects()) { if (project.ProjectItems.Count == 0) { continue; } string folder = ProjectHelpers.GetRootFolder(project); Func <string, bool, Task> bundleFunc = new BundleFilesMenu().UpdateBundleAsync; Func <string, bool, Task> spriteFunc = new SpriteImageMenu().UpdateSpriteAsync; foreach (string file in Directory.EnumerateFiles(folder, "*.*", SearchOption.AllDirectories) .Where(s => s.EndsWith(".bundle") || s.EndsWith(".sprite"))) { if (ProjectHelpers.GetProjectItem(file) == null) { continue; } if (file.EndsWith(".bundle", StringComparison.OrdinalIgnoreCase)) { await BundleGenerator.WatchFiles(await BundleDocument.FromFile(file), bundleFunc); } else { await SpriteGenerator.WatchFiles(await SpriteDocument.FromFile(file), spriteFunc); } } } }
///<summary>Converts a relative URL to an absolute path on disk, as resolved from the specified file.</summary> public static string ToAbsoluteFilePath(string relativeUrl, string relativeToFile) { var file = ProjectHelpers.GetProjectItem(relativeToFile); if (file == null || file.Properties == null) { return(ToAbsoluteFilePath(relativeUrl, GetRootFolder(), Path.GetDirectoryName(relativeToFile))); } return(ToAbsoluteFilePath(relativeUrl, file)); }
///<summary>Gets the Project containing the specified file.</summary> public static Project GetProject(string item) { var projectItem = ProjectHelpers.GetProjectItem(item); if (projectItem == null) { return(null); } return(projectItem.ContainingProject); }
public static Task RunOnAllFilesInProjectAsync(IEnumerable <string> extensionsPattern, Func <string, LintReporter> runnerFactory) { string dir = ProjectHelpers.GetRootFolder(); if (dir == null || !Directory.Exists(dir)) { return(Task.FromResult(true)); } return(Task.WhenAll( extensionsPattern.SelectMany(x => Directory.EnumerateFiles(dir, x, SearchOption.AllDirectories)) .Where(f => ProjectHelpers.GetProjectItem(f) != null) .Select(f => runnerFactory(f).RunLinterAsync().HandleErrors("linting " + f)))); }
///<summary>Gets the directory containing the project for the specified file.</summary> public static string GetProjectFolder(string fileNameOrFolder) { if (string.IsNullOrEmpty(fileNameOrFolder)) { return(GetRootFolder()); } ProjectItem item = ProjectHelpers.GetProjectItem(fileNameOrFolder); string projectFolder = null; if (item != null) { projectFolder = GetProjectFolder(item); } return(projectFolder); }
private static Task <bool> Process(string filePath) { if (!File.Exists(filePath + Ext.JavaScript) && !File.Exists(filePath + Ext.TypeScript)) { return(Task.FromResult(false)); } return(Dispatcher.CurrentDispatcher.InvokeAsync(new Func <bool>(() => { var item = ProjectHelpers.GetProjectItem(filePath); if (item == null) { return false; } List <IntellisenseObject> list = null; try { list = ProcessFile(item); } catch (Exception ex) { Logger.Log("An error occurred while processing code in " + filePath + "\n" + ex + "\n\nPlease report this bug at https://github.com/madskristensen/WebEssentials2013/issues, and include the source of the file."); } if (list == null) { return false; } AddScript(filePath, Ext.JavaScript, list); AddScript(filePath, Ext.TypeScript, list); return true; }), DispatcherPriority.ApplicationIdle).Task); }
public static ProjectItem AddFileToProject(string parentFileName, string fileName) { if (Path.GetFullPath(parentFileName) == Path.GetFullPath(fileName) || !File.Exists(fileName)) { return(null); } fileName = Path.GetFullPath(fileName); // WAP projects don't like paths with forward slashes var item = ProjectHelpers.GetProjectItem(parentFileName); if (item == null || item.ContainingProject == null || string.IsNullOrEmpty(item.ContainingProject.FullName)) { return(null); } if (item.ContainingProject.GetType().Name == "OAProject" && item.ProjectItems != null) { // WinJS var currentItem = ProjectHelpers.GetProjectItem(fileName); // check if the file already added ( adding second time fails with ADDRESULT_Cancel ) if (currentItem != null && currentItem.Kind != Guid.Empty.ToString("B")) { return(currentItem); } item = ProjectHelpers.GetProjectItem(fileName); if (item == null) { return(null); } ProjectItem addedItem = null; try { addedItem = item.ProjectItems.AddFromFile(fileName); } catch (COMException) { } if (addedItem != null && Path.GetDirectoryName(parentFileName) == Path.GetDirectoryName(fileName)) { // create nesting var dependentUponProperty = addedItem.Properties.Item("DependentUpon"); dependentUponProperty.Value = Path.GetFileName(parentFileName); } return(addedItem); } else if (item.ContainingProject.GetType().Name != "OAProject" && item.ProjectItems != null && Path.GetDirectoryName(parentFileName) == Path.GetDirectoryName(fileName)) { // WAP try { return(item.ProjectItems.AddFromFile(fileName)); } catch (COMException) { } } else if (Path.GetFullPath(fileName).StartsWith(GetRootFolder(item.ContainingProject), StringComparison.OrdinalIgnoreCase)) { // Website try { return(item.ContainingProject.ProjectItems.AddFromFile(fileName)); } catch (COMException) { } } return(null); }