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));
            }
        }
Exemplo n.º 2
0
 /// <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>();
        }