55 lines
1.8 KiB
C#
55 lines
1.8 KiB
C#
|
using LootDumpProcessor.Storage.Implementations.Serializers;
|
|||
|
|
|||
|
namespace LootDumpProcessor.Storage.Implementations.Handlers;
|
|||
|
|
|||
|
public abstract class AbstractStoreHandler : IStoreHandler
|
|||
|
{
|
|||
|
protected readonly IDataStorageFileSerializer _serializer;
|
|||
|
|
|||
|
public AbstractStoreHandler()
|
|||
|
{
|
|||
|
_serializer = DataStorageFileSerializerFactory.GetInstance();
|
|||
|
}
|
|||
|
|
|||
|
public void Store<T>(T obj, bool failIfDuplicate = true) where T : IKeyable
|
|||
|
{
|
|||
|
var locationWithFile = GetLocation(obj.GetKey());
|
|||
|
if (File.Exists(locationWithFile) && failIfDuplicate)
|
|||
|
{
|
|||
|
throw new Exception($"Attempted to save duplicated object into data storage: {locationWithFile}");
|
|||
|
}
|
|||
|
|
|||
|
File.WriteAllText(locationWithFile, _serializer.GetSerializer().Serialize(obj));
|
|||
|
}
|
|||
|
|
|||
|
public T? Retrieve<T>(IKey obj) where T : IKeyable
|
|||
|
{
|
|||
|
var locationWithFile = GetLocation(obj);
|
|||
|
if (!File.Exists(locationWithFile))
|
|||
|
{
|
|||
|
return default;
|
|||
|
}
|
|||
|
|
|||
|
return _serializer.GetSerializer().Deserialize<T>(File.ReadAllText(locationWithFile));
|
|||
|
}
|
|||
|
|
|||
|
public bool Exists(IKey obj)
|
|||
|
{
|
|||
|
var locationWithFile = GetLocation(obj);
|
|||
|
return File.Exists(locationWithFile);
|
|||
|
}
|
|||
|
|
|||
|
public abstract List<T> RetrieveAll<T>() where T : IKeyable;
|
|||
|
|
|||
|
protected abstract string GetLocation(IKey key);
|
|||
|
|
|||
|
protected virtual string GetBaseLocation()
|
|||
|
{
|
|||
|
var location =
|
|||
|
string.IsNullOrEmpty(LootDumpProcessorContext.GetConfig().DataStorageConfig.FileDataStorageTempLocation)
|
|||
|
? LootDumpProcessorContext.GetConfig().DataStorageConfig.FileDataStorageTempLocation
|
|||
|
: Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
|
|||
|
|
|||
|
return $"{location}/SPT/tmp/LootGen";
|
|||
|
}
|
|||
|
}
|