Cache favicons

This commit is contained in:
erri120 2020-07-10 13:55:53 +02:00
parent 83f49bab59
commit 843396f7c4
No known key found for this signature in database
GPG Key ID: A8C0A18D8D4D3135
2 changed files with 45 additions and 15 deletions

View File

@ -102,6 +102,7 @@ namespace Wabbajack.Common
public const string ModListExtensionString = ".wabbajack";
public static Extension ModListExtension = new Extension(ModListExtensionString);
public static AbsolutePath LocalAppDataPath => new AbsolutePath(Path.Combine(KnownFolders.LocalAppData.Path, "Wabbajack"));
public static AbsolutePath FaviconCacheFolderPath => LocalAppDataPath.Combine("favicons");
public static string MetricsKeyHeader => "x-metrics-key";
public static string WabbajackCacheLocation = "http://build.wabbajack.org/nexus_api_cache/";

View File

@ -15,6 +15,7 @@ using System.Windows.Threading;
using Microsoft.WindowsAPICodePack.Shell.PropertySystem;
using ReactiveUI;
using ReactiveUI.Fody.Helpers;
using Wabbajack.Common;
using Wabbajack.Lib;
using Wabbajack.Lib.Downloaders;
@ -84,22 +85,50 @@ namespace Wabbajack
{
if (Login.IconUri == null) return;
using var img = await new Wabbajack.Lib.Http.Client().GetAsync(Login.IconUri, errorsAsExceptions:false);
if (!img.IsSuccessStatusCode) return;
if(!Consts.FaviconCacheFolderPath.Exists)
Consts.FaviconCacheFolderPath.CreateDirectory();
var icoData = new MemoryStream(await img.Content.ReadAsByteArrayAsync());
var data = new Icon(icoData);
var ms = new MemoryStream();
data.ToBitmap().Save(ms, ImageFormat.Png);
ms.Position = 0;
var source = new BitmapImage();
source.BeginInit();
source.StreamSource = ms;
source.EndInit();
source.Freeze();
Favicon = source;
var faviconIcon = Consts.FaviconCacheFolderPath.Combine($"{Login.SiteName}.ico");
if (faviconIcon.Exists)
{
await using var fs = await faviconIcon.OpenRead();
var ms = new MemoryStream((int)fs.Length);
await fs.CopyToAsync(ms);
ms.Position = 0;
var source = new BitmapImage();
source.BeginInit();
source.StreamSource = ms;
source.EndInit();
source.Freeze();
Favicon = source;
}
else
{
using var img = await new Lib.Http.Client().GetAsync(Login.IconUri, errorsAsExceptions: false);
if (!img.IsSuccessStatusCode) return;
var icoData = new MemoryStream(await img.Content.ReadAsByteArrayAsync());
var data = new Icon(icoData);
var ms = new MemoryStream();
data.ToBitmap().Save(ms, ImageFormat.Png);
ms.Position = 0;
await using (var fs = await faviconIcon.Create())
{
await ms.CopyToAsync(fs);
ms.Position = 0;
}
var source = new BitmapImage();
source.BeginInit();
source.StreamSource = ms;
source.EndInit();
source.Freeze();
Favicon = source;
}
});
}
}