public void InstallExtensions(List <ExtensionInformation> extensions) { if (extensions == null || extensions.Count == 0) { return; } try { foreach (var extension in extensions) { var query = ExtensionRepository.CreateQuery <VSGalleryEntry>(false, true) .OrderByDescending(v => v.Ranking) .Skip(0) .Take(25) as IVsExtensionRepositoryQuery <VSGalleryEntry>; if (query == null) { continue; } query.ExecuteCompleted += QueryExecuteCompleted; query.SearchText = extension.Name; query.ExecuteAsync(extension); } } catch (Exception exception) { LogMessage(string.Format("Error while installing extensions: {0}", exception.Message)); } }
/// <summary> /// Initializes a new instance of the <see cref="ExtensionService"/> class. /// </summary> /// <param name="extensionRepository">The extension repository.</param> public ExtensionService(ExtensionRepository extensionRepository) : base(extensionRepository) { }
private void QueryExecuteCompleted(object sender, ExecuteCompletedEventArgs e) { try { if (e.Error != null) { LogMessage(string.Format("Error while searching online for extension: {0}", e.Error.Message)); return; } var extensionInformation = (ExtensionInformation)e.UserState; var extensionName = extensionInformation.Name; var entry = e.Results.Cast <VSGalleryEntry>().SingleOrDefault(r => r.Name == extensionInformation.Name && r.VsixID == extensionInformation.Identifier); if (entry == null) { LogMessage(string.Format("Could not find {0} in Online Repository", extensionName)); return; } var installedExtensions = GetInstalledExtensionsInformation(); var installedExtension = installedExtensions.FirstOrDefault(ext => ext.Name == extensionName && ext.Identifier == extensionInformation.Identifier); if (AutoUpdateExtensions) { if (installedExtension != null && installedExtension.Version.ToString() == entry.VsixVersion) { return; } } try { var installableExtension = ExtensionRepository.Download(entry); if (installableExtension == null) { return; } if (installedExtension != null) { if (installedExtension.Version >= installableExtension.Header.Version) { return; } //extension needs to be updated - uninstall and install again LogMessage(string.Format("{0} has an update available.", extensionName)); UnInstallExtensions(new List <ExtensionInformation> { installedExtension }, DateTime.Now); } ExtensionManager.Install(installableExtension, false); LogMessage(string.Format("Installed {0}", extensionName)); } catch (Exception exception) { LogMessage(string.Format("Error while installing {0}: {1}", extensionName, exception.Message)); } } catch (Exception exception) { LogMessage(string.Format("Error while installing extensions: {0}", exception.Message)); } }
/// <summary> /// Initializes a new instance of the <see cref="ServiceHubInitializer"/> class. /// </summary> public ServiceHubInitializer() { ExtensionRepositoryLoader.Instance.Load(); _extensionRepository = ExtensionRepositoryLoader.Instance.GetInnerRepository <ExtensionRepository>(); }