diff options
Diffstat (limited to 'Thronefall_v1.57/Thronefall/I2.Loc/I2BasePersistentStorage.cs')
-rw-r--r-- | Thronefall_v1.57/Thronefall/I2.Loc/I2BasePersistentStorage.cs | 197 |
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; + } + } +} |