From f9b6d07e664175af674ac9e654735e92065bd255 Mon Sep 17 00:00:00 2001 From: Sour Date: Thu, 31 Jan 2019 22:26:24 -0500 Subject: [PATCH] UI: Extract Google Drive API DLLs only when/if Google Drive Integration is enabled --- .../GoogleDriveIntegration/CloudSyncHelper.cs | 8 +++++ GUI.NET/Program.cs | 4 +++ GUI.NET/ResourceManager.cs | 30 ++++++++++++++++--- 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/GUI.NET/GoogleDriveIntegration/CloudSyncHelper.cs b/GUI.NET/GoogleDriveIntegration/CloudSyncHelper.cs index 99e342ea..bc452eae 100644 --- a/GUI.NET/GoogleDriveIntegration/CloudSyncHelper.cs +++ b/GUI.NET/GoogleDriveIntegration/CloudSyncHelper.cs @@ -36,6 +36,14 @@ namespace Mesen.GUI.GoogleDriveIntegration } } else { try { + string googleDriveFolder = Path.Combine(ConfigManager.HomeFolder, "GoogleDrive"); + if(!Directory.Exists(googleDriveFolder) || Directory.EnumerateFiles(googleDriveFolder).Where((string filename) => filename.Contains("TokenResponse")).Count() == 0) { + //Sync token has been deleted, disable sync + ConfigManager.Config.PreferenceInfo.CloudSaveIntegration = false; + ConfigManager.ApplyChanges(); + return false; + } + InteropEmu.DisplayMessage("GoogleDrive", "SynchronizationStarted"); using(_accessor = new GoogleDriveAccessor()) { FileDownloadResult result = CloudSyncHelper.DownloadData(); diff --git a/GUI.NET/Program.cs b/GUI.NET/Program.cs index fe21bdbd..06a8f1f2 100644 --- a/GUI.NET/Program.cs +++ b/GUI.NET/Program.cs @@ -44,6 +44,10 @@ namespace Mesen.GUI string absoluteFolder = new FileInfo((new System.Uri(Assembly.GetExecutingAssembly().CodeBase)).LocalPath).Directory.FullName; string targetPath = Path.Combine(ConfigManager.HomeFolder, "GoogleDrive", assemblyFile); + if(ResourceManager.GoogleDlls.Contains(assemblyFile)) { + ResourceManager.ExtractGoogleDriveResources(); + } + try { if(File.Exists(targetPath)) { return Assembly.LoadFile(targetPath); diff --git a/GUI.NET/ResourceManager.cs b/GUI.NET/ResourceManager.cs index f8ac4f0a..751eaa10 100644 --- a/GUI.NET/ResourceManager.cs +++ b/GUI.NET/ResourceManager.cs @@ -100,12 +100,25 @@ namespace Mesen.GUI } catch { } } + public static void ExtractGoogleDriveResources() + { + Directory.CreateDirectory(Path.Combine(ConfigManager.HomeFolder, "GoogleDrive")); + ZipArchive zip = new ZipArchive(Assembly.GetExecutingAssembly().GetManifestResourceStream("Mesen.GUI.Dependencies.Dependencies.zip")); + + //Extract Google Drive-related DLLs + foreach(ZipArchiveEntry entry in zip.Entries) { + if(ResourceManager.GoogleDlls.Contains(entry.Name)) { + string outputFilename = Path.Combine(ConfigManager.HomeFolder, "GoogleDrive", entry.Name); + ExtractFile(entry, outputFilename); + } + } + } + public static bool ExtractResources() { CleanupOldFiles(); Directory.CreateDirectory(Path.Combine(ConfigManager.HomeFolder, "Resources")); - Directory.CreateDirectory(Path.Combine(ConfigManager.HomeFolder, "GoogleDrive")); ZipArchive zip = new ZipArchive(Assembly.GetExecutingAssembly().GetManifestResourceStream("Mesen.GUI.Dependencies.Dependencies.zip")); @@ -121,9 +134,6 @@ namespace Mesen.GUI } else if(entry.Name == "MesenUpdater.exe" || entry.Name == "MesenDB.txt") { string outputFilename = Path.Combine(ConfigManager.HomeFolder, entry.Name); ExtractFile(entry, outputFilename); - } else if(entry.Name.StartsWith("Google.Apis") || entry.Name == "BouncyCastle.Crypto.dll" || entry.Name == "Zlib.Portable.dll" || entry.Name == "Newtonsoft.Json.dll") { - string outputFilename = Path.Combine(ConfigManager.HomeFolder, "GoogleDrive", entry.Name); - ExtractFile(entry, outputFilename); } else if(entry.Name == "Font.24.spritefont" || entry.Name == "Font.64.spritefont" || entry.Name == "LICENSE.txt" || entry.Name == "PixelFont.ttf") { string outputFilename = Path.Combine(ConfigManager.HomeFolder, "Resources", entry.Name); ExtractFile(entry, outputFilename); @@ -141,5 +151,17 @@ namespace Mesen.GUI return true; } + + public static HashSet GoogleDlls = new HashSet() { + "BouncyCastle.Crypto.dll", + "Google.Apis.Auth.dll", + "Google.Apis.Auth.PlatformServices.dll", + "Google.Apis.Core.dll", + "Google.Apis.dll", + "Google.Apis.Drive.v3.dll", + "Google.Apis.PlatformServices.dll", + "Newtonsoft.Json.dll", + "Zlib.Portable.dll" + }; } }