| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 | 
							- using InABox.Core;
 
- using System;
 
- using System.Collections.Generic;
 
- using System.Diagnostics.CodeAnalysis;
 
- using System.Linq;
 
- using System.Text;
 
- using System.Threading.Tasks;
 
- namespace InABox.Avalonia;
 
- public static class CacheManager
 
- {
 
-     private static Dictionary<string, DateTime> _expiries = new();
 
-     private static Timer? _timer;
 
-     private static void StartTimer()
 
-     {
 
-         if (_timer is not null) return;
 
-         // _timer = new Timer(ProcessCache, null, TimeSpan.Zero, TimeSpan.FromMinutes(5));
 
-     }
 
-     private static void ProcessCache(object? state)
 
-     {
 
-         var now = DateTime.Now;
 
-         var toDelete = _expiries.Where(x => x.Value < now).Select(x => x.Key).ToArray();
 
-         foreach (var item in toDelete)
 
-         {
 
-             try
 
-             {
 
-                 File.Delete(CacheFileName(item));
 
-             }
 
-             catch(Exception e)
 
-             {
 
-                 MobileLogging.Log(e);
 
-             }
 
-         }
 
-         lock (_expiries)
 
-         {
 
-             foreach (var item in toDelete)
 
-             {
 
-                 _expiries.Remove(item);
 
-             }
 
-         }
 
-     }
 
-     private static void AddExpiry(string key, DateTime expiry)
 
-     {
 
-         // lock (_expiries)
 
-         // {
 
-         //     _expiries[key] = expiry;
 
-         // }
 
-         // SaveExpiries();
 
-     }
 
-     private static Guid CacheID { get; set; }
 
-     private static bool IsCached(string key) => File.Exists(CacheFileName(key));
 
-     
 
-     private static string CacheFileName(string key) =>
 
-         Path.Combine(CacheFolder(), key);
 
-     private static string CacheFolder()
 
-     {
 
-         var result = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
 
-         if (OperatingSystem.IsWindows())
 
-         {
 
-             var assembly = Path.GetFileNameWithoutExtension(System.Diagnostics.Process.GetCurrentProcess().MainModule.ModuleName);
 
-             result = Path.Combine(result, assembly);
 
-         }
 
-         if (CacheID != Guid.Empty)
 
-             result = Path.Combine(result, CacheID.ToString());
 
-         if (!Directory.Exists(result))
 
-             Directory.CreateDirectory(result);
 
-         return result;
 
-     }
 
-     private const string EXPIRY_FILE = "cache_expiry.json";
 
-     private static void LoadExpiries()
 
-     {
 
-         var filename = CacheFileName(EXPIRY_FILE);
 
-         if (File.Exists(filename))
 
-         {
 
-             var json = File.ReadAllText(filename);
 
-             lock (_expiries)
 
-             {
 
-                 _expiries = Serialization.Deserialize<Dictionary<string, DateTime>>(json) ?? [];
 
-             }
 
-         }
 
-         else
 
-         {
 
-             lock (_expiries)
 
-             {
 
-                 _expiries = [];
 
-             }
 
-         }
 
-     }
 
-     private static void SaveExpiries()
 
-     {
 
-         try
 
-         {
 
-             lock (_expiries)
 
-             {
 
-                 var file = CacheFileName(EXPIRY_FILE);
 
-                 var json = Serialization.Serialize(_expiries);
 
-                 File.WriteAllText(file, json);
 
-             }
 
-         }
 
-         catch (Exception e)
 
-         {
 
-             MobileLogging.Log(e);
 
-         }
 
-     }
 
-     #region Public Interface
 
-     public static void Initialise(Guid cacheID)
 
-     {
 
-         CacheID = cacheID;
 
-         // LoadExpiries();
 
-         StartTimer();
 
-     }
 
-     public static bool TryLoadBinary<T>(string key, [NotNullWhen(true)] out T? value, out DateTime lastUpdated)
 
-         where T : class, ISerializeBinary, new()
 
-     {
 
-         var filename = CacheFileName(key);
 
-         if (File.Exists(filename))
 
-         {
 
-             lastUpdated = File.GetLastWriteTime(filename);
 
-             using var stream = new FileStream(filename, FileMode.Open);
 
-             value = Serialization.ReadBinary<T>(stream, BinarySerializationSettings.Latest);
 
-             return true;
 
-         }
 
-         else
 
-         {
 
-             lastUpdated = default;
 
-             value = null;
 
-             return false;
 
-         }
 
-     }
 
-     public static void SaveBinary<T>(string key, T value, DateTime expiry)
 
-         where T : class, ISerializeBinary, new()
 
-     {
 
-         var data = value.WriteBinary(BinarySerializationSettings.Latest);
 
-         try
 
-         {
 
-             var file = CacheFileName(key);
 
-             File.WriteAllBytes(file, data);
 
-             AddExpiry(key, expiry);
 
-         }
 
-         catch (Exception e)
 
-         {
 
-             MobileLogging.Log(e);
 
-         }
 
-     }
 
-     public static bool TryLoadJSON<T>(string key, [NotNullWhen(true)] out T? value, out DateTime lastUpdated)
 
-         where T : class, new()
 
-     {
 
-         var filename = CacheFileName(key);
 
-         if (File.Exists(filename))
 
-         {
 
-             lastUpdated = File.GetLastWriteTime(filename);
 
-             var json = File.ReadAllText(filename);
 
-             value = Serialization.Deserialize<T>(json);
 
-             return value is not null;
 
-         }
 
-         else
 
-         {
 
-             lastUpdated = default;
 
-             value = null;
 
-             return false;
 
-         }
 
-     }
 
-     public static void SaveJSON<T>(string key, T value, DateTime expiry)
 
-         where T : class, new()
 
-     {
 
-         try
 
-         {
 
-             var file = CacheFileName(key);
 
-             var json = Serialization.Serialize(value);
 
-             File.WriteAllText(file, json);
 
-             AddExpiry(key, expiry);
 
-         }
 
-         catch (Exception e)
 
-         {
 
-             MobileLogging.Log(e);
 
-         }
 
-     }
 
-     #endregion
 
- }
 
 
  |