private async void ExecuteAsync(object sender, EventArgs e)
{
await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
var item = _dte.SelectedItems.Item(1);
Helpers.DteHelpers.GetSelectionData(_dte, out var targetFile, out var projectFolderPath, out var projectFullName);
var targetFolder = Path.GetDirectoryName(targetFile);
if (string.IsNullOrEmpty(targetFolder) || !Directory.Exists(targetFolder))
return;
var selectedItem = item as ProjectItem;
var selectedProject = item as Project;
var project = selectedItem?.ContainingProject ?? selectedProject ?? DteHelpers.GetActiveProject(_dte);
var root = Directory.GetParent(AureliaHelper.RootFolder).FullName.Replace(@"\", @"\\"); //escape for pregex
var relativePath = Regex.Replace(targetFolder, root, "", RegexOptions.IgnoreCase).Substring(1); // remove starting slash
var fileNameDialog = new FileNameDialog(relativePath)
{
Title = "Generate Attribute",
IsGlobal = true,
PreviewText = "Please enter the name of the attribute you would like to create. eg. RedBox"
};
fileNameDialog.GlobalChecked(targetFolder.ToLower() == AureliaHelper.GetResouceDirectory.ToLower() || targetFolder.ToLower() == AureliaHelper.GetAttributesDirectory.ToLower() || targetFile.ToLower().Equals(AureliaHelper.ResourceGlobalFile.ToLower()));
var dialog = _dte.OpenDialog(fileNameDialog);
if (!(dialog.ShowDialog() ?? false)) { return; }
var elementName = dialog.Input;
var templates = Template.GetTemplateFilesByType("attribute").ToList();
targetFolder = dialog.IsGlobal ? AureliaHelper.GetAttributesDirectory : targetFolder;
var filesToOpen = await Task.WhenAll(templates.Select(templateName => Template.GenerateTemplatesAsync(templateName, targetFolder, dialog.Input, dialog.IsGlobal)));
filesToOpen.ToList().ForEach(fullFileName => VsShellUtilities.OpenDocument(package, fullFileName));
}
}