/// <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()); }
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; }
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); } }
IEnumerable<Addin> InternalGetInstalledAddins(string domain, AddinSearchFlagsInternal type) { return InternalGetInstalledAddins (domain, null, type); }