PersistenceUtils.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. using System.IO;
  2. using UnityEngine;
  3. namespace Asset_Cleaner {
  4. static class PersistenceUtils {
  5. public static void Load(ref Config result) {
  6. var serializable = Deserialize();
  7. AufSerializableData.OnDeserialize(in serializable, ref result);
  8. }
  9. public static void Save(in Config src) {
  10. AufSerializableData.OnSerialize(in src, out var serializable);
  11. var json = JsonUtility.ToJson(serializable);
  12. File.WriteAllText(Path, json);
  13. }
  14. static AufSerializableData Deserialize() {
  15. AufSerializableData serializableData;
  16. string json;
  17. if (!File.Exists(Path)) {
  18. // not exists - write new
  19. serializableData = AufSerializableData.Default();
  20. json = JsonUtility.ToJson(serializableData);
  21. File.WriteAllText(Path, json);
  22. }
  23. else {
  24. // exists
  25. json = File.ReadAllText(Path);
  26. if (string.IsNullOrEmpty(json)) {
  27. // but corrupted - overwrite with new
  28. serializableData = AufSerializableData.Default();
  29. json = JsonUtility.ToJson(serializableData);
  30. File.WriteAllText(Path, json);
  31. }
  32. serializableData = JsonUtility.FromJson<AufSerializableData>(json);
  33. if (serializableData.Valid())
  34. return serializableData;
  35. serializableData = AufSerializableData.Default();
  36. json = JsonUtility.ToJson(serializableData);
  37. File.WriteAllText(Path, json);
  38. }
  39. return serializableData;
  40. }
  41. static string Path => $"{Application.temporaryCachePath}/AssetCleaner_{AufSerializableData.CurrentVersion}.json";
  42. // [MenuItem("Tools/LogPath")]
  43. static void Log() {
  44. Debug.Log(Application.temporaryCachePath);
  45. }
  46. }
  47. }