Пример #1
0
        /// <summary>
        /// Gets all add-ins or add-in roots registered in the registry.
        /// </summary>
        /// <returns>
        /// The addins.
        /// </returns>
        /// <param name='flags'>
        /// Flags.
        /// </param>
        public Addin[] GetModules(AddinSearchFlags flags)
        {
            if (currentDomain == AddinDatabase.UnknownDomain)
            {
                return(new Addin [0]);
            }
            AddinSearchFlagsInternal f = (AddinSearchFlagsInternal)(int)flags;

            return(database.GetInstalledAddins(currentDomain, f | AddinSearchFlagsInternal.ExcludePendingUninstall).ToArray());
        }
Пример #2
0
        public IEnumerable<Addin> GetInstalledAddins(string domain, AddinSearchFlagsInternal flags)
        {
            if (domain == null)
                domain = registry.CurrentDomain;

            // Get the cached list if the add-in list has already been loaded.
            // The domain doesn't have to be checked again, since it is always the same

            IEnumerable<Addin> result = null;

            if ((flags & AddinSearchFlagsInternal.IncludeAll) == AddinSearchFlagsInternal.IncludeAll) {
                if (allSetupInfos != null)
                    result = allSetupInfos;
            }
            else if ((flags & AddinSearchFlagsInternal.IncludeAddins) == AddinSearchFlagsInternal.IncludeAddins) {
                if (addinSetupInfos != null)
                    result = addinSetupInfos;
            }
            else {
                if (rootSetupInfos != null)
                    result = rootSetupInfos;
            }

            if (result == null) {
                InternalCheck (domain);
                using (fileDatabase.LockRead ()) {
                    result = InternalGetInstalledAddins (domain, null, flags & ~AddinSearchFlagsInternal.LatestVersionsOnly);
                }
            }

            if ((flags & AddinSearchFlagsInternal.LatestVersionsOnly) == AddinSearchFlagsInternal.LatestVersionsOnly)
                result = result.Where (a => a.IsLatestVersion);

            if ((flags & AddinSearchFlagsInternal.ExcludePendingUninstall) == AddinSearchFlagsInternal.ExcludePendingUninstall)
                result = result.Where (a => !IsRegisteredForUninstall (a.Description.Domain, a.Id));

            return result;
        }
Пример #3
0
        IEnumerable<Addin> InternalGetInstalledAddins(string domain, string idFilter, AddinSearchFlagsInternal type)
        {
            if ((type & AddinSearchFlagsInternal.LatestVersionsOnly) != 0)
                throw new InvalidOperationException ("LatestVersionsOnly flag not supported here");

            if (allSetupInfos == null) {
                Dictionary<string,Addin> adict = new Dictionary<string, Addin> ();

                // Global add-ins are valid for any private domain
                if (domain != AddinDatabase.GlobalDomain)
                    FindInstalledAddins (adict, AddinDatabase.GlobalDomain, idFilter);

                FindInstalledAddins (adict, domain, idFilter);
                List<Addin> alist = new List<Addin> (adict.Values);
                UpdateLastVersionFlags (alist);
                if (idFilter != null)
                    return alist;
                allSetupInfos = alist;
            }
            if ((type & AddinSearchFlagsInternal.IncludeAll) == AddinSearchFlagsInternal.IncludeAll)
                return FilterById (allSetupInfos, idFilter);

            if ((type & AddinSearchFlagsInternal.IncludeAddins) == AddinSearchFlagsInternal.IncludeAddins) {
                if (addinSetupInfos == null) {
                    addinSetupInfos = new List<Addin> ();
                    foreach (Addin adn in allSetupInfos)
                        if (!adn.Description.IsRoot)
                            addinSetupInfos.Add (adn);
                }
                return FilterById (addinSetupInfos, idFilter);
            }
            else {
                if (rootSetupInfos == null) {
                    rootSetupInfos = new List<Addin> ();
                    foreach (Addin adn in allSetupInfos)
                        if (adn.Description.IsRoot)
                            rootSetupInfos.Add (adn);
                }
                return FilterById (rootSetupInfos, idFilter);
            }
        }
Пример #4
0
 IEnumerable<Addin> InternalGetInstalledAddins(string domain, AddinSearchFlagsInternal type)
 {
     return InternalGetInstalledAddins (domain, null, type);
 }