diff --git a/GW2EIDPSReport/DPSReportController.cs b/GW2EIDPSReport/DPSReportController.cs index 16c53e9dc7..3fc1a0cbd8 100644 --- a/GW2EIDPSReport/DPSReportController.cs +++ b/GW2EIDPSReport/DPSReportController.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.IO; using System.Net; using System.Net.Http; @@ -18,6 +17,8 @@ namespace GW2EIDPSReport public static class DPSReportController { + public delegate void TraceHandler(string trace); + private static bool IsUserTokenValid(string userToken) { return userToken != null && userToken.Length > 0; @@ -95,7 +96,7 @@ private static string GetGetUploadsURL(GetUploadsParameters parameters, string u return GetURL(url, userToken); } ///////////////// APIs - public static DPSReportUploadObject UploadUsingEI(FileInfo fi, List traces, string userToken, bool anonymous = false, bool detailedWvW = false) + public static DPSReportUploadObject UploadUsingEI(FileInfo fi, TraceHandler traceHandler, string userToken, bool anonymous = false, bool detailedWvW = false) { string fileName = fi.Name; byte[] fileContents = File.ReadAllBytes(fi.FullName); @@ -108,68 +109,68 @@ public static DPSReportUploadObject UploadUsingEI(FileInfo fi, List trac return multiPartContent; }; - DPSReportUploadObject response = GetDPSReportResponse("UploadUsingEI", GetUploadContentURL(BaseUploadContentURL, userToken, anonymous, detailedWvW) + " & generator=ei", traces, contentCreator); + DPSReportUploadObject response = GetDPSReportResponse("UploadUsingEI", GetUploadContentURL(BaseUploadContentURL, userToken, anonymous, detailedWvW) + " & generator=ei", traceHandler, contentCreator); if (response != null && response.Error != null) { - traces.Add("DPSReport: UploadUsingEI failed - " + response.Error); + traceHandler("DPSReport: UploadUsingEI failed - " + response.Error); return null; } return response; } - public static DPSReportGetUploadsObject GetUploads(List traces, string userToken, GetUploadsParameters parameters) + public static DPSReportGetUploadsObject GetUploads(TraceHandler traceHandler, string userToken, GetUploadsParameters parameters) { - return GetDPSReportResponse("GetUploads", GetGetUploadsURL(parameters, userToken), traces); + return GetDPSReportResponse("GetUploads", GetGetUploadsURL(parameters, userToken), traceHandler); } - public static string GenerateUserToken(List traces) + public static string GenerateUserToken(TraceHandler traceHandler) { - DPSReportUserTokenResponse responseItem = GetDPSReportResponse("GenerateUserToken", BaseGetUserTokenURL, traces); + DPSReportUserTokenResponse responseItem = GetDPSReportResponse("GenerateUserToken", BaseGetUserTokenURL, traceHandler); if (responseItem != null) { return responseItem.UserToken; } return ""; } - public static DPSReportUploadObject GetUploadMetaDataWithID(string id, List traces) + public static DPSReportUploadObject GetUploadMetaDataWithID(string id, TraceHandler traceHandler) { if (id == null || id.Length == 0) { throw new InvalidDataException("Missing ID for GetUploadMetaData end point"); } - return GetDPSReportResponse("GetUploadMetaDataWithID", BaseGetUploadMetadataURL + "id=" + id, traces); + return GetDPSReportResponse("GetUploadMetaDataWithID", BaseGetUploadMetadataURL + "id=" + id, traceHandler); } - public static DPSReportUploadObject GetUploadMetaDataWithPermalink(string permalink, List traces) + public static DPSReportUploadObject GetUploadMetaDataWithPermalink(string permalink, TraceHandler traceHandler) { if (permalink == null || permalink.Length == 0) { throw new InvalidDataException("Missing Permalink for GetUploadMetaData end point"); } - return GetDPSReportResponse("GetUploadMetaDataWithPermalink", BaseGetUploadMetadataURL + "permalink=" + permalink, traces); + return GetDPSReportResponse("GetUploadMetaDataWithPermalink", BaseGetUploadMetadataURL + "permalink=" + permalink, traceHandler); } - public static T GetJsonWithID(string id, List traces) + public static T GetJsonWithID(string id, TraceHandler traceHandler) { if (id == null || id.Length == 0) { throw new InvalidDataException("Missing ID for GetJson end point"); } - return GetDPSReportResponse("GetJsonWithID", BaseGetJsonURL + "id=" + id, traces); + return GetDPSReportResponse("GetJsonWithID", BaseGetJsonURL + "id=" + id, traceHandler); } - public static T GetJsonWithPermalink(string permalink, List traces) + public static T GetJsonWithPermalink(string permalink, TraceHandler traceHandler) { if (permalink == null || permalink.Length == 0) { throw new InvalidDataException("Missing Permalink for GetJson end point"); } - return GetDPSReportResponse("GetJsonWithPermalink", BaseGetJsonURL + "permalink=" + permalink, traces); + return GetDPSReportResponse("GetJsonWithPermalink", BaseGetJsonURL + "permalink=" + permalink, traceHandler); } ///////////////// Response Utilities - private static T GetDPSReportResponse(string requestName, string URI, List traces, Func content = null) + private static T GetDPSReportResponse(string requestName, string URI, TraceHandler traceHandler, Func content = null) { const int tentatives = 5; for (int i = 0; i < tentatives; i++) { - traces.Add("DPSReport: " + requestName + " tentative"); + traceHandler("DPSReport: " + requestName + " tentative"); var webService = new Uri(@URI); var requestMessage = new HttpRequestMessage(HttpMethod.Post, webService); requestMessage.Headers.ExpectContinue = false; @@ -200,13 +201,13 @@ private static T GetDPSReportResponse(string requestName, string URI, List AllEnabledByDefault - 4.1.0 + 5.0.0 EliphasNUIT GW2 Elite Insights GW2 Elite Insights diff --git a/GW2EIParser/OperationControllers/OperationController.cs b/GW2EIParser/OperationControllers/OperationController.cs index a0e017e803..65399543ac 100644 --- a/GW2EIParser/OperationControllers/OperationController.cs +++ b/GW2EIParser/OperationControllers/OperationController.cs @@ -1,9 +1,9 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using GW2EIEvtcParser; using GW2EIEvtcParser.EncounterLogic; -using GW2EIEvtcParser.ParsedData; namespace GW2EIParser { @@ -63,7 +63,10 @@ public OperationBasicMetaData(ParsedEvtcLog log) /// /// Time elapsed parsing /// - public string Elapsed { get; set; } = ""; + public string Elapsed { get; private set; } = ""; + + + private readonly Stopwatch _stopWatch = new Stopwatch(); public OperationController(string location, string status) { @@ -84,6 +87,15 @@ public override void Reset() OpenableFiles.Clear(); } + public void Start() { + _stopWatch.Start(); + } + + public void Stop() { + _stopWatch.Stop(); + Elapsed = ("Elapsed " + _stopWatch.ElapsedMilliseconds + " ms"); + } + public void FinalizeStatus(string prefix) { StatusList.Insert(0, Elapsed); diff --git a/GW2EIParser/ProgramHelper.cs b/GW2EIParser/ProgramHelper.cs index 62a04fd681..9163cc6fe2 100644 --- a/GW2EIParser/ProgramHelper.cs +++ b/GW2EIParser/ProgramHelper.cs @@ -1,12 +1,10 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using System.IO; using System.IO.Compression; using System.Linq; using System.Text; using System.Threading; -using System.Threading.Tasks; using System.Windows.Forms; using Discord; using GW2EIBuilders; @@ -14,12 +12,9 @@ using GW2EIDPSReport; using GW2EIDPSReport.DPSReportJsons; using GW2EIWingman; -using GW2EIWingman.WingmanUploadJsons; using GW2EIEvtcParser; -using GW2EIEvtcParser.EIData; using GW2EIGW2API; using GW2EIParser.Exceptions; -using static GW2EIEvtcParser.ParserHelper; namespace GW2EIParser { @@ -103,7 +98,7 @@ public static bool ParseMultipleLogs() { if (Properties.Settings.Default.ParseMultipleLogs) { - if (!HasFormat() && Properties.Settings.Default.UploadToDPSReports) + if (!HasFormat() && (Properties.Settings.Default.UploadToDPSReports || (false && Properties.Settings.Default.UploadToWingman))) { return false; } @@ -112,24 +107,24 @@ public static bool ParseMultipleLogs() return false; } - private static string[] UploadOperation(List traces, FileInfo fInfo, ParsedEvtcLog log) + private static string[] UploadOperation(FileInfo fInfo, ParsedEvtcLog originalLog, OperationController originalController) { // Only upload supported 5 men, 10 men and golem logs, without anonymous players - var isWingmanCompatible = !log.ParserSettings.AnonymousPlayers && ( - log.FightData.Logic.Mode == GW2EIEvtcParser.EncounterLogic.FightLogic.ParseMode.Instanced10 || - log.FightData.Logic.Mode == GW2EIEvtcParser.EncounterLogic.FightLogic.ParseMode.Instanced5 || - log.FightData.Logic.Mode == GW2EIEvtcParser.EncounterLogic.FightLogic.ParseMode.Benchmark + var isWingmanCompatible = !originalLog.ParserSettings.AnonymousPlayers && ( + originalLog.FightData.Logic.Mode == GW2EIEvtcParser.EncounterLogic.FightLogic.ParseMode.Instanced10 || + originalLog.FightData.Logic.Mode == GW2EIEvtcParser.EncounterLogic.FightLogic.ParseMode.Instanced5 || + originalLog.FightData.Logic.Mode == GW2EIEvtcParser.EncounterLogic.FightLogic.ParseMode.Benchmark ); //Upload Process string[] uploadresult = new string[2] { "", "" }; if (Properties.Settings.Default.UploadToDPSReports) { - traces.Add("Uploading to DPSReport using EI"); - DPSReportUploadObject response = DPSReportController.UploadUsingEI(fInfo, traces, Properties.Settings.Default.DPSReportUserToken, - log.ParserSettings.AnonymousPlayers, - log.ParserSettings.DetailedWvWParse); + originalController.UpdateProgressWithCancellationCheck("Uploading to DPSReport using EI"); + DPSReportUploadObject response = DPSReportController.UploadUsingEI(fInfo, str => originalController.UpdateProgress(str), Properties.Settings.Default.DPSReportUserToken, + originalLog.ParserSettings.AnonymousPlayers, + originalLog.ParserSettings.DetailedWvWParse); uploadresult[0] = response != null ? response.Permalink : "Upload process failed"; - traces.Add("DPSReports using EI: " + uploadresult[0]); + originalController.UpdateProgressWithCancellationCheck("DPSReports using EI: " + uploadresult[0]); /* if (Properties.Settings.Default.UploadToWingman) { @@ -150,12 +145,13 @@ private static string[] UploadOperation(List traces, FileInfo fInfo, Par #if !DEBUG if (!isWingmanCompatible) { - traces.Add("Can not upload to Wingman: unsupported log"); + originalController.UpdateProgressWithCancellationCheck("Can not upload to Wingman: unsupported log"); } else { - string accName = log.LogData.PoV != null ? log.LogData.PoVAccount : null; - if (WingmanController.CheckUploadPossible(fInfo, accName, traces, ParserVersion)) + string accName = originalLog.LogData.PoV != null ? originalLog.LogData.PoVAccount : null; + + if (WingmanController.CheckUploadPossible(fInfo, accName, str => originalController.UpdateProgress(str), ParserVersion)) { try { @@ -166,14 +162,15 @@ private static string[] UploadOperation(List traces, FileInfo fInfo, Par true, Properties.Settings.Default.CustomTooShort, Properties.Settings.Default.DetailledWvW); - ParsedEvtcLog logToUse = log; - if (log.ParserSettings.ComputeDamageModifiers != expectedSettings.ComputeDamageModifiers || - log.ParserSettings.ParsePhases != expectedSettings.ParsePhases || - log.ParserSettings.ParseCombatReplay != expectedSettings.ParseCombatReplay) + ParsedEvtcLog logToUse = originalLog; + if (originalLog.ParserSettings.ComputeDamageModifiers != expectedSettings.ComputeDamageModifiers || + originalLog.ParserSettings.ParsePhases != expectedSettings.ParsePhases || + originalLog.ParserSettings.ParseCombatReplay != expectedSettings.ParseCombatReplay) { // We need to create a parser that matches Wingman's expected settings var parser = new EvtcParser(expectedSettings, APIController); - logToUse = parser.ParseLog(new ConsoleOperationController(fInfo.FullName), fInfo, out GW2EIEvtcParser.ParserHelpers.ParsingFailureReason failureReason, Properties.Settings.Default.MultiThreaded); + originalController.UpdateProgressWithCancellationCheck("Wingman: Setting mismatch, creating a new ParsedEvtcLog"); + logToUse = parser.ParseLog(originalController, fInfo, out GW2EIEvtcParser.ParserHelpers.ParsingFailureReason failureReason, Properties.Settings.Default.MultiThreaded); } byte[] jsonFile, htmlFile; var uploadResult = new UploadResults(); @@ -196,18 +193,23 @@ private static string[] UploadOperation(List traces, FileInfo fInfo, Par sw.Close(); htmlFile = ms.ToArray(); } - WingmanController.UploadProcessed(fInfo, accName, jsonFile, htmlFile, traces, ParserVersion); + if (logToUse != originalLog) + { + originalController.UpdateProgressWithCancellationCheck("Wingman: new ParsedEvtcLog processing completed"); + } + WingmanController.UploadProcessed(fInfo, accName, jsonFile, htmlFile, str => originalController.UpdateProgress(str), ParserVersion); } catch (Exception e) { - traces.Add("Can not upload to Wingman: " + e.Message); + originalController.UpdateProgressWithCancellationCheck("Can not upload to Wingman: " + e.Message); } } else { - traces.Add("Can not upload to Wingman: log already uploaded"); + originalController.UpdateProgressWithCancellationCheck("Can not upload to Wingman: log already uploaded"); } } + originalController.UpdateProgressWithCancellationCheck("Wingman: operation completed"); #endif } @@ -220,10 +222,9 @@ public static void DoWork(OperationController operation) Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); operation.Reset(); - var sw = new Stopwatch(); try { - sw.Start(); + operation.Start(); var fInfo = new FileInfo(operation.InputFile); var parser = new EvtcParser(new EvtcParserSettings(Properties.Settings.Default.Anonymous, @@ -242,12 +243,7 @@ public static void DoWork(OperationController operation) failureReason.Throw(); } operation.BasicMetaData = new OperationController.OperationBasicMetaData(log); - var externalTraces = new List(); - string[] uploadStrings = UploadOperation(externalTraces, fInfo, log); - foreach (string trace in externalTraces) - { - operation.UpdateProgressWithCancellationCheck(trace); - } + string[] uploadStrings = UploadOperation(fInfo, log, operation); if (Properties.Settings.Default.SendEmbedToWebhook && Properties.Settings.Default.UploadToDPSReports) { if (Properties.Settings.Default.SendSimpleMessageToWebhook) @@ -274,10 +270,9 @@ public static void DoWork(OperationController operation) } finally { - sw.Stop(); + operation.Stop(); GC.Collect(); Thread.CurrentThread.CurrentCulture = before; - operation.Elapsed = ("Elapsed " + sw.ElapsedMilliseconds + " ms"); } } diff --git a/GW2EIWingman/GW2EIWingman.csproj b/GW2EIWingman/GW2EIWingman.csproj index d40216f14c..decc1dda66 100644 --- a/GW2EIWingman/GW2EIWingman.csproj +++ b/GW2EIWingman/GW2EIWingman.csproj @@ -15,7 +15,7 @@ AllEnabledByDefault - 0.1.0 + 0.2.0 EliphasNUIT GW2 Elite Insights GW2 Elite Insights diff --git a/GW2EIWingman/WingmanController.cs b/GW2EIWingman/WingmanController.cs index 339cbd07e5..41acd03741 100644 --- a/GW2EIWingman/WingmanController.cs +++ b/GW2EIWingman/WingmanController.cs @@ -1,13 +1,8 @@ using System; using System.Collections.Generic; -using System.Diagnostics; -using System.Drawing; using System.IO; using System.Net; using System.Net.Http; -using System.Net.Http.Headers; -using System.Net.Mime; -using System.Runtime.InteropServices.ComTypes; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -23,6 +18,7 @@ namespace GW2EIWingman /// public static class WingmanController { + public delegate void TraceHandler(string trace); private static readonly DefaultContractResolver DefaultJsonContractResolver = new DefaultContractResolver { @@ -44,11 +40,11 @@ public static class WingmanController private static string CheckUploadURL { get; } = BaseURL + "checkUpload"; private static string UploadProcessedURL { get; } = BaseURL + "uploadProcessed"; - private static bool IsDPSReportLinkValid(string dpsReportLink, List traces) + private static bool IsDPSReportLinkValid(string dpsReportLink, TraceHandler traceHandler) { if (!dpsReportLink.Contains("https") && !dpsReportLink.Contains(".report")) { - traces.Add("Wingman: Invalid dps.report link"); + traceHandler("Wingman: Invalid dps.report link"); return false; } return true; @@ -70,14 +66,14 @@ private static string GetCheckLogQueuedOrDBURL(string dpsReportLink) } // Connection checking - private static bool CheckConnection(List traces) + private static bool CheckConnection(TraceHandler traceHandler) { - return _GetWingmanResponse("CheckConnection", TestConnectionURL, traces, HttpMethod.Get) == "True"; + return _GetWingmanResponse("CheckConnection", TestConnectionURL, traceHandler, HttpMethod.Get) == "True"; } - private static bool IsEIVersionValid(Version parserVersion, List traces) + private static bool IsEIVersionValid(Version parserVersion, TraceHandler traceHandler) { - string returnedVersion = _GetWingmanResponse("EIVersionURL", EIVersionURL, traces, HttpMethod.Get); + string returnedVersion = _GetWingmanResponse("EIVersionURL", EIVersionURL, traceHandler, HttpMethod.Get); if (returnedVersion == null) { return false; @@ -87,21 +83,21 @@ private static bool IsEIVersionValid(Version parserVersion, List traces) return parserVersion.CompareTo(expectedVersion) >= 0; } - public static bool CanBeUsed(Version parserVersion, List traces) + public static bool CanBeUsed(Version parserVersion, TraceHandler traceHandler) { - return CheckConnection(traces) && IsEIVersionValid(parserVersion, traces); + return CheckConnection(traceHandler) && IsEIVersionValid(parserVersion, traceHandler); } // - public static WingmanCheckLogQueuedOrDBObject GetCheckLogQueuedOrDB(string dpsReportLink, List traces, Version parserVersion) + public static WingmanCheckLogQueuedOrDBObject GetCheckLogQueuedOrDB(string dpsReportLink, TraceHandler traceHandler, Version parserVersion) { - if (!IsDPSReportLinkValid(dpsReportLink, traces)) + if (!IsDPSReportLinkValid(dpsReportLink, traceHandler)) { return null; } try { - return JsonConvert.DeserializeObject(GetWingmanResponse("CheckLogQueuedOrDB", GetCheckLogQueuedOrDBURL(dpsReportLink), traces, parserVersion, HttpMethod.Post), new JsonSerializerSettings + return JsonConvert.DeserializeObject(GetWingmanResponse("CheckLogQueuedOrDB", GetCheckLogQueuedOrDBURL(dpsReportLink), traceHandler, parserVersion, HttpMethod.Post), new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, ContractResolver = DefaultJsonContractResolver, @@ -110,20 +106,20 @@ public static WingmanCheckLogQueuedOrDBObject GetCheckLogQueuedOrDB(string dpsRe } catch (Exception e) { - traces.Add("Wingman: CheckLogQueuedOrDB failed - " + e.Message); + traceHandler("Wingman: CheckLogQueuedOrDB failed - " + e.Message); return null; } } - public static WingmanCheckLogQueuedObject GetCheckLogQueued(string dpsReportLink, List traces, Version parserVersion) + public static WingmanCheckLogQueuedObject GetCheckLogQueued(string dpsReportLink, TraceHandler traceHandler, Version parserVersion) { - if (!IsDPSReportLinkValid(dpsReportLink, traces)) + if (!IsDPSReportLinkValid(dpsReportLink, traceHandler)) { return null; } try { - return JsonConvert.DeserializeObject(GetWingmanResponse("CheckLogQueued", GetCheckLogQueuedOrDBURL(dpsReportLink), traces, parserVersion, HttpMethod.Post), new JsonSerializerSettings + return JsonConvert.DeserializeObject(GetWingmanResponse("CheckLogQueued", GetCheckLogQueuedOrDBURL(dpsReportLink), traceHandler, parserVersion, HttpMethod.Post), new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, ContractResolver = DefaultJsonContractResolver, @@ -132,20 +128,20 @@ public static WingmanCheckLogQueuedObject GetCheckLogQueued(string dpsReportLink } catch (Exception e) { - traces.Add("Wingman: CheckLogQueued failed - " + e.Message); + traceHandler("Wingman: CheckLogQueued failed - " + e.Message); return null; } } - public static WingmanImportLogQueuedObject ImportLogQueued(string dpsReportLink, List traces, Version parserVersion) + public static WingmanImportLogQueuedObject ImportLogQueued(string dpsReportLink, TraceHandler traceHandler, Version parserVersion) { - if (!IsDPSReportLinkValid(dpsReportLink, traces)) + if (!IsDPSReportLinkValid(dpsReportLink, traceHandler)) { return null; } try { - return JsonConvert.DeserializeObject(GetWingmanResponse("ImportLogQueued", GetCheckLogQueuedOrDBURL(dpsReportLink), traces, parserVersion, HttpMethod.Post), new JsonSerializerSettings + return JsonConvert.DeserializeObject(GetWingmanResponse("ImportLogQueued", GetCheckLogQueuedOrDBURL(dpsReportLink), traceHandler, parserVersion, HttpMethod.Post), new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, ContractResolver = DefaultJsonContractResolver, @@ -154,35 +150,35 @@ public static WingmanImportLogQueuedObject ImportLogQueued(string dpsReportLink, } catch (Exception e) { - traces.Add("Wingman: ImportLogQueued failed - " + e.Message); + traceHandler("Wingman: ImportLogQueued failed - " + e.Message); return null; } } - public static bool UploadToWingmanUsingImportLogQueued(string dpsReportLink, List traces, Version parserVersion) + public static bool UploadToWingmanUsingImportLogQueued(string dpsReportLink, TraceHandler traceHandler, Version parserVersion) { // Check if the URL is already present on Wingman - WingmanCheckLogQueuedOrDBObject wingmanCheck = GetCheckLogQueuedOrDB(dpsReportLink, traces, parserVersion); + WingmanCheckLogQueuedOrDBObject wingmanCheck = GetCheckLogQueuedOrDB(dpsReportLink, traceHandler, parserVersion); if (wingmanCheck != null) { if (wingmanCheck.InDB || wingmanCheck.InQueue) { - traces.Add("Wingman: Upload failed - Log already present in Wingman DB"); + traceHandler("Wingman: Upload failed - Log already present in Wingman DB"); return false; } else { - WingmanImportLogQueuedObject wingmanUpload = ImportLogQueued(dpsReportLink, traces, parserVersion); + WingmanImportLogQueuedObject wingmanUpload = ImportLogQueued(dpsReportLink, traceHandler, parserVersion); if (wingmanUpload != null) { if (wingmanUpload.Success != 1) { - traces.Add("Wingman: Upload failed - " + wingmanUpload.Note); + traceHandler("Wingman: Upload failed - " + wingmanUpload.Note); return true; } else { - traces.Add("Wingman: Upload successful - " + wingmanUpload.Note); + traceHandler("Wingman: Upload successful - " + wingmanUpload.Note); return true; } } @@ -192,7 +188,7 @@ public static bool UploadToWingmanUsingImportLogQueued(string dpsReportLink, Lis return false; } - public static bool CheckUploadPossible(FileInfo fi, string account, List traces, Version parserVersion) + public static bool CheckUploadPossible(FileInfo fi, string account, TraceHandler traceHandler, Version parserVersion) { string creationTime = new DateTimeOffset(fi.CreationTime).ToUnixTimeSeconds().ToString(); var data = new Dictionary { { "account", account }, { "filesize", fi.Length.ToString() }, { "timestamp", creationTime }, { "file", fi.Name } }; @@ -200,9 +196,9 @@ public static bool CheckUploadPossible(FileInfo fi, string account, List { return new FormUrlEncodedContent(data); }; - return GetWingmanResponse("CheckUploadPossible", CheckUploadURL, traces, parserVersion, HttpMethod.Post, contentCreator) == "True"; + return GetWingmanResponse("CheckUploadPossible", CheckUploadURL, traceHandler, parserVersion, HttpMethod.Post, contentCreator) == "True"; } - public static bool UploadProcessed(FileInfo fi, string account, byte[] jsonFile, byte[] htmlFile, List traces, Version parserVersion) + public static bool UploadProcessed(FileInfo fi, string account, byte[] jsonFile, byte[] htmlFile, TraceHandler traceHandler, Version parserVersion) { //var data = new Dictionary { { "account", account }, { "file", File.ReadAllText(fi.FullName) }, { "jsonfile", jsonString }, { "htmlfile", htmlString } }; byte[] fileBytes = File.ReadAllBytes(fi.FullName); @@ -225,17 +221,17 @@ public static bool UploadProcessed(FileInfo fi, string account, byte[] jsonFile, return multiPartContent; }; - string response = GetWingmanResponse("UploadProcessed", UploadProcessedURL, traces, parserVersion, HttpMethod.Post, contentCreator); + string response = GetWingmanResponse("UploadProcessed", UploadProcessedURL, traceHandler, parserVersion, HttpMethod.Post, contentCreator); return response != null && response != "False"; } // - private static string _GetWingmanResponse(string requestName, string url, List traces, HttpMethod method, Func content = null) + private static string _GetWingmanResponse(string requestName, string url, TraceHandler traceHandler, HttpMethod method, Func content = null) { const int tentatives = 5; for (int i = 0; i < tentatives; i++) { - traces.Add("Wingman: " + requestName + " tentative"); + traceHandler("Wingman: " + requestName + " tentative"); var webService = new Uri(@url); var requestMessage = new HttpRequestMessage(method, webService); requestMessage.Headers.ExpectContinue = false; @@ -261,13 +257,13 @@ private static string _GetWingmanResponse(string requestName, string url, List stringContentsTask = responseContent.ReadAsStringAsync(); string stringContents = stringContentsTask.Result; - traces.Add("Wingman: " + requestName + " successful"); + traceHandler("Wingman: " + requestName + " successful"); return stringContents; } } catch (Exception e) { - traces.Add("Wingman: " + requestName + " failed " + e.Message); + traceHandler("Wingman: " + requestName + " failed " + e.Message); } finally { @@ -278,13 +274,13 @@ private static string _GetWingmanResponse(string requestName, string url, List traces, Version parserVersion, HttpMethod method, Func content = null) + private static string GetWingmanResponse(string requestName, string url, TraceHandler traceHandler, Version parserVersion, HttpMethod method, Func content = null) { - if (!CanBeUsed(parserVersion, traces)) + if (!CanBeUsed(parserVersion, traceHandler)) { return default; } - return _GetWingmanResponse(requestName, url, traces, method, content); + return _GetWingmanResponse(requestName, url, traceHandler, method, content); } }