56 lines
1.6 KiB
C#
56 lines
1.6 KiB
C#
using System;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using UnityEngine;
|
|
|
|
namespace FlowScope.Save
|
|
{
|
|
public sealed class PlayerPrefsSaveStorage : ISaveStorage
|
|
{
|
|
private const string Prefix = "FlowScope.Save.";
|
|
|
|
public Task WriteAsync(string key, byte[] data, CancellationToken cancellationToken)
|
|
{
|
|
cancellationToken.ThrowIfCancellationRequested();
|
|
if (data == null)
|
|
{
|
|
throw new ArgumentNullException(nameof(data));
|
|
}
|
|
|
|
PlayerPrefs.SetString(ToPrefsKey(key), Convert.ToBase64String(data));
|
|
PlayerPrefs.Save();
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
public Task<byte[]> ReadAsync(string key, CancellationToken cancellationToken)
|
|
{
|
|
cancellationToken.ThrowIfCancellationRequested();
|
|
var prefsKey = ToPrefsKey(key);
|
|
return Task.FromResult(PlayerPrefs.HasKey(prefsKey)
|
|
? Convert.FromBase64String(PlayerPrefs.GetString(prefsKey))
|
|
: null);
|
|
}
|
|
|
|
public void Delete(string key)
|
|
{
|
|
PlayerPrefs.DeleteKey(ToPrefsKey(key));
|
|
PlayerPrefs.Save();
|
|
}
|
|
|
|
public bool Exists(string key)
|
|
{
|
|
return PlayerPrefs.HasKey(ToPrefsKey(key));
|
|
}
|
|
|
|
private static string ToPrefsKey(string key)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(key))
|
|
{
|
|
throw new ArgumentException("Save key is required.", nameof(key));
|
|
}
|
|
|
|
return Prefix + key;
|
|
}
|
|
}
|
|
}
|