102 lines
3.1 KiB
C#
102 lines
3.1 KiB
C#
////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// @module Quick Save for Unity3D
|
|
// @author Michael Clayton
|
|
// @support clayton.inds+support@gmail.com
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using CI.QuickSave.Core.Serialisers;
|
|
using CI.QuickSave.Core.Storage;
|
|
using CI.QuickSave.Core.Util;
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
namespace CI.QuickSave
|
|
{
|
|
public abstract class QuickSaveBase
|
|
{
|
|
protected JObject _items;
|
|
protected string _root;
|
|
protected QuickSaveSettings _settings;
|
|
|
|
/// <summary>
|
|
/// Determines whether the specified root exists
|
|
/// </summary>
|
|
/// <param name="root">The root to check</param>
|
|
/// <returns>Does the root exist</returns>
|
|
public static bool RootExists(string root) => FileAccess.Exists(FileAccess.GetPathFromBase(root));
|
|
|
|
/// <summary>
|
|
/// Deletes the specified root if it exists
|
|
/// </summary>
|
|
/// <param name="root">The root to delete</param>
|
|
public static void DeleteRoot(string root) => FileAccess.Delete(FileAccess.GetPathFromBase(root));
|
|
|
|
/// <summary>
|
|
/// Determines if the specified key exists
|
|
/// </summary>
|
|
/// <param name="key">The key to look for</param>
|
|
/// <returns>Does the key exist</returns>
|
|
public bool Exists(string key) => _items[key] != null;
|
|
|
|
/// <summary>
|
|
/// Gets the names of all the keys under this root
|
|
/// </summary>
|
|
/// <returns>A collection of key names</returns>
|
|
public IEnumerable<string> GetAllKeys() => _items.Properties().Select(x => x.Name).ToList();
|
|
|
|
protected void Load(bool rootMightNotExist)
|
|
{
|
|
FileAccess.CreateRootFolder();
|
|
var json = FileAccess.LoadString(FileAccess.GetPathFromBase(_root));
|
|
|
|
if (string.IsNullOrEmpty(json))
|
|
{
|
|
if (rootMightNotExist)
|
|
{
|
|
_items = new JObject();
|
|
|
|
return;
|
|
}
|
|
|
|
throw new QuickSaveException("Root does not exist");
|
|
}
|
|
|
|
json = DataService.PrepareLoadedData(json, _settings);
|
|
|
|
try
|
|
{
|
|
_items = JObject.Parse(json);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
throw new QuickSaveException("Deserialisation failed", e);
|
|
}
|
|
}
|
|
|
|
protected void Save()
|
|
{
|
|
string json;
|
|
|
|
try
|
|
{
|
|
json = JsonSerialiser.Serialise(_items);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
throw new QuickSaveException("Serialisation failed", e);
|
|
}
|
|
|
|
json = DataService.PrepareSaveData(json, _settings);
|
|
|
|
FileAccess.CreateRootFolder();
|
|
if (!FileAccess.SaveString(FileAccess.GetPathFromBase(_root), json))
|
|
{
|
|
throw new QuickSaveException("Failed to write to file");
|
|
}
|
|
}
|
|
}
|
|
} |