/// <summary> /// Merges the passed in GroupedRemoteSettings from buckets into this instance. /// Identical settings in this instance will be overwritten by those in buckets. /// </summary> /// <param name="buckets"></param> /// <param name="logger"></param> public void Merge(GroupedRemoteSettings buckets, IRemoteSettingsLogger logger) { foreach (string key in buckets.Keys) { RemoteSettingPossibilities remoteSettingPossibilities = buckets[key]; if (!TryGetValue(key, out RemoteSettingPossibilities value)) { value = (base[key] = new RemoteSettingPossibilities()); } foreach (string key2 in remoteSettingPossibilities.Keys) { List <RemoteSetting> list = remoteSettingPossibilities[key2]; if (!value.TryGetValue(key2, out List <RemoteSetting> value2)) { value2 = (value[key2] = new List <RemoteSetting>()); } for (int num = list.Count - 1; num >= 0; num--) { RemoteSetting remoteSetting = list[num]; int num2 = value2.FindIndex((RemoteSetting s) => s.Name == remoteSetting.Name && s.ScopeString == remoteSetting.ScopeString); if (num2 != -1) { logger.LogVerbose($"Overwriting RemoteSetting during merge: Old value from {value2[num2]}"); logger.LogVerbose($"Overwriting RemoteSetting during merge: New value from {remoteSetting}"); value2[num2] = remoteSetting; } else { value2.Insert(0, remoteSetting); } } } } }
public DirectoryReader(string rootPath, string directoryName, bool markProcessed, int priority, IRemoteSettingsLogger logger) { path = Path.Combine(rootPath, directoryName); this.directoryName = directoryName; this.markProcessed = markProcessed; Priority = priority; this.logger = logger; }
public RemoteSettingsStorageHandler(ICollectionKeyValueStorage storage, string collectionPathPrefix, IScopeParserFactory scopeParserFactory, bool isVersioned, IRemoteSettingsLogger logger) { CodeContract.RequiresArgumentNotNull <ICollectionKeyValueStorage>(storage, "storage"); CodeContract.RequiresArgumentNotNull <string>(collectionPathPrefix, "collectionPathPrefix"); CodeContract.RequiresArgumentNotNull <IScopeParserFactory>(scopeParserFactory, "scopeParserFactory"); remoteSettingsStorage = storage; CollectionPathPrefix = collectionPathPrefix; this.isVersioned = isVersioned; this.scopeParserFactory = scopeParserFactory; this.logger = logger; }
/// <summary> /// Construct a new Remote Setting instance with values taken from the initializer. /// </summary> /// <param name="initializer">Values with which to initialize</param> public RemoteSettings(RemoteSettingsInitializer initializer) { initializer.FillWithDefaults(); scopeParserFactory = initializer.ScopeParserFactory; nonScopedStorageHandler = initializer.NonScopedRemoteSettingsStorageHandler; foreach (IScopeFilterProvider scopeFilterProvider in initializer.ScopeFilterProviders) { RegisterFilterProvider(scopeFilterProvider); } remoteSettingsProviders = initializer.RemoteSettingsProviders.Select((Func <RemoteSettingsInitializer, IRemoteSettingsProvider> x) => x(initializer)).ToList(); stableRemoteSettingProvider = initializer.StableRemoteSettingsProvider(initializer); isUpdateDisabled = initializer.IsUpdatedDisabled; logger = initializer.RemoteSettingsLogger; }
internal RemoteSettingsInitializer FillWithDefaults() { //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Expected O, but got Unknown if (!UsePathPrefix.HasValue) { UsePathPrefix = true; } if (RemoteSettingsFileName == null) { RemoteSettingsFileName = "Default.json"; } if (KeyValueStorage == null) { KeyValueStorage = new DefaultRegistryKeyValueStorage((IRegistryTools3)(object)new RegistryTools()); } if (FilterProvider == null) { FilterProvider = new DefaultRemoteSettingsFilterProvider(TelemetryService.DefaultSession); } if (RemoteSettingsLogger == null) { RemoteSettingsLogger = new RemoteSettingsLogger(FilterProvider, RemoteSettingsStorageHandlerFactory.BuildIsLoggingEnabled(KeyValueStorage, UsePathPrefix.HasValue && UsePathPrefix.Value)()); } if (ScopeParserFactory == null) { ScopeParserFactory = new ScopeParserFactory(this); } RemoteSettingsStorageHandlerFactory remoteSettingsStorageHandlerFactory = new RemoteSettingsStorageHandlerFactory(RemoteSettingsLogger); if (VersionedRemoteSettingsStorageHandler == null) { VersionedRemoteSettingsStorageHandler = remoteSettingsStorageHandlerFactory.BuildVersioned(KeyValueStorage, UsePathPrefix.HasValue && UsePathPrefix.Value, RemoteSettingsFileName, ScopeParserFactory); } if (CacheableRemoteSettingsStorageHandler == null) { CacheableRemoteSettingsStorageHandler = remoteSettingsStorageHandlerFactory.Build(KeyValueStorage, UsePathPrefix.HasValue && UsePathPrefix.Value, FilterProvider, ScopeParserFactory); } if (LocalTestRemoteSettingsStorageHandler == null) { LocalTestRemoteSettingsStorageHandler = remoteSettingsStorageHandlerFactory.Build(KeyValueStorage, UsePathPrefix.HasValue && UsePathPrefix.Value, "LocalTest", ScopeParserFactory); } if (LiveRemoteSettingsStorageHandlerFactory == null) { LiveRemoteSettingsStorageHandlerFactory = (() => remoteSettingsStorageHandlerFactory.Build(new MemoryKeyValueStorage(), false, string.Empty, ScopeParserFactory)); } if (NonScopedRemoteSettingsStorageHandler == null && NonScopedSettingsKeyValueStorage != null) { NonScopedRemoteSettingsStorageHandler = remoteSettingsStorageHandlerFactory.Build(NonScopedSettingsKeyValueStorage, false, string.Empty, ScopeParserFactory); } if (IsUpdatedDisabled == null) { IsUpdatedDisabled = RemoteSettingsStorageHandlerFactory.BuildIsUpdateDisabled(KeyValueStorage, UsePathPrefix.HasValue && UsePathPrefix.Value); } if (RemoteFileReaderFactory == null) { RemoteFileReaderFactory = new RemoteSettingsRemoteFileReaderFactory(RemoteSettingsFileName); } if (RemoteSettingsValidator == null) { RemoteSettingsValidator = new RemoteSettingsValidator(new CycleDetection(), VersionedRemoteSettingsStorageHandler); } if (RemoteSettingsParser == null) { RemoteSettingsParser = new RemoteSettingsParser(RemoteSettingsValidator); } if (TargetedNotificationsParser == null) { TargetedNotificationsParser = new TargetedNotificationsParser(); } if (ExperimentationService == null) { ExperimentationService = Coding4Fun.VisualStudio.Experimentation.ExperimentationService.Default; } if (ExperimentationService == null) { ExperimentationService = Coding4Fun.VisualStudio.Experimentation.ExperimentationService.Default; } if (TelemetryNotificationService == null) { TelemetryNotificationService = Coding4Fun.VisualStudio.Telemetry.Notification.TelemetryNotificationService.Default; } if (Telemetry == null) { Telemetry = new DefaultRemoteSettingsTelemetry(TelemetryService.DefaultSession); } if (TargetedNotificationsTelemetry == null) { TargetedNotificationsTelemetry = new DefaultTargetedNotificationsTelemetry(TelemetryService.DefaultSession); } if (TargetedNotificationsCacheStorage == null) { TargetedNotificationsCacheStorage = new TargetedNotificationsJsonStorageProvider(this); } if (HttpWebRequestFactory == null) { HttpWebRequestFactory = new HttpWebRequestFactory(); } if (ScopeFilterProviders == null) { new ProcessInformationProvider(); ScopeFilterProviders = new List <IScopeFilterProvider> { new FlightScopeFilterProvider(ExperimentationService), new InternalScopeFilterProvider(TelemetryService.DefaultSession), new VersionScopeFilterProvider(FilterProvider), new ExeNameScopeFilterProvider(FilterProvider), new ScopeScopeFilterProvider(VersionedRemoteSettingsStorageHandler, ScopeParserFactory) }; } if (RemoteSettingsProviders == null) { RemoteSettingsProviders = new List <Func <RemoteSettingsInitializer, IRemoteSettingsProvider> > { (RemoteSettingsInitializer remoteSettingsInitializer) => new LocalTestProvider(remoteSettingsInitializer), (RemoteSettingsInitializer remoteSettingsInitializer) => new TargetedNotificationsProvider(remoteSettingsInitializer), (RemoteSettingsInitializer remoteSettingsInitializer) => new RemoteControlRemoteSettingsProvider(remoteSettingsInitializer) }; } if (LocalTestDirectories == null) { string rootPath = Path.Combine(GetLocalAppDataRoot(), "LocalTest"); LocalTestDirectories = new List <IDirectoryReader> { new DirectoryReader(rootPath, "PersistentActions", false, 0, RemoteSettingsLogger), new DirectoryReader(rootPath, "OneTimeActions", true, 10, RemoteSettingsLogger) }; } if (LocalTestParser == null) { LocalTestParser = new LocalTestParser(); } if (StableRemoteSettingsProvider == null) { StableRemoteSettingsProvider = ((RemoteSettingsInitializer remoteSettingsInitializer) => new StableRemoteSettingsProvider(remoteSettingsInitializer)); } if (StableSettingRootSubCollections == null) { StableSettingRootSubCollections = Enumerable.Empty <string>(); } return(this); }
public RemoteSettingsProviderBase(IRemoteSettingsStorageHandler remoteSettingsStorageHandler, IRemoteSettingsLogger logger = null) { currentStorageHandler = remoteSettingsStorageHandler; this.logger = logger; }
public ScopeParserFactory(RemoteSettingsInitializer initializer) { logger = initializer.RemoteSettingsLogger; }
public RemoteSettingsStorageHandlerFactory(IRemoteSettingsLogger logger) { this.logger = logger; }