Files
Yae/src/CacheFile.cs
HolographicHat 2442264224 Add CacheFile
2022-08-15 23:35:29 +08:00

40 lines
1.2 KiB
C#

using System.IO.Compression;
using Google.Protobuf;
namespace YaeAchievement;
public class CacheFile {
private readonly string _cacheName;
private CacheItem? _content;
public DateTime LastWriteTime => Exists() ? File.GetLastWriteTimeUtc(_cacheName) : DateTime.UnixEpoch;
public CacheFile(string identifier) {
Directory.CreateDirectory(Path.Combine(GlobalVars.AppPath, "cache"));
_cacheName = Path.Combine(GlobalVars.AppPath, $"cache/{identifier.MD5Hash()[..16]}.miko");
}
public bool Exists() => File.Exists(_cacheName);
public CacheItem Read() {
if (_content == null) {
using var fInput = File.OpenRead(_cacheName);
using var dInput = new GZipStream(fInput, CompressionMode.Decompress);
_content = CacheItem.Parser.ParseFrom(dInput);
}
return _content;
}
public void Write(byte[] data, string? etag = null) {
using var fOut = File.OpenWrite(_cacheName);
using var cOut = new GZipStream(fOut, CompressionLevel.SmallestSize);
new CacheItem {
Etag = etag ?? string.Empty,
Version = 3,
Checksum = data.MD5Hash(),
Content = ByteString.CopyFrom(data)
}.WriteTo(cOut);
}
}