using Mogafa.Common; using Mogafa.Common.Storages; using Newtonsoft.Json; using System; using System.Threading.Tasks; using UnityEngine; namespace Mogafa.Unity.Common.Storages { public class UnityLocalStorage : MogafaBase, ILocalStorage { public Task Get(string key) { if (!PlayerPrefs.HasKey(key)) { return Task.FromResult(default); } var json = PlayerPrefs.GetString(key); if (string.IsNullOrEmpty(json)) { return Task.FromResult(default); } try { var value = JsonConvert.DeserializeObject(json); return Task.FromResult(value); } catch (Exception ex) { Logger.LogError($"Local storage error, key:{key}, json:{json}\n error message:{ex.Message}"); } return Task.FromResult(default); } public Task GetFloat(string key) { return GetFloat(key, 0); } public Task GetFloat(string key, float defaultValue) { if (!PlayerPrefs.HasKey(key)) { return Task.FromResult(defaultValue); } var value = PlayerPrefs.GetFloat(key); return Task.FromResult(value); } public Task GetInt(string key) { return GetInt(key, 0); } public Task GetInt(string key, int defaultValue) { if (!PlayerPrefs.HasKey(key)) { return Task.FromResult(defaultValue); } var value = PlayerPrefs.GetInt(key); return Task.FromResult(value); } public Task GetLong(string key) { return GetLong(key, 0L); } public Task GetLong(string key, long defaultValue) { var highKey = $"HHHHH{key}"; var lowKey = $"LLLLL{key}"; if (!PlayerPrefs.HasKey(highKey) || !PlayerPrefs.HasKey(lowKey)) { return Task.FromResult(defaultValue); } var highValue = (long)PlayerPrefs.GetInt(highKey); var lowValue = (long)PlayerPrefs.GetInt(lowKey); var value = (highValue << 32) + lowValue; return Task.FromResult(value); } public Task GetString(string key) { return GetString(key, null); } public Task GetString(string key, string defaultValue) { if (!PlayerPrefs.HasKey(key)) { return Task.FromResult(defaultValue); } var value = PlayerPrefs.GetString(key); return Task.FromResult(value); } public Task Save() { PlayerPrefs.Save(); return Task.CompletedTask; } public Task Set(string key, T value) { PlayerPrefs.SetString(key, JsonConvert.SerializeObject(value)); return Task.CompletedTask; } public Task SetFloat(string key, float value) { PlayerPrefs.SetFloat(key, value); return Task.CompletedTask; } public Task SetInt(string key, int value) { PlayerPrefs.SetInt(key, value); return Task.CompletedTask; } public Task SetLong(string key, long value) { int lowValue = (int)(value & 0x000000ffffffffL); int highValue = (int)(value >> 32); var highKey = $"HHHHH{key}"; var lowKey = $"LLLLL{key}"; PlayerPrefs.SetInt(highKey, highValue); PlayerPrefs.SetInt(lowKey, lowValue); return Task.CompletedTask; } public Task SetString(string key, string value) { PlayerPrefs.SetString(key, value); return Task.CompletedTask; } } }