using System; using System.Collections; using System.ComponentModel; using System.Configuration; namespace ScreenConnect; public class ApplicationSettingsBaseEx : ApplicationSettingsBase { private class SettingsProviderService : ISettingsProviderService, IComponent, IDisposable, ISite, IServiceProvider { private SettingsProvider settingsProvider; public IComponent Component => this; public IContainer Container => null; public bool DesignMode => false; public string Name { get { return "SettingsProviderService"; } set { throw new NotSupportedException(); } } public ISite Site { get { return this; } set { throw new NotSupportedException(); } } public event EventHandler Disposed { add { throw new NotSupportedException(); } remove { throw new NotSupportedException(); } } public SettingsProviderService(SettingsProvider settingsProvider) { this.settingsProvider = settingsProvider; } public void Dispose() { } public object GetService(Type serviceType) { return this; } public SettingsProvider GetSettingsProvider(SettingsProperty property) { return settingsProvider; } } private bool inUpdate; private bool didSettingChange; public ApplicationSettingsBaseEx() { } public ApplicationSettingsBaseEx(SettingsProvider provider) : base((IComponent)new SettingsProviderService(provider)) { } protected override void OnSettingChanging(object sender, SettingChangingEventArgs e) { ((ApplicationSettingsBase)this).OnSettingChanging(sender, e); object objB = ((SettingsBase)this)[e.SettingName]; didSettingChange |= !object.Equals(e.NewValue, objB); } protected override void OnPropertyChanged(object sender, PropertyChangedEventArgs e) { ((ApplicationSettingsBase)this).OnPropertyChanged(sender, e); if (didSettingChange && !inUpdate) { ((SettingsBase)this).Save(); } } public ApplicationSettingsBaseEx RecreateWithProvider(SettingsProvider provider) { ApplicationSettingsBaseEx applicationSettingsBaseEx = (ApplicationSettingsBaseEx)Activator.CreateInstance(((object)this).GetType(), provider).AssertNonNull(); foreach (SettingsProperty item in ((ICollection)((SettingsBase)this).Properties).Cast().WhereNotNull()) { object obj = ((SettingsBase)this)[item.Name]; if (!((SettingsBase)this).PropertyValues[item.Name].UsingDefaultValue) { ((SettingsBase)applicationSettingsBaseEx)[item.Name] = obj; } } return applicationSettingsBaseEx; } public void BeginUpdate() { didSettingChange = false; inUpdate = true; } public void EndUpdate() { inUpdate = false; if (didSettingChange) { ((SettingsBase)this).Save(); } } }