summaryrefslogtreecommitdiff
path: root/Thronefall_v1.57/Thronefall/I2.Loc/I2BasePersistentStorage.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Thronefall_v1.57/Thronefall/I2.Loc/I2BasePersistentStorage.cs')
-rw-r--r--Thronefall_v1.57/Thronefall/I2.Loc/I2BasePersistentStorage.cs197
1 files changed, 197 insertions, 0 deletions
diff --git a/Thronefall_v1.57/Thronefall/I2.Loc/I2BasePersistentStorage.cs b/Thronefall_v1.57/Thronefall/I2.Loc/I2BasePersistentStorage.cs
new file mode 100644
index 0000000..bd4a52c
--- /dev/null
+++ b/Thronefall_v1.57/Thronefall/I2.Loc/I2BasePersistentStorage.cs
@@ -0,0 +1,197 @@
+using System;
+using System.Globalization;
+using System.IO;
+using System.Text;
+using UnityEngine;
+
+namespace I2.Loc;
+
+public abstract class I2BasePersistentStorage
+{
+ public virtual void SetSetting_String(string key, string value)
+ {
+ try
+ {
+ int length = value.Length;
+ int num = 8000;
+ if (length <= num)
+ {
+ PlayerPrefs.SetString(key, value);
+ return;
+ }
+ int num2 = Mathf.CeilToInt((float)length / (float)num);
+ for (int i = 0; i < num2; i++)
+ {
+ int num3 = num * i;
+ PlayerPrefs.SetString($"[I2split]{i}{key}", value.Substring(num3, Mathf.Min(num, length - num3)));
+ }
+ PlayerPrefs.SetString(key, "[$I2#@div$]" + num2);
+ }
+ catch (Exception)
+ {
+ Debug.LogError("Error saving PlayerPrefs " + key);
+ }
+ }
+
+ public virtual string GetSetting_String(string key, string defaultValue)
+ {
+ try
+ {
+ string text = PlayerPrefs.GetString(key, defaultValue);
+ if (!string.IsNullOrEmpty(text) && text.StartsWith("[I2split]", StringComparison.Ordinal))
+ {
+ int num = int.Parse(text.Substring("[I2split]".Length), CultureInfo.InvariantCulture);
+ text = "";
+ for (int i = 0; i < num; i++)
+ {
+ text += PlayerPrefs.GetString($"[I2split]{i}{key}", "");
+ }
+ }
+ return text;
+ }
+ catch (Exception)
+ {
+ Debug.LogError("Error loading PlayerPrefs " + key);
+ return defaultValue;
+ }
+ }
+
+ public virtual void DeleteSetting(string key)
+ {
+ try
+ {
+ string @string = PlayerPrefs.GetString(key, null);
+ if (!string.IsNullOrEmpty(@string) && @string.StartsWith("[I2split]", StringComparison.Ordinal))
+ {
+ int num = int.Parse(@string.Substring("[I2split]".Length), CultureInfo.InvariantCulture);
+ for (int i = 0; i < num; i++)
+ {
+ PlayerPrefs.DeleteKey($"[I2split]{i}{key}");
+ }
+ }
+ PlayerPrefs.DeleteKey(key);
+ }
+ catch (Exception)
+ {
+ Debug.LogError("Error deleting PlayerPrefs " + key);
+ }
+ }
+
+ public virtual void ForceSaveSettings()
+ {
+ PlayerPrefs.Save();
+ }
+
+ public virtual bool HasSetting(string key)
+ {
+ return PlayerPrefs.HasKey(key);
+ }
+
+ public virtual bool CanAccessFiles()
+ {
+ return true;
+ }
+
+ private string UpdateFilename(PersistentStorage.eFileType fileType, string fileName)
+ {
+ switch (fileType)
+ {
+ case PersistentStorage.eFileType.Persistent:
+ fileName = Application.persistentDataPath + "/" + fileName;
+ break;
+ case PersistentStorage.eFileType.Temporal:
+ fileName = Application.temporaryCachePath + "/" + fileName;
+ break;
+ case PersistentStorage.eFileType.Streaming:
+ fileName = Application.streamingAssetsPath + "/" + fileName;
+ break;
+ }
+ return fileName;
+ }
+
+ public virtual bool SaveFile(PersistentStorage.eFileType fileType, string fileName, string data, bool logExceptions = true)
+ {
+ if (!CanAccessFiles())
+ {
+ return false;
+ }
+ try
+ {
+ fileName = UpdateFilename(fileType, fileName);
+ File.WriteAllText(fileName, data, Encoding.UTF8);
+ return true;
+ }
+ catch (Exception ex)
+ {
+ if (logExceptions)
+ {
+ Debug.LogError("Error saving file '" + fileName + "'\n" + ex);
+ }
+ return false;
+ }
+ }
+
+ public virtual string LoadFile(PersistentStorage.eFileType fileType, string fileName, bool logExceptions = true)
+ {
+ if (!CanAccessFiles())
+ {
+ return null;
+ }
+ try
+ {
+ fileName = UpdateFilename(fileType, fileName);
+ return File.ReadAllText(fileName, Encoding.UTF8);
+ }
+ catch (Exception ex)
+ {
+ if (logExceptions)
+ {
+ Debug.LogError("Error loading file '" + fileName + "'\n" + ex);
+ }
+ return null;
+ }
+ }
+
+ public virtual bool DeleteFile(PersistentStorage.eFileType fileType, string fileName, bool logExceptions = true)
+ {
+ if (!CanAccessFiles())
+ {
+ return false;
+ }
+ try
+ {
+ fileName = UpdateFilename(fileType, fileName);
+ File.Delete(fileName);
+ return true;
+ }
+ catch (Exception ex)
+ {
+ if (logExceptions)
+ {
+ Debug.LogError("Error deleting file '" + fileName + "'\n" + ex);
+ }
+ return false;
+ }
+ }
+
+ public virtual bool HasFile(PersistentStorage.eFileType fileType, string fileName, bool logExceptions = true)
+ {
+ if (!CanAccessFiles())
+ {
+ return false;
+ }
+ try
+ {
+ fileName = UpdateFilename(fileType, fileName);
+ return File.Exists(fileName);
+ }
+ catch (Exception ex)
+ {
+ if (logExceptions)
+ {
+ Debug.LogError("Error requesting file '" + fileName + "'\n" + ex);
+ }
+ return false;
+ }
+ }
+}