| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 | using InABox.Configuration;using InABox.Core;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace InABox.Database.Stores;public class GlobalSettingsStore : Store<GlobalSettings>{    private static Dictionary<string, Tuple<Type, Type>> _subStores = new();    public static void RegisterSubStore<TSettings, TStore>()        where TSettings : BaseObject, IGlobalConfigurationSettings, new()        where TStore : ISettingsStoreEventHandler<TSettings>    {        _subStores[typeof(TSettings).Name] = new(typeof(TSettings), typeof(TStore));    }    private BaseObject GetSettings(GlobalSettings settings, Type TSettings)    {        var result = Serialization.Deserialize(TSettings, settings.Contents) as BaseObject;        if(result is not null)        {            result.CommitChanges();        }        else        {            result = (Activator.CreateInstance(TSettings) as BaseObject)!;        }        return result;    }    protected override void BeforeSave(GlobalSettings entity)    {        base.BeforeSave(entity);        if(_subStores.TryGetValue(entity.Section, out var subStore))        {            (Activator.CreateInstance(subStore.Item2) as ISettingsStoreEventHandler)!.BeforeSave(GetSettings(entity, subStore.Item1));        }    }    protected override void AfterSave(GlobalSettings entity)    {        base.AfterSave(entity);        if(_subStores.TryGetValue(entity.Section, out var subStore))        {            (Activator.CreateInstance(subStore.Item2) as ISettingsStoreEventHandler)!.AfterSave(GetSettings(entity, subStore.Item1));        }    }    protected override void BeforeDelete(GlobalSettings entity)    {        base.BeforeDelete(entity);        if(_subStores.TryGetValue(entity.Section, out var subStore))        {            (Activator.CreateInstance(subStore.Item2) as ISettingsStoreEventHandler)!.BeforeDelete(GetSettings(entity, subStore.Item1));        }    }    protected override void AfterDelete(GlobalSettings entity)    {        base.AfterDelete(entity);        if(_subStores.TryGetValue(entity.Section, out var subStore))        {            (Activator.CreateInstance(subStore.Item2) as ISettingsStoreEventHandler)!.AfterDelete(GetSettings(entity, subStore.Item1));        }    }}public interface ISettingsStoreEventHandler{    void BeforeSave(BaseObject entity);    void AfterSave(BaseObject entity);    void BeforeDelete(BaseObject entity);    void AfterDelete(BaseObject entity);}public interface ISettingsStoreEventHandler<T> : ISettingsStoreEventHandler    where T : BaseObject{    void BeforeSave(T entity);    void AfterSave(T entity);    void BeforeDelete(T entity);    void AfterDelete(T entity);    void ISettingsStoreEventHandler.BeforeSave(BaseObject entity) => BeforeSave((T)entity);    void ISettingsStoreEventHandler.AfterSave(BaseObject entity) => AfterSave((T)entity);    void ISettingsStoreEventHandler.BeforeDelete(BaseObject entity) => BeforeDelete((T)entity);    void ISettingsStoreEventHandler.AfterDelete(BaseObject entity) => AfterDelete((T)entity);}
 |