18 using Avalonia.Controls.ApplicationLifetimes;
20 using System.Collections.Generic;
25 internal static class ImageCache
27 private const string imageCacheId =
"bb5a724e-93f7-431d-87c3-53f31d8da16e";
29 private static string imageCacheFolder;
31 private static Dictionary<string, string> imageCache;
35 imageCacheFolder = Path.Combine(Path.GetTempPath(), imageCacheId);
36 Directory.CreateDirectory(imageCacheFolder);
37 imageCache =
new Dictionary<string, string>();
40 private static bool exitHandlerSet =
false;
41 public static void SetExitEventHandler()
45 if (Avalonia.Application.Current.ApplicationLifetime is IControlledApplicationLifetime lifetime)
47 lifetime.Exit += (s, e) =>
51 Directory.Delete(imageCacheFolder,
true);
57 foreach (
string sr
in Directory.GetFiles(imageCacheFolder,
"*.*"))
70 exitHandlerSet =
true;
74 public static (string, bool) ImageUriResolver(
string imageUri,
string baseUriString)
76 if (!imageCache.TryGetValue(baseUriString +
"|||" + imageUri, out
string cachedImage))
80 if (!
string.IsNullOrEmpty(imagePath) && File.Exists(imagePath))
82 string id = Guid.NewGuid().ToString();
84 cachedImage = Path.Combine(imageCacheFolder,
id + Path.GetExtension(imagePath));
88 if (!Directory.Exists(imageCacheFolder))
90 Directory.CreateDirectory(imageCacheFolder);
93 File.Move(imagePath, cachedImage);
94 Directory.Delete(Path.GetDirectoryName(imagePath));
98 File.Copy(imagePath, cachedImage);
101 imageCache[baseUriString +
"|||" + imageUri] = cachedImage;
109 return (cachedImage,
false);