public CookiecutterViewModel(ICookiecutterClient cutter, IGitHubClient githubClient, IGitClient gitClient, Redirector outputWindow, ITemplateSource installedTemplateSource, ITemplateSource feedTemplateSource, ITemplateSource gitHubTemplateSource, Action<string> openFolder) { _cutterClient = cutter; _githubClient = githubClient; _gitClient = gitClient; _outputWindow = outputWindow; _recommendedSource = feedTemplateSource; _installedSource = installedTemplateSource; _githubSource = gitHubTemplateSource; _openFolder = openFolder; Installed = new CategorizedViewModel(Strings.TemplateCategoryInstalled); Recommended = new CategorizedViewModel(Strings.TemplateCategoryRecommended); GitHub = new CategorizedViewModel(Strings.TemplateCategoryGitHub); Custom = new CategorizedViewModel(Strings.TemplateCategoryCustom); }
private async Task AddFromSource( ITemplateSource source, string searchTerm, CategorizedViewModel parent, CancellationToken ct, string continuationToken = null, VisualStudio.Imaging.Interop.ImageMoniker?updateableImage = null ) { var loading = new LoadingViewModel(); parent.Templates.Add(loading); try { var result = await source.GetTemplatesAsync(searchTerm, continuationToken, ct); foreach (var t in result.Templates) { ct.ThrowIfCancellationRequested(); var vm = new TemplateViewModel(); vm.DisplayName = t.Name; vm.Description = t.Description; vm.AvatarUrl = t.AvatarUrl; vm.OwnerUrl = t.OwnerUrl; vm.RemoteUrl = t.RemoteUrl; vm.ClonedPath = t.LocalFolderPath; vm.IsUpdateAvailable = t.UpdateAvailable == true; parent.Templates.Add(vm); } ct.ThrowIfCancellationRequested(); if (result.ContinuationToken != null) { parent.Templates.Add(new ContinuationViewModel(result.ContinuationToken)); } } catch (TemplateEnumerationException ex) { var template = new ErrorViewModel() { ErrorDescription = ex.Message, ErrorDetails = ex.InnerException?.Message, }; parent.Templates.Add(template); } finally { parent.Templates.Remove(loading); } }
public CookiecutterViewModel(ICookiecutterClient cutter, IGitHubClient githubClient, IGitClient gitClient, ICookiecutterTelemetry telemetry, Redirector outputWindow, ILocalTemplateSource installedTemplateSource, ITemplateSource feedTemplateSource, ITemplateSource gitHubTemplateSource, Action <string, string> executeCommand, IProjectSystemClient projectSystemClient) { _cutterClient = cutter; _githubClient = githubClient; _gitClient = gitClient; _telemetry = telemetry; _outputWindow = outputWindow; _recommendedSource = feedTemplateSource; _installedSource = installedTemplateSource; _githubSource = gitHubTemplateSource; _executeCommand = executeCommand; _projectSystemClient = projectSystemClient; Installed = new CategorizedViewModel(Strings.TemplateCategoryInstalled); Recommended = new CategorizedViewModel(Strings.TemplateCategoryRecommended); GitHub = new CategorizedViewModel(Strings.TemplateCategoryGitHub); Custom = new CategorizedViewModel(Strings.TemplateCategoryCustom); }
private async Task AddFromSourceAsync( ITemplateSource source, string searchTerm, CategorizedViewModel parent, bool alterSelection, CancellationToken ct, string continuationToken = null, VisualStudio.Imaging.Interop.ImageMoniker?updateableImage = null ) { var loading = new LoadingViewModel(); parent.Templates.Add(loading); if (alterSelection) { loading.IsSelected = true; } try { var result = await source.GetTemplatesAsync(searchTerm, continuationToken, ct); foreach (var t in result.Templates) { ct.ThrowIfCancellationRequested(); var vm = new TemplateViewModel(); vm.DisplayName = t.Name; vm.Description = t.Description; vm.AvatarUrl = t.AvatarUrl; vm.OwnerUrl = t.OwnerUrl; vm.RemoteUrl = t.RemoteUrl; vm.ClonedPath = t.LocalFolderPath; vm.Category = parent.DisplayName; vm.IsUpdateAvailable = t.UpdateAvailable == true; parent.Templates.Add(vm); } ct.ThrowIfCancellationRequested(); if (result.ContinuationToken != null) { var loadMore = new ContinuationViewModel(result.ContinuationToken); parent.Templates.Add(loadMore); } } catch (TemplateEnumerationException ex) { var template = new ErrorViewModel() { ErrorDescription = ex.Message, ErrorDetails = ex.InnerException?.Message, }; parent.Templates.Add(template); } finally { // Check if the loading item is still selected before we remove it, the user // may have selected something else while we were loading results. bool loadingStillSelected = loading.IsSelected; parent.Templates.Remove(loading); if (alterSelection && loadingStillSelected) { // Loading was still selected, so select something else. var newLast = parent.Templates.LastOrDefault() as TreeItemViewModel; if (newLast != null) { newLast.IsSelected = true; } } } }
private async Task AddFromSource( ITemplateSource source, string searchTerm, CategorizedViewModel parent, CancellationToken ct, string continuationToken = null, VisualStudio.Imaging.Interop.ImageMoniker? updateableImage = null ) { var loading = new LoadingViewModel(); parent.Templates.Add(loading); try { var result = await source.GetTemplatesAsync(searchTerm, continuationToken, ct); foreach (var t in result.Templates) { ct.ThrowIfCancellationRequested(); var vm = new TemplateViewModel(); vm.DisplayName = t.Name; vm.Description = t.Description; vm.AvatarUrl = t.AvatarUrl; vm.OwnerUrl = t.OwnerUrl; vm.RemoteUrl = t.RemoteUrl; vm.ClonedPath = t.LocalFolderPath; vm.IsUpdateAvailable = t.UpdateAvailable == true; parent.Templates.Add(vm); } ct.ThrowIfCancellationRequested(); if (result.ContinuationToken != null) { parent.Templates.Add(new ContinuationViewModel(result.ContinuationToken)); } } catch (TemplateEnumerationException ex) { var template = new ErrorViewModel() { ErrorDescription = ex.Message, ErrorDetails = ex.InnerException?.Message, }; parent.Templates.Add(template); } finally { parent.Templates.Remove(loading); } }
public CookiecutterViewModel(ICookiecutterClient cutter, IGitHubClient githubClient, IGitClient gitClient, ICookiecutterTelemetry telemetry, Redirector outputWindow, ILocalTemplateSource installedTemplateSource, ITemplateSource feedTemplateSource, ITemplateSource gitHubTemplateSource, Action<string> openFolder, IProjectSystemClient projectSystemClient) { _cutterClient = cutter; _githubClient = githubClient; _gitClient = gitClient; _telemetry = telemetry; _outputWindow = outputWindow; _recommendedSource = feedTemplateSource; _installedSource = installedTemplateSource; _githubSource = gitHubTemplateSource; _openFolder = openFolder; _projectSystemClient = projectSystemClient; Installed = new CategorizedViewModel(Strings.TemplateCategoryInstalled); Recommended = new CategorizedViewModel(Strings.TemplateCategoryRecommended); GitHub = new CategorizedViewModel(Strings.TemplateCategoryGitHub); Custom = new CategorizedViewModel(Strings.TemplateCategoryCustom); }