diff --git a/AppApi.cs b/AppApi.cs index 80f7a659..9635b45d 100644 --- a/AppApi.cs +++ b/AppApi.cs @@ -210,22 +210,10 @@ namespace VRCX return CpuMonitor.Instance.CpuUsage; } - public bool CacheImage(string ImageURL, string AppVersion) + public void CacheImage(string Base64File) { String Icon = Path.Combine(Program.BaseDirectory, "cache\\toast"); - try - { - using (var client = new WebClient()) - { - client.Headers.Add("user-agent", AppVersion); - client.DownloadFile(ImageURL, Icon); - } - } - catch (WebException) - { - return false; - } - return true; + File.WriteAllBytes(Icon, Convert.FromBase64String(Base64File)); } public void DesktopNotification(string BoldText, string Text, bool Image) diff --git a/CefService.cs b/CefService.cs index e999767f..d27af646 100644 --- a/CefService.cs +++ b/CefService.cs @@ -1,4 +1,4 @@ -using CefSharp; +using CefSharp; using CefSharp.WinForms; using System; using System.IO; @@ -41,7 +41,7 @@ namespace VRCX cefSettings.CefCommandLineArgs.Add("disable-extensions"); cefSettings.CefCommandLineArgs["autoplay-policy"] = "no-user-gesture-required"; // cefSettings.CefCommandLineArgs.Add("allow-universal-access-from-files"); - // cefSettings.CefCommandLineArgs.Add("disable-web-security"); + cefSettings.CefCommandLineArgs.Add("disable-web-security"); cefSettings.SetOffScreenRenderingBestPerformanceArgs(); CefSharpSettings.WcfEnabled = true; // TOOD: REMOVE THIS LINE YO diff --git a/html/src/app.js b/html/src/app.js index a7a3e1f0..222c04a9 100644 --- a/html/src/app.js +++ b/html/src/app.js @@ -4318,7 +4318,30 @@ speechSynthesis.getVoices(); ((this.desktopToast === 'Game Closed') && (!this.isGameRunning)) || ((this.desktopToast === 'Desktop Mode') && (this.isGameNoVR) && (this.isGameRunning))) || ((this.xsNotifications) && (this.isGameRunning) && (!this.isGameNoVR)))) { - var image = await AppApi.CacheImage(imageURL, appVersion); + try { + await fetch(imageURL, { + method: 'GET', + redirect: 'follow', + headers: { + 'User-Agent': appVersion + } + }).then(response => { + return response.arrayBuffer(); + }).then(buffer => { + var binary = ''; + var bytes = new Uint8Array(buffer); + var length = bytes.byteLength; + for (var i = 0; i < length; i++) { + binary += String.fromCharCode(bytes[i]); + } + var imageData = btoa(binary); + AppApi.CacheImage(imageData); + }); + image = true; + } catch (err) { + console.error(err); + image = false; + } } if ((this.xsNotifications) && (this.isGameRunning) && (!this.isGameNoVR)) { this.displayXSNotification(noty, message, image);