private void ParseLog(object logFile) { UploadController up_controller = null; System.Globalization.CultureInfo before = Thread.CurrentThread.CurrentCulture; Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); GridRow row = new GridRow(logFile as string, "") { BgWorker = new System.ComponentModel.BackgroundWorker() { WorkerReportsProgress = true } }; row.Metadata.FromConsole = true; FileInfo fInfo = new FileInfo(row.Location); if (!fInfo.Exists) { throw new CancellationException(row, new FileNotFoundException("File does not exist", fInfo.FullName)); } //Upload Process Task <string> DREITask = null; Task <string> DRRHTask = null; Task <string> RaidarTask = null; string[] uploadresult = new string[3] { "", "", "" }; try { SettingsContainer settings = new SettingsContainer(Properties.Settings.Default); Parser control = new Parser(settings); if (fInfo.Extension.Equals(".evtc", StringComparison.OrdinalIgnoreCase) || fInfo.Name.EndsWith(".evtc.zip", StringComparison.OrdinalIgnoreCase)) { //Process evtc here ParsedLog log = control.ParseLog(row, fInfo.FullName); Console.Write("Log Parsed\n"); bool uploadAuthorized = !Properties.Settings.Default.SkipFailedTries || (Properties.Settings.Default.SkipFailedTries && log.LogData.Success); if (Properties.Settings.Default.UploadToDPSReports && uploadAuthorized) { Console.Write("Uploading to DPSReports using EI\n"); if (up_controller == null) { up_controller = new UploadController(); } DREITask = Task.Factory.StartNew(() => up_controller.UploadDPSReportsEI(fInfo)); if (DREITask != null) { while (!DREITask.IsCompleted) { System.Threading.Thread.Sleep(100); } uploadresult[0] = DREITask.Result; } else { uploadresult[0] = "Failed to Define Upload Task"; } } if (Properties.Settings.Default.UploadToDPSReportsRH && uploadAuthorized) { Console.Write("Uploading to DPSReports using RH\n"); if (up_controller == null) { up_controller = new UploadController(); } DRRHTask = Task.Factory.StartNew(() => up_controller.UploadDPSReportsRH(fInfo)); if (DRRHTask != null) { while (!DRRHTask.IsCompleted) { System.Threading.Thread.Sleep(100); } uploadresult[1] = DRRHTask.Result; } else { uploadresult[1] = "Failed to Define Upload Task"; } } if (Properties.Settings.Default.UploadToRaidar && uploadAuthorized) { Console.Write("Uploading to Raidar\n"); if (up_controller == null) { up_controller = new UploadController(); } RaidarTask = Task.Factory.StartNew(() => up_controller.UploadRaidar(fInfo)); if (RaidarTask != null) { while (!RaidarTask.IsCompleted) { System.Threading.Thread.Sleep(100); } uploadresult[2] = RaidarTask.Result; } else { uploadresult[2] = "Failed to Define Upload Task"; } } if (Properties.Settings.Default.SkipFailedTries) { if (!log.LogData.Success) { throw new SkipException(); } } //Creating File //save location DirectoryInfo saveDirectory; if (Properties.Settings.Default.SaveAtOut || Properties.Settings.Default.OutLocation == null) { //Default save directory saveDirectory = fInfo.Directory; } else { //Customised save directory saveDirectory = new DirectoryInfo(Properties.Settings.Default.OutLocation); } if (saveDirectory == null) { throw new CancellationException(row, new InvalidDataException("Save Directory not found")); } string result = "fail"; if (log.LogData.Success) { result = "kill"; } StatisticsCalculator statisticsCalculator = new StatisticsCalculator(settings); StatisticsCalculator.Switches switches = new StatisticsCalculator.Switches(); if (Properties.Settings.Default.SaveOutHTML) { HTMLBuilder.UpdateStatisticSwitches(switches); } if (Properties.Settings.Default.SaveOutCSV) { CSVBuilder.UpdateStatisticSwitches(switches); } if (Properties.Settings.Default.SaveOutJSON) { JSONBuilder.UpdateStatisticSwitches(switches); } Statistics statistics = statisticsCalculator.CalculateStatistics(log, switches); Console.Write("Statistics Computed\n"); string fName = fInfo.Name.Split('.')[0]; if (Properties.Settings.Default.SaveOutHTML) { string outputFile = Path.Combine( saveDirectory.FullName, $"{fName}_{log.FightData.Logic.Extension}_{result}.html" ); using (FileStream fs = new FileStream(outputFile, FileMode.Create, FileAccess.Write)) { using (StreamWriter sw = new StreamWriter(fs)) { if (Properties.Settings.Default.NewHtmlMode) { var builder = new HTMLBuilderNew(log, settings, statistics); builder.CreateHTML(sw, saveDirectory.FullName); } else { var builder = new HTMLBuilder(log, settings, statistics, uploadresult); builder.CreateHTML(sw); } } } } if (Properties.Settings.Default.SaveOutCSV) { string outputFile = Path.Combine( saveDirectory.FullName, $"{fName}_{log.FightData.Logic.Extension}_{result}.csv" ); using (FileStream fs = new FileStream(outputFile, FileMode.Create, FileAccess.Write)) { using (StreamWriter sw = new StreamWriter(fs, Encoding.GetEncoding(1252))) { var builder = new CSVBuilder(sw, ",", log, settings, statistics, uploadresult); builder.CreateCSV(); } } } if (Properties.Settings.Default.SaveOutJSON) { string outputFile = Path.Combine( saveDirectory.FullName, $"{fName}_{log.FightData.Logic.Extension}_{result}.json" ); using (FileStream fs = new FileStream(outputFile, FileMode.Create, FileAccess.Write)) { using (StreamWriter sw = new StreamWriter(fs, Encoding.UTF8)) { var builder = new JSONBuilder(sw, log, settings, statistics, false, uploadresult); builder.CreateJSON(); } } } Console.Write("Generation Done\n"); } else { Console.Error.Write("Not EVTC"); throw new CancellationException(row, new InvalidDataException("Not EVTC")); } } catch (SkipException s) { Console.Error.Write(s.Message); } catch (Exception ex) when(!System.Diagnostics.Debugger.IsAttached) { Console.Error.Write(ex.Message); throw new CancellationException(row, ex); } finally { Thread.CurrentThread.CurrentCulture = before; } }
/// <summary> /// Invoked when a BackgroundWorker begins working. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void BgWorkerDoWork(object sender, DoWorkEventArgs e) { System.Globalization.CultureInfo before = System.Threading.Thread.CurrentThread.CurrentCulture; System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); BackgroundWorker bg = sender as BackgroundWorker; GridRow rowData = e.Argument as GridRow; UploadController up_controller = null; e.Result = rowData; bg.ThrowIfCanceled(rowData); try { FileInfo fInfo = new FileInfo(rowData.Location); if (fInfo == null || !fInfo.Exists) { bg.UpdateProgress(rowData, "File does not exist", 100); e.Cancel = true; throw new CancellationException(rowData); } //Upload Process Task <string> DREITask = null; Task <string> DRRHTask = null; Task <string> RaidarTask = null; string[] uploadresult = new string[3] { "", "", "" }; bg.UpdateProgress(rowData, " Working...", 0); SettingsContainer settings = new SettingsContainer(Properties.Settings.Default); Parser parser = new Parser(settings); if (fInfo.Extension.Equals(".evtc", StringComparison.OrdinalIgnoreCase) || fInfo.Name.EndsWith(".evtc.zip", StringComparison.OrdinalIgnoreCase)) { //Process evtc here bg.UpdateProgress(rowData, "10% - Reading Binary...", 10); ParsedLog log = parser.ParseLog(rowData, fInfo.FullName); bg.ThrowIfCanceled(rowData); bg.UpdateProgress(rowData, "35% - Data parsed", 35); bool uploadAuthorized = !Properties.Settings.Default.SkipFailedTries || (Properties.Settings.Default.SkipFailedTries && log.LogData.Success); if (Properties.Settings.Default.UploadToDPSReports && uploadAuthorized) { bg.UpdateProgress(rowData, " 40% - Uploading to DPSReports using EI...", 40); if (up_controller == null) { up_controller = new UploadController(); } DREITask = Task.Factory.StartNew(() => up_controller.UploadDPSReportsEI(fInfo)); if (DREITask != null) { while (!DREITask.IsCompleted) { System.Threading.Thread.Sleep(100); } uploadresult[0] = DREITask.Result; } else { uploadresult[0] = "Failed to Define Upload Task"; } } if (Properties.Settings.Default.UploadToDPSReportsRH && uploadAuthorized) { bg.UpdateProgress(rowData, " 40% - Uploading to DPSReports using RH...", 40); if (up_controller == null) { up_controller = new UploadController(); } DRRHTask = Task.Factory.StartNew(() => up_controller.UploadDPSReportsRH(fInfo)); if (DRRHTask != null) { while (!DRRHTask.IsCompleted) { System.Threading.Thread.Sleep(100); } uploadresult[1] = DRRHTask.Result; } else { uploadresult[1] = "Failed to Define Upload Task"; } } if (Properties.Settings.Default.UploadToRaidar && uploadAuthorized) { bg.UpdateProgress(rowData, " 40% - Uploading to Raidar...", 40); if (up_controller == null) { up_controller = new UploadController(); } RaidarTask = Task.Factory.StartNew(() => up_controller.UploadRaidar(fInfo)); if (RaidarTask != null) { while (!RaidarTask.IsCompleted) { System.Threading.Thread.Sleep(100); } uploadresult[2] = RaidarTask.Result; } else { uploadresult[2] = "Failed to Define Upload Task"; } } if (Properties.Settings.Default.SkipFailedTries) { if (!log.LogData.Success) { throw new SkipException(); } } //Creating File //save location DirectoryInfo saveDirectory; if (Properties.Settings.Default.SaveAtOut || Properties.Settings.Default.OutLocation == null) { //Default save directory saveDirectory = fInfo.Directory; } else { //Customised save directory saveDirectory = new DirectoryInfo(Properties.Settings.Default.OutLocation); } if (saveDirectory == null) { throw new CancellationException(rowData, new Exception("Invalid save directory")); } string result = log.LogData.Success ? "kill" : "fail"; StatisticsCalculator statisticsCalculator = new StatisticsCalculator(settings); StatisticsCalculator.Switches switches = new StatisticsCalculator.Switches(); if (Properties.Settings.Default.SaveOutHTML) { HTMLBuilder.UpdateStatisticSwitches(switches); } if (Properties.Settings.Default.SaveOutCSV) { CSVBuilder.UpdateStatisticSwitches(switches); } if (Properties.Settings.Default.SaveOutJSON) { JSONBuilder.UpdateStatisticSwitches(switches); } Statistics statistics = statisticsCalculator.CalculateStatistics(log, switches); bg.UpdateProgress(rowData, "85% - Statistics computed", 85); string fName = fInfo.Name.Split('.')[0]; bg.UpdateProgress(rowData, "90% - Creating File...", 90); if (Properties.Settings.Default.SaveOutHTML) { string outputFile = Path.Combine( saveDirectory.FullName, $"{fName}_{log.FightData.Logic.Extension}_{result}.html" ); rowData.LogLocation = outputFile; using (var fs = new FileStream(outputFile, FileMode.Create, FileAccess.Write)) using (var sw = new StreamWriter(fs)) { if (Properties.Settings.Default.NewHtmlMode) { var builder = new HTMLBuilderNew(log, settings, statistics); builder.CreateHTML(sw, saveDirectory.FullName); } else { var builder = new HTMLBuilder(log, settings, statistics, uploadresult); builder.CreateHTML(sw); } } } if (Properties.Settings.Default.SaveOutCSV) { string outputFile = Path.Combine( saveDirectory.FullName, $"{fName}_{log.FightData.Logic.Extension}_{result}.csv" ); string splitString = ""; if (rowData.LogLocation != null) { splitString = ","; } rowData.LogLocation += splitString + outputFile; using (var fs = new FileStream(outputFile, FileMode.Create, FileAccess.Write)) using (var sw = new StreamWriter(fs, Encoding.GetEncoding(1252))) { var builder = new CSVBuilder(sw, ",", log, settings, statistics, uploadresult); builder.CreateCSV(); } } if (Properties.Settings.Default.SaveOutJSON) { string outputFile = Path.Combine( saveDirectory.FullName, $"{fName}_{log.FightData.Logic.Extension}_{result}.json" ); string splitString = ""; if (rowData.LogLocation != null) { splitString = ","; } rowData.LogLocation += splitString + outputFile; using (var fs = new FileStream(outputFile, FileMode.Create, FileAccess.Write)) using (var sw = new StreamWriter(fs, Encoding.UTF8)) { var builder = new JSONBuilder(sw, log, settings, statistics, false, uploadresult); builder.CreateJSON(); } } bg.UpdateProgress(rowData, $"100% - Complete_{log.FightData.Logic.Extension}_{result}", 100); } else { bg.UpdateProgress(rowData, "Not EVTC", 100); e.Cancel = true; Console.Error.Write("Not EVTC"); throw new CancellationException(rowData); } } catch (SkipException s) { Console.Write(s.Message); throw new CancellationException(rowData, s); } catch (Exception ex) when(!System.Diagnostics.Debugger.IsAttached) { Console.Error.Write(ex.Message); throw new CancellationException(rowData, ex); } finally { System.Threading.Thread.CurrentThread.CurrentCulture = before; } }