|
|
@@ -1,7 +1,9 @@
|
|
|
using InABox.Configuration;
|
|
|
using InABox.Core;
|
|
|
+using NPOI.OpenXmlFormats.Dml;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
+using System.Diagnostics.CodeAnalysis;
|
|
|
using System.Linq;
|
|
|
using System.Text;
|
|
|
using System.Threading.Tasks;
|
|
|
@@ -33,45 +35,64 @@ public class GlobalSettingsStore : Store<GlobalSettings>
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+ private bool TryGetSubStore(GlobalSettings entity, [NotNullWhen(true)] out ISettingsStoreEventHandler? subStore, [NotNullWhen(true)] out BaseObject? TSettings)
|
|
|
+ {
|
|
|
+ if(_subStores.TryGetValue(entity.Section, out var subStoreTuple))
|
|
|
+ {
|
|
|
+ subStore = (Activator.CreateInstance(subStoreTuple.Item2) as ISettingsStoreEventHandler)!;
|
|
|
+ subStore.Parent = this;
|
|
|
+ TSettings = GetSettings(entity, subStoreTuple.Item1);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ subStore = null;
|
|
|
+ TSettings = null;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
protected override void BeforeSave(GlobalSettings entity)
|
|
|
{
|
|
|
base.BeforeSave(entity);
|
|
|
- if(_subStores.TryGetValue(entity.Section, out var subStore))
|
|
|
+ if(TryGetSubStore(entity, out var subStore, out var settings))
|
|
|
{
|
|
|
- (Activator.CreateInstance(subStore.Item2) as ISettingsStoreEventHandler)!.BeforeSave(GetSettings(entity, subStore.Item1));
|
|
|
+ subStore.BeforeSave(settings);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
protected override void AfterSave(GlobalSettings entity)
|
|
|
{
|
|
|
base.AfterSave(entity);
|
|
|
- if(_subStores.TryGetValue(entity.Section, out var subStore))
|
|
|
+ if(TryGetSubStore(entity, out var subStore, out var settings))
|
|
|
{
|
|
|
- (Activator.CreateInstance(subStore.Item2) as ISettingsStoreEventHandler)!.AfterSave(GetSettings(entity, subStore.Item1));
|
|
|
+ subStore.AfterSave(settings);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
protected override void BeforeDelete(GlobalSettings entity)
|
|
|
{
|
|
|
base.BeforeDelete(entity);
|
|
|
- if(_subStores.TryGetValue(entity.Section, out var subStore))
|
|
|
+ if(TryGetSubStore(entity, out var subStore, out var settings))
|
|
|
{
|
|
|
- (Activator.CreateInstance(subStore.Item2) as ISettingsStoreEventHandler)!.BeforeDelete(GetSettings(entity, subStore.Item1));
|
|
|
+ subStore.BeforeDelete(settings);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
protected override void AfterDelete(GlobalSettings entity)
|
|
|
{
|
|
|
base.AfterDelete(entity);
|
|
|
- if(_subStores.TryGetValue(entity.Section, out var subStore))
|
|
|
+ if(TryGetSubStore(entity, out var subStore, out var settings))
|
|
|
{
|
|
|
- (Activator.CreateInstance(subStore.Item2) as ISettingsStoreEventHandler)!.AfterDelete(GetSettings(entity, subStore.Item1));
|
|
|
+ subStore.AfterDelete(settings);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public interface ISettingsStoreEventHandler
|
|
|
{
|
|
|
+ IStore Parent { set; }
|
|
|
+
|
|
|
void BeforeSave(BaseObject entity);
|
|
|
void AfterSave(BaseObject entity);
|
|
|
void BeforeDelete(BaseObject entity);
|