From feb32943c7c3d5f83abfe1e7e0d081560c191302 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Thu, 23 May 2019 15:18:31 +0300 Subject: [PATCH] (be8059eff) Use RestSharp to download the existing preview image when editing published workshop items. WebClient doesn't seem to work in the Mac build --- .../Source/Networking/SteamManager.cs | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/Barotrauma/BarotraumaClient/Source/Networking/SteamManager.cs b/Barotrauma/BarotraumaClient/Source/Networking/SteamManager.cs index 696d6d141..ceca903d2 100644 --- a/Barotrauma/BarotraumaClient/Source/Networking/SteamManager.cs +++ b/Barotrauma/BarotraumaClient/Source/Networking/SteamManager.cs @@ -1,11 +1,11 @@ using Barotrauma.Networking; using Facepunch.Steamworks; +using RestSharp; using RestSharp.Extensions.MonoHttp; using System; using System.Collections.Generic; using System.IO; using System.Linq; -using System.Net; namespace Barotrauma.Steam { @@ -467,13 +467,29 @@ namespace Barotrauma.Steam string previewImagePath = Path.GetFullPath(Path.Combine(itemEditor.Folder, PreviewImageName)); itemEditor.PreviewImage = previewImagePath; - using (WebClient client = new WebClient()) + try { - if (File.Exists(previewImagePath)) + if (File.Exists(previewImagePath)) { File.Delete(previewImagePath); } + + Uri baseAddress = new Uri(existingItem.PreviewImageUrl); + Uri directory = new Uri(baseAddress, "."); // "." == current dir, like MS-DOS + string fileName = Path.GetFileName(baseAddress.LocalPath); + + IRestClient client = new RestClient(directory); + var request = new RestRequest(fileName, Method.GET); + var response = client.Execute(request); + + if (response.ResponseStatus == ResponseStatus.Completed) { - File.Delete(previewImagePath); + File.WriteAllBytes(previewImagePath, response.RawBytes); } - client.DownloadFile(new Uri(existingItem.PreviewImageUrl), previewImagePath); + } + + catch (Exception e) + { + string errorMsg = "Failed to save workshop item preview image to \"" + previewImagePath + "\" when creating workshop item staging folder."; + GameAnalyticsManager.AddErrorEventOnce("SteamManager.CreateWorkshopItemStaging:WriteAllBytesFailed" + previewImagePath, + GameAnalyticsSDK.Net.EGAErrorSeverity.Error, errorMsg + "\n" + e.Message); } ContentPackage tempContentPackage = new ContentPackage(Path.Combine(existingItem.Directory.FullName, MetadataFileName));