diff --git a/AppApi.cs b/AppApi.cs index 9ccd10a9..ae676c02 100644 --- a/AppApi.cs +++ b/AppApi.cs @@ -238,9 +238,9 @@ namespace VRCX return CpuMonitor.Instance.CpuUsage; } - public string GetImage(string url, string fileId, string version) + public string GetImage(string url, string fileId, string version, string appVersion) { - return ImageCache.GetImage(url, fileId, version); + return ImageCache.GetImage(url, fileId, version, appVersion); } public void DesktopNotification(string BoldText, string Text, string Image) diff --git a/ImageCache.cs b/ImageCache.cs index fed3a75e..bfcb5ed4 100644 --- a/ImageCache.cs +++ b/ImageCache.cs @@ -9,8 +9,9 @@ namespace VRCX { private static readonly string cacheLocation = Path.Combine(Program.AppDataDirectory, "ImageCache"); - public static string GetImage(string url, string fileId, string version) + public static string GetImage(string url, string fileId, string version, string appVersion) { + var imageHost = "api.vrchat.cloud"; var directoryLocation = Path.Combine(cacheLocation, fileId); var fileLocation = Path.Combine(directoryLocation, $"{version}.png"); @@ -24,9 +25,22 @@ namespace VRCX Directory.Delete(directoryLocation, true); Directory.CreateDirectory(directoryLocation); + Uri uri = new Uri(url); + if (uri.Host != imageHost) + throw new ArgumentException("Invalid image host", url); + using (var client = new WebClient()) { - client.Headers.Add("user-agent", "VRCX"); + string cookieString = String.Empty; + if (WebApi.Instance != null && WebApi.Instance._cookieContainer != null) + { + CookieCollection cookies = WebApi.Instance._cookieContainer.GetCookies(new Uri($"https://{imageHost}")); + foreach (Cookie cookie in cookies) + cookieString += $"{cookie.Name}={cookie.Value};"; + } + + client.Headers.Add(HttpRequestHeader.Cookie, cookieString); + client.Headers.Add("user-agent", appVersion); client.DownloadFile(url, fileLocation); } diff --git a/WebApi.cs b/WebApi.cs index 11d88a94..2c9ebca9 100644 --- a/WebApi.cs +++ b/WebApi.cs @@ -12,7 +12,7 @@ namespace VRCX public class WebApi { public static readonly WebApi Instance; - private CookieContainer _cookieContainer; + public CookieContainer _cookieContainer; private bool _cookieDirty; private Timer _timer; diff --git a/html/src/app.js b/html/src/app.js index 6e8a28e5..652d80e4 100644 --- a/html/src/app.js +++ b/html/src/app.js @@ -5008,14 +5008,30 @@ speechSynthesis.getVoices(); var imageUrl = await this.notyGetImage(noty); var fileId = extractFileId(imageUrl); var fileVersion = extractFileVersion(imageUrl); - if (fileId && fileVersion) { - return AppApi.GetImage(imageUrl, fileId, fileVersion); - } else if (imageUrl) { - fileVersion = imageUrl.split('/').pop(); // 1416226261.thumbnail-500.png - fileId = fileVersion.split('.').shift(); // 1416226261 - return AppApi.GetImage(imageUrl, fileId, fileVersion); + var imageLocation = ''; + try { + if (fileId && fileVersion) { + imageLocation = await AppApi.GetImage( + imageUrl, + fileId, + fileVersion, + appVersion + ); + } else if (imageUrl) { + fileVersion = imageUrl.split('/').pop(); // 1416226261.thumbnail-500.png + fileId = fileVersion.split('.').shift(); // 1416226261 + imageLocation = await AppApi.GetImage( + imageUrl, + fileId, + fileVersion, + appVersion + ); + + } + } catch (err) { + console.error(err); } - return ''; + return imageLocation; }; $app.methods.displayOverlayNotification = function (