finder-wpf / FastSeekWpf /Core /CacheManager.cs
anshdadhich's picture
CacheManager: Remove back-compat DriveRoots check that no longer exists. CacheData now uses single DriveRoot string matching Rust.
78e313f verified
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Text.Json;
using System.Text.Json.Serialization;
using K4os.Compression.LZ4;
namespace FastSeekWpf.Core;
public static class CacheManager
{
private static readonly string CachePath = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
"FastSeek", "cache.dat");
private static readonly JsonSerializerOptions JsonOptions = new()
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
IncludeFields = true
};
private static string ConfigPath => Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
"FastSeek", "config.txt");
static CacheManager()
{
Directory.CreateDirectory(Path.GetDirectoryName(CachePath)!);
}
public static void SaveCache(IndexStore store)
{
var cache = store.ToCache();
string json = JsonSerializer.Serialize(cache, JsonOptions);
byte[] bytes = Encoding.UTF8.GetBytes(json);
byte[] compressed = LZ4Pickler.Pickle(bytes, LZ4Level.L12_MAX);
File.WriteAllBytes(CachePath, compressed);
}
public static CacheData? LoadCache()
{
if (!File.Exists(CachePath)) return null;
try
{
byte[] compressed = File.ReadAllBytes(CachePath);
byte[] bytes = LZ4Pickler.Unpickle(compressed);
string json = Encoding.UTF8.GetString(bytes);
return JsonSerializer.Deserialize<CacheData>(json, JsonOptions);
}
catch
{
return null;
}
}
public static void ClearCache()
{
if (File.Exists(CachePath))
File.Delete(CachePath);
}
public static List<string> LoadExclusions()
{
if (!File.Exists(ConfigPath)) return new List<string>();
var result = new List<string>();
foreach (var line in File.ReadAllLines(ConfigPath))
{
string trimmed = line.Trim().ToLowerInvariant();
if (!string.IsNullOrEmpty(trimmed))
result.Add(trimmed);
}
return result;
}
public static void SaveExclusions(List<string> exclusions)
{
Directory.CreateDirectory(Path.GetDirectoryName(ConfigPath)!);
File.WriteAllText(ConfigPath, string.Join("\n", exclusions));
}
}