diff --git a/CLI/App.config b/CLI/App.config new file mode 100644 index 000000000..0ebea3d13 --- /dev/null +++ b/CLI/App.config @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CLI/BaseCommand.cs b/CLI/BaseCommand.cs new file mode 100644 index 000000000..ba5cf4816 --- /dev/null +++ b/CLI/BaseCommand.cs @@ -0,0 +1,63 @@ +using System; +using System.IO; +using System.Threading.Tasks; + +namespace CLI +{ + internal abstract class BaseCommand + { + private readonly string _name; + private readonly string _description; + public abstract Task Run(string[] args); + public abstract void PrintHelp(); + + protected BaseCommand(string name, string description = "") + { + _name = name; + _description = description; + } + + public string GetName() + { + return _name; + } + + public string GetDescription() + { + return _description; + } + + public void ParseArgs(string[] args) + { + foreach (string arg in args) + { + if (arg == "--help") + { + PrintHelp(); + Environment.Exit(0); + } + } + } + + protected bool IsCurrentDirectoryWritable() + { + return IsDirectoryWritable(Directory.GetCurrentDirectory()); + } + + protected bool IsDirectoryWritable(string directoryPath) + { + try + { + using (FileStream fs = File.Create(Path.Combine(directoryPath, Path.GetRandomFileName()), 1, FileOptions.DeleteOnClose)) + { + } + + return true; + } + catch + { + return false; + } + } + } +} diff --git a/CLI/CLI.csproj b/CLI/CLI.csproj new file mode 100644 index 000000000..78c60da02 --- /dev/null +++ b/CLI/CLI.csproj @@ -0,0 +1,91 @@ + + + + + Debug + AnyCPU + {86541EF7-D99F-46CC-8836-020D0AE1BCE9} + Exe + CLI + csgodm + v4.6.2 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + app.ico + + + + ..\packages\CommonServiceLocator.2.0.6\lib\net46\CommonServiceLocator.dll + + + ..\packages\MvvmLightLibs.5.4.1.1\lib\net45\GalaSoft.MvvmLight.dll + + + ..\packages\MvvmLightLibs.5.4.1.1\lib\net45\GalaSoft.MvvmLight.Extras.dll + + + ..\packages\MvvmLightLibs.5.4.1.1\lib\net45\GalaSoft.MvvmLight.Platform.dll + + + + + ..\packages\MvvmLightLibs.5.4.1.1\lib\net45\System.Windows.Interactivity.dll + + + + + + + + + + + + + + + + + + + + + + + + + {4180E444-4AA1-4564-9296-50323FE504FE} + Core + + + {B0B2F0B5-4E7F-41AE-817F-9C0F30DA5367} + Services + + + + + + + \ No newline at end of file diff --git a/CLI/DownloadCommand.cs b/CLI/DownloadCommand.cs new file mode 100644 index 000000000..70d8b00ac --- /dev/null +++ b/CLI/DownloadCommand.cs @@ -0,0 +1,265 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Core; +using Services.Concrete; +using Services.Exceptions; +using Services.Interfaces; + +namespace CLI +{ + internal class DownloadCommand : BaseCommand + { + public const string COMMAND_NAME = "download"; + private string _outputFolderPath; + private readonly ISteamService _steamService; + private readonly IDemosService _demoService; + private readonly CancellationTokenSource _cts; + private readonly List _shareCodes; + + public DownloadCommand() : base(COMMAND_NAME, @"Download last MM demos of the current Steam account or from share codes") + { + _shareCodes = new List(); + _cts = new CancellationTokenSource(); + _steamService = new SteamService(); + _demoService = new DemosService(_steamService); + BuildDefaultOutputFolderPath(); + } + + public override void PrintHelp() + { + Console.WriteLine(GetDescription()); + Console.WriteLine(@""); + Console.WriteLine($@"Usage: {Program.ExeName} {COMMAND_NAME} [shareCodes...] [--output]"); + Console.WriteLine(@""); + Console.WriteLine(@"The --output argument specify the directory where demos will be downloaded."); + Console.WriteLine(@"Default to the CSGO ""replays"" folder or the current directory if the ""replays"" folder doesn't exsits."); + Console.WriteLine(@""); + Console.WriteLine(@"Examples:"); + Console.WriteLine(@""); + Console.WriteLine(@"To download last MM demos of the current Steam account:"); + Console.WriteLine($@" {Program.ExeName} {COMMAND_NAME}"); + Console.WriteLine(@""); + Console.WriteLine(@"To download demos from share codes:"); + Console.WriteLine($@" {Program.ExeName} {COMMAND_NAME} CSGO-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX CSGO-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX"); + Console.WriteLine(@""); + Console.WriteLine(@"To change the directory where demos will be downloaded:"); + Console.WriteLine($@" {Program.ExeName} {COMMAND_NAME} --output ""C:\Users\username\Downloads"""); + } + + private new void ParseArgs(string[] args) + { + base.ParseArgs(args); + + for (int index = 0; index < args.Length; index++) + { + string arg = args[index]; + bool isOption = arg.StartsWith("--"); + if (isOption) + { + switch (arg) + { + case "--output": + if (args.Length > index + 1) + { + index += 1; + + string directoryPath = Path.GetFullPath(args[index]); + bool folderExists = Directory.Exists(directoryPath); + if (!folderExists) + { + Console.WriteLine(@"The output folder doesn't exists"); + Environment.Exit(1); + } + + if (!IsDirectoryWritable(directoryPath)) + { + Console.WriteLine(@"The output folder is not writable"); + Environment.Exit(1); + } + + _outputFolderPath = directoryPath; + } + else + { + Console.WriteLine(@"Missing --output argument value"); + Environment.Exit(1); + } + + break; + default: + Console.WriteLine($@"Unknown option {arg}"); + Environment.Exit(1); + break; + } + } + else + { + if (_shareCodes.Contains(arg)) + { + continue; + } + + try + { + ShareCode.Decode(arg); + _shareCodes.Add(arg); + } + catch (ShareCode.ShareCodePatternException) + { + Console.WriteLine($@"Invalid share code {arg}"); + Environment.Exit(1); + } + catch (Exception ex) + { + Console.WriteLine(ex); + Environment.Exit(1); + } + } + } + } + + public override async Task Run(string[] args) + { + ParseArgs(args); + + if (_shareCodes.Count > 0) + { + foreach (string shareCode in _shareCodes) + { + Console.WriteLine($@"Retrieving match from share code {shareCode}..."); + try + { + int exitCode = await _steamService.DownloadDemoFromShareCode(shareCode, _cts.Token); + await HandleBoilerExitCode(exitCode); + } + catch (InvalidBoilerExecutableException) + { + Console.WriteLine(@"Invalid boiler executable"); + Environment.Exit(1); + } + catch (Exception ex) + { + Console.WriteLine($@"Error while downloading demo from share code {shareCode}: {ex.Message}"); + Environment.Exit(1); + } + } + } + else + { + try + { + Console.WriteLine(@"Retrieving recent matches for current Steam account..."); + int exitCode = await _steamService.GenerateMatchListFile(_cts.Token); + await HandleBoilerExitCode(exitCode); + } + catch (InvalidBoilerExecutableException) + { + Console.WriteLine(@"Invalid boiler executable"); + Environment.Exit(1); + } + catch (Exception ex) + { + Console.WriteLine($@"Error while downloading demos: {ex.Message}"); + Environment.Exit(1); + } + } + } + + private async Task HandleBoilerExitCode(int exitCode) + { + switch (exitCode) + { + case (int)BoilerExitCode.Success: + await DownloadDemos(); + break; + case (int)BoilerExitCode.FatalError: + Console.WriteLine($@"Fatal error"); + break; + case (int)BoilerExitCode.InvalidArguments: + Console.WriteLine(@"Invalid arguments"); + break; + case (int)BoilerExitCode.CommunicationFailure: + Console.WriteLine(@"CSGO Game coordinator communication failure"); ; + break; + case (int)BoilerExitCode.AlreadyConnectedToGC: + Console.WriteLine(@"Already connected to CSGO GC, make sure to close CSGO and retry"); + break; + case (int)BoilerExitCode.SteamRestartRequired: + Console.WriteLine(@"Steam needs to be restarted"); + break; + case (int)BoilerExitCode.SteamNotRunningOrLoggedIn: + Console.WriteLine(@"Steam is not running or the current account is not logged in"); + break; + case (int)BoilerExitCode.SteamUserNotLoggedIn: + Console.WriteLine(@"Current Steam account not connected (maybe offline)"); + break; + case (int)BoilerExitCode.NoMatchesFound: + Console.WriteLine(_shareCodes.Count > 0 ? @"Demo link expired" : @"No matches found"); + break; + case (int)BoilerExitCode.WriteFileFailure: + Console.WriteLine(@"An error occurred while writing matches file."); + break; + default: + Console.WriteLine($@"Unknown error (code: {exitCode})"); + break; + } + } + + private async Task DownloadDemos() + { + try + { + _demoService.DownloadFolderPath = _outputFolderPath; + Dictionary demoUrlPerDemoName = await _demoService.GetDemoListUrl(); + if (demoUrlPerDemoName.Count > 0) + { + Console.WriteLine(@"Downloading demos..."); + Console.WriteLine($@"Destination folder: {_demoService.DownloadFolderPath}"); + for (int index = 1; index < demoUrlPerDemoName.Count + 1; index++) + { + string demoName = demoUrlPerDemoName.ElementAt(index - 1).Key; + string demoUrl = demoUrlPerDemoName.ElementAt(index - 1).Value; + Console.WriteLine($@"Downloading demo {demoUrl}"); + await _demoService.DownloadDemo(demoUrl, demoName); + Console.WriteLine($@"Extracting demo archive {demoUrl}"); + await _demoService.DecompressDemoArchive(demoName); + } + + Console.WriteLine($@"Demos downloaded in {_demoService.DownloadFolderPath}"); + } + else + { + Console.WriteLine(@"No matches found or demos already exist in output folder"); + } + } + catch (Exception e) + { + Console.WriteLine(e); + } + } + + private void BuildDefaultOutputFolderPath() + { + string csgoFolderPath = AppSettings.GetCsgoPath(); + string replaysFolderPath = Path.GetFullPath(csgoFolderPath + Path.DirectorySeparatorChar + "replays"); + if (Directory.Exists(replaysFolderPath)) + { + _outputFolderPath = replaysFolderPath; + return; + } + + if (IsCurrentDirectoryWritable()) + { + _outputFolderPath = Directory.GetCurrentDirectory(); + } + else + { + _outputFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); + } + } + } +} diff --git a/CLI/ExportCommand.cs b/CLI/ExportCommand.cs new file mode 100644 index 000000000..fd01b787f --- /dev/null +++ b/CLI/ExportCommand.cs @@ -0,0 +1,169 @@ +using System; +using System.Collections.Generic; +using System.IO; +using Core.Models.Source; +using System.Linq; + +namespace CLI +{ + internal abstract class ExportCommand : BaseCommand + { + protected Source _source; + protected readonly List _demoPaths; + protected string _outputFolderPath; + protected List _availableSources = new List(); + + public ExportCommand(string commandName, string description) : base(commandName, description) + { + _demoPaths = new List(); + foreach (Source source in Source.Sources) + { + if (source.Name != Pov.NAME) + { + _availableSources.Add(source.Name); + } + } + } + + protected void ParseArgs(string[] args, string[] allowedOptions) + { + base.ParseArgs(args); + + for (int index = 0; index < args.Length; index++) + { + string arg = args[index]; + bool isOption = arg.StartsWith("--"); + if (isOption) + { + switch (arg) + { + case "--source": + if (args.Length > index + 1) + { + index += 1; + string sourceName = args[index]; + _source = Source.Factory(sourceName); + if (_source == null) + { + Console.WriteLine($@"Invalid source: {sourceName}"); + Environment.Exit(1); + } + } + else + { + Console.WriteLine(@"Missing --source argument value"); + Environment.Exit(1); + } + + break; + case "--output": + if (args.Length > index + 1) + { + index += 1; + _outputFolderPath = Path.GetFullPath(args[index]).TrimEnd(Path.DirectorySeparatorChar); + bool folderExists = Directory.Exists(_outputFolderPath); + if (!folderExists) + { + Console.WriteLine(@"The output folder doesn't exists"); + Environment.Exit(1); + } + + if (!IsDirectoryWritable(_outputFolderPath)) + { + Console.WriteLine(@"The output folder is not writable"); + Environment.Exit(1); + } + } + else + { + Console.WriteLine(@"Missing --output argument value"); + Environment.Exit(1); + } + + break; + default: + if (!allowedOptions.Contains(arg)) + { + Console.WriteLine($@"Unknown option {arg}"); + Environment.Exit(1); + } + + break; + } + } + else + { + bool isDemoFile = arg.EndsWith(".dem"); + if (isDemoFile) + { + bool fileExists = File.Exists(arg); + if (!fileExists) + { + Console.WriteLine($@"The file doesn't exists: {arg}"); + Environment.Exit(1); + } + + if (_demoPaths.Contains(arg)) + { + continue; + } + + _demoPaths.Add(arg); + } + else + { + try + { + if (arg.EndsWith("\"")) + { + arg = arg.Substring(0, arg.Length - 1) + "\\"; + } + + string directoryPath = Path.GetFullPath(arg); + bool directoryExists = Directory.Exists(directoryPath); + if (directoryExists) + { + string[] files = Directory.GetFiles(directoryPath, "*.dem"); + foreach (string file in files) + { + if (_demoPaths.Contains(file)) + { + continue; + } + + _demoPaths.Add(file); + } + } + else + { + Console.WriteLine($@"The directory doesn't exists: {arg}"); + Environment.Exit(1); + } + } + catch (Exception ex) + { + Console.WriteLine($@"Invalid directory: {ex.Message}"); + Environment.Exit(1); + } + } + } + } + } + + protected string BuildOutputFolderPathFromDemoPath(string demoPath) + { + if (!string.IsNullOrEmpty(_outputFolderPath)) + { + return _outputFolderPath; + } + + string demoFolderPath = Path.GetDirectoryName(demoPath); + if (IsDirectoryWritable(demoFolderPath)) + { + return demoFolderPath; + } + + return Environment.GetFolderPath(Environment.SpecialFolder.Desktop); + } + } +} diff --git a/CLI/HelpCommand.cs b/CLI/HelpCommand.cs new file mode 100644 index 000000000..78d2b61fa --- /dev/null +++ b/CLI/HelpCommand.cs @@ -0,0 +1,37 @@ +using System; +using System.Threading.Tasks; + +namespace CLI +{ + internal class HelpCommand : BaseCommand + { + public const string COMMAND_NAME = "help"; + private readonly BaseCommand[] _commands; + + public HelpCommand(BaseCommand[] commands) : base(COMMAND_NAME) + { + _commands = commands; + } + + public override Task Run(string[] args) + { + PrintHelp(); + + return Task.FromResult(true); + } + + public override void PrintHelp() + { + Console.WriteLine(@"CSGO Demo Manager CLI"); + Console.WriteLine(@""); + Console.WriteLine($@" Usage: {Program.ExeName} [arguments]"); + Console.WriteLine(@""); + Console.WriteLine(@"The commands are:"); + Console.WriteLine(@""); + foreach (BaseCommand command in _commands) + { + Console.WriteLine($@" {command.GetName(),-20} {command.GetDescription()}"); + } + } + } +} diff --git a/CLI/JsonCommand.cs b/CLI/JsonCommand.cs new file mode 100644 index 000000000..8111605c2 --- /dev/null +++ b/CLI/JsonCommand.cs @@ -0,0 +1,88 @@ +using System; +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using Core.Models; +using Services.Concrete; +using Services.Concrete.Analyzer; + +namespace CLI +{ + internal class JsonCommand : ExportCommand + { + public const string COMMAND_NAME = "json"; + + public JsonCommand() : base(COMMAND_NAME, @"Export demos into JSON files") + { + } + + public override void PrintHelp() + { + Console.WriteLine(GetDescription()); + Console.WriteLine(@""); + Console.WriteLine($@"Usage: {Program.ExeName} {COMMAND_NAME} demoPaths... [--output] [--source]"); + Console.WriteLine(@""); + Console.WriteLine(@"Demos path can be either .dem files location or a directory. It can be relative or absolute."); + Console.WriteLine(@"The --output argument specify the directory where output files will be saved."); + Console.WriteLine($@"The --source argument force the analysis logic of the demo analyzer. Available values: [{string.Join(",", _availableSources)}]"); + Console.WriteLine(@""); + Console.WriteLine(@"Examples:"); + Console.WriteLine(@""); + Console.WriteLine(@"Export a demo:"); + Console.WriteLine($@" {Program.ExeName} {COMMAND_NAME} ""C:\Users\username\Desktop\demo.dem"""); + Console.WriteLine(@""); + Console.WriteLine(@"Export multiple demos:"); + Console.WriteLine($@" {Program.ExeName} {COMMAND_NAME} ""C:\Users\username\Desktop\demo.dem"" ""C:\Users\username\Desktop\demo2.dem"""); + Console.WriteLine(@""); + Console.WriteLine(@"Export all demos in a directory using the ESL analyzer and save it in a custom directory:"); + Console.WriteLine($@" {Program.ExeName} {COMMAND_NAME} ""C:\Users\username\Desktop\MyFolder"" --output ""C:\Users\username\Documents"" --source esl"); + } + + private new void ParseArgs(string[] args) + { + base.ParseArgs(args, new string[] { }); + } + + public override async Task Run(string[] args) + { + ParseArgs(args); + + if (_demoPaths.Count == 0) + { + Console.WriteLine(@"No demo paths provided"); + return; + } + + try + { + foreach (string demoPath in _demoPaths) + { + Console.WriteLine($@"Analyzing demo {demoPath}"); + Demo demo = DemoAnalyzer.ParseDemoHeader(demoPath); + if (_source != null) + { + demo.Source = _source; + } + + DemoAnalyzer analyzer = DemoAnalyzer.Factory(demo); + demo = await analyzer.AnalyzeDemoAsync(new CancellationTokenSource().Token); + Console.WriteLine(@"Generating JSON file"); + string outputFolderPath = BuildOutputFolderPathFromDemoPath(demoPath); + CacheService cacheService = new CacheService(); + string jsonFilePath = await cacheService.GenerateJsonAsync(demo, outputFolderPath); + Console.WriteLine($@"JSON file generated at {jsonFilePath}"); + } + } + catch (FileNotFoundException ex) + { + Console.WriteLine($@"The demo doesn't exists: {ex.FileName}"); + Environment.Exit(1); + } + catch (Exception ex) + { + Console.WriteLine($@"Error while exporting demo: {ex.Message}"); + Environment.Exit(1); + } + } + } +} diff --git a/CLI/Program.cs b/CLI/Program.cs new file mode 100644 index 000000000..9ab1c6a65 --- /dev/null +++ b/CLI/Program.cs @@ -0,0 +1,52 @@ +using System; +using System.Threading.Tasks; + +namespace CLI +{ + internal class Program + { + public static string ExeName = AppDomain.CurrentDomain.FriendlyName; + private static readonly BaseCommand[] COMMANDS = { new JsonCommand(), new XlsxCommand(), new DownloadCommand() }; + + private static async Task Main(string[] args) + { + string commandName = ""; + string[] commandArgs = Array.Empty(); + if (args.Length > 0) + { + commandName = args[0]; + commandArgs = new string[args.Length - 1]; + Array.Copy(args, 1, commandArgs, 0, commandArgs.Length); + } + + BaseCommand command = GetCommandToRun(commandName); + if (command == null) + { + Console.WriteLine($@"{commandName}: unknown command"); + Console.WriteLine($@"Run '{ExeName} help' for usage."); + } + else + { + await command.Run(commandArgs); + } + } + + private static BaseCommand GetCommandToRun(string commandName) + { + if (commandName == "" || commandName == HelpCommand.COMMAND_NAME || commandName == "--help") + { + return new HelpCommand(COMMANDS); + } + + foreach (BaseCommand command in COMMANDS) + { + if (command.GetName() == commandName) + { + return command; + } + } + + return null; + } + } +} diff --git a/CLI/Properties/AssemblyInfo.cs b/CLI/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..93a5348b7 --- /dev/null +++ b/CLI/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("CLI")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("CLI")] +[assembly: AssemblyCopyright("Copyright © 2022")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("86541ef7-d99f-46cc-8836-020d0ae1bce9")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/CLI/XlsxCommand.cs b/CLI/XlsxCommand.cs new file mode 100644 index 000000000..6b1a74732 --- /dev/null +++ b/CLI/XlsxCommand.cs @@ -0,0 +1,137 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using Core.Models; +using Services.Concrete.Analyzer; +using Services.Concrete.Excel; + +namespace CLI +{ + internal class XlsxCommand : ExportCommand + { + public const string COMMAND_NAME = "xlsx"; + private bool _exportIntoSingleFile = false; + + public XlsxCommand() : base(COMMAND_NAME, @"Export demos into XLSX files") + { + } + + public override void PrintHelp() + { + Console.WriteLine(GetDescription()); + Console.WriteLine(@""); + Console.WriteLine($@"Usage: {Program.ExeName} {COMMAND_NAME} demoPaths... [--output] [--source] [--single]"); + Console.WriteLine(@""); + Console.WriteLine(@"Demos path can be either .dem files location or a directory. It can be relative or absolute."); + Console.WriteLine(@"The --output argument specify the directory where output files will be saved."); + Console.WriteLine($@"The --source argument force the analysis logic of the demo analyzer. Available values: [{string.Join(",", _availableSources)}]"); + Console.WriteLine($@"The --single argument generates a single XLSX file instead of one per demo."); + Console.WriteLine(@""); + Console.WriteLine(@"Examples:"); + Console.WriteLine(@""); + Console.WriteLine(@"Export a demo:"); + Console.WriteLine($@" {Program.ExeName} {COMMAND_NAME} ""C:\Users\username\Desktop\demo.dem"""); + Console.WriteLine(@""); + Console.WriteLine(@"Export multiple demos:"); + Console.WriteLine($@" {Program.ExeName} {COMMAND_NAME} ""C:\Users\username\Desktop\demo.dem"" ""C:\Users\username\Desktop\demo2.dem"""); + Console.WriteLine(@""); + Console.WriteLine(@"Export all demos in a directory using the ESL analyzer and save it in a custom directory:"); + Console.WriteLine($@" {Program.ExeName} {COMMAND_NAME} ""C:\Users\username\Desktop\MyFolder"" --output ""C:\Users\username\Documents"" --source esl"); + } + + private new void ParseArgs(string[] args) + { + ParseArgs(args, new string[] { "--single" }); + for (int index = 0; index < args.Length; index++) + { + if (args[index] == "--single") + { + _exportIntoSingleFile = true; + break; + } + } + } + + public override async Task Run(string[] args) + { + ParseArgs(args); + + if (_demoPaths.Count == 0) + { + Console.WriteLine(@"No demo paths provided"); + return; + } + + try + { + ExcelService excelService = new ExcelService(); + List demos = new List(); + + foreach (string demoPath in _demoPaths) + { + Console.WriteLine($@"Analyzing demo {demoPath}"); + Demo demo = DemoAnalyzer.ParseDemoHeader(demoPath); + if (_source != null) + { + demo.Source = _source; + } + + DemoAnalyzer analyzer = DemoAnalyzer.Factory(demo); + demo = await analyzer.AnalyzeDemoAsync(new CancellationTokenSource().Token); + + if (_exportIntoSingleFile) + { + demos.Add(demo); + } + else + { + Console.WriteLine($@"Generating XLSX file"); + string outputFolderPath = BuildOutputFolderPathFromDemoPath(demoPath); + string fileName = outputFolderPath + Path.DirectorySeparatorChar + demo.Name + ".xlsx"; + await excelService.GenerateXls(demo, fileName); + Console.WriteLine($@"XLSX file generated at {fileName}"); + } + } + + if (_exportIntoSingleFile) + { + if (demos.Count == 0) + { + Console.WriteLine(@"No demos to export"); + + return; + } + + if (string.IsNullOrEmpty(_outputFolderPath)) + { + if (IsCurrentDirectoryWritable()) + { + _outputFolderPath = Directory.GetCurrentDirectory(); + } + else + { + _outputFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); + } + } + + Console.WriteLine(@"Generating XLSX file"); + string fileName = _outputFolderPath + Path.DirectorySeparatorChar + "export-" + DateTime.Now.ToString("yy-MM-dd-hh-mm-ss") + ".xlsx"; + await excelService.GenerateXls(demos, fileName); + Console.WriteLine($@"XLSX file generated at {fileName}"); + } + } + catch (FileNotFoundException ex) + { + Console.WriteLine($@"The demo doesn't exists: {ex.FileName}"); + Environment.Exit(1); + } + catch (Exception ex) + { + Console.WriteLine($@"Error while exporting demo: {ex.Message}"); + Environment.Exit(1); + } + } + } +} diff --git a/CLI/app.ico b/CLI/app.ico new file mode 100644 index 000000000..06308003f Binary files /dev/null and b/CLI/app.ico differ diff --git a/CLI/packages.config b/CLI/packages.config new file mode 100644 index 000000000..8c8ddaa10 --- /dev/null +++ b/CLI/packages.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/CSGO Demos Manager.sln b/CSGO Demos Manager.sln index 31e2e4b82..0e9653bfd 100644 --- a/CSGO Demos Manager.sln +++ b/CSGO Demos Manager.sln @@ -45,75 +45,162 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution setup.iss = setup.iss EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CLI", "CLI\CLI.csproj", "{86541EF7-D99F-46CC-8836-020D0AE1BCE9}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Bitstream-Debugging|Any CPU = Bitstream-Debugging|Any CPU Bitstream-Debugging|x86 = Bitstream-Debugging|x86 + Debug|Any CPU = Debug|Any CPU Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU Release|x86 = Release|x86 + SavePropValues|Any CPU = SavePropValues|Any CPU SavePropValues|x86 = SavePropValues|x86 + YoloDebug|Any CPU = YoloDebug|Any CPU YoloDebug|x86 = YoloDebug|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1D6D9598-4348-4444-A8DF-A634CA0D371B}.Bitstream-Debugging|Any CPU.ActiveCfg = Debug-release|x86 + {1D6D9598-4348-4444-A8DF-A634CA0D371B}.Bitstream-Debugging|Any CPU.Build.0 = Debug-release|x86 {1D6D9598-4348-4444-A8DF-A634CA0D371B}.Bitstream-Debugging|x86.ActiveCfg = Debug|x86 {1D6D9598-4348-4444-A8DF-A634CA0D371B}.Bitstream-Debugging|x86.Build.0 = Debug|x86 + {1D6D9598-4348-4444-A8DF-A634CA0D371B}.Debug|Any CPU.ActiveCfg = Debug|x86 + {1D6D9598-4348-4444-A8DF-A634CA0D371B}.Debug|Any CPU.Build.0 = Debug|x86 {1D6D9598-4348-4444-A8DF-A634CA0D371B}.Debug|x86.ActiveCfg = Debug|x86 {1D6D9598-4348-4444-A8DF-A634CA0D371B}.Debug|x86.Build.0 = Debug|x86 + {1D6D9598-4348-4444-A8DF-A634CA0D371B}.Release|Any CPU.ActiveCfg = Release|x86 + {1D6D9598-4348-4444-A8DF-A634CA0D371B}.Release|Any CPU.Build.0 = Release|x86 {1D6D9598-4348-4444-A8DF-A634CA0D371B}.Release|x86.ActiveCfg = Release|x86 {1D6D9598-4348-4444-A8DF-A634CA0D371B}.Release|x86.Build.0 = Release|x86 + {1D6D9598-4348-4444-A8DF-A634CA0D371B}.SavePropValues|Any CPU.ActiveCfg = Debug-release|x86 + {1D6D9598-4348-4444-A8DF-A634CA0D371B}.SavePropValues|Any CPU.Build.0 = Debug-release|x86 {1D6D9598-4348-4444-A8DF-A634CA0D371B}.SavePropValues|x86.ActiveCfg = Release|x86 {1D6D9598-4348-4444-A8DF-A634CA0D371B}.SavePropValues|x86.Build.0 = Release|x86 + {1D6D9598-4348-4444-A8DF-A634CA0D371B}.YoloDebug|Any CPU.ActiveCfg = Debug-release|x86 + {1D6D9598-4348-4444-A8DF-A634CA0D371B}.YoloDebug|Any CPU.Build.0 = Debug-release|x86 {1D6D9598-4348-4444-A8DF-A634CA0D371B}.YoloDebug|x86.ActiveCfg = Debug|x86 {1D6D9598-4348-4444-A8DF-A634CA0D371B}.YoloDebug|x86.Build.0 = Debug|x86 + {22D4CFC7-6810-4C18-A353-71A49782394F}.Bitstream-Debugging|Any CPU.ActiveCfg = Bitstream-Debugging|Any CPU + {22D4CFC7-6810-4C18-A353-71A49782394F}.Bitstream-Debugging|Any CPU.Build.0 = Bitstream-Debugging|Any CPU {22D4CFC7-6810-4C18-A353-71A49782394F}.Bitstream-Debugging|x86.ActiveCfg = Bitstream-Debugging|Any CPU {22D4CFC7-6810-4C18-A353-71A49782394F}.Bitstream-Debugging|x86.Build.0 = Bitstream-Debugging|Any CPU + {22D4CFC7-6810-4C18-A353-71A49782394F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {22D4CFC7-6810-4C18-A353-71A49782394F}.Debug|Any CPU.Build.0 = Debug|Any CPU {22D4CFC7-6810-4C18-A353-71A49782394F}.Debug|x86.ActiveCfg = Debug|Any CPU {22D4CFC7-6810-4C18-A353-71A49782394F}.Debug|x86.Build.0 = Debug|Any CPU + {22D4CFC7-6810-4C18-A353-71A49782394F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {22D4CFC7-6810-4C18-A353-71A49782394F}.Release|Any CPU.Build.0 = Release|Any CPU {22D4CFC7-6810-4C18-A353-71A49782394F}.Release|x86.ActiveCfg = Release|Any CPU {22D4CFC7-6810-4C18-A353-71A49782394F}.Release|x86.Build.0 = Release|Any CPU + {22D4CFC7-6810-4C18-A353-71A49782394F}.SavePropValues|Any CPU.ActiveCfg = SavePropValues|Any CPU + {22D4CFC7-6810-4C18-A353-71A49782394F}.SavePropValues|Any CPU.Build.0 = SavePropValues|Any CPU {22D4CFC7-6810-4C18-A353-71A49782394F}.SavePropValues|x86.ActiveCfg = SavePropValues|Any CPU {22D4CFC7-6810-4C18-A353-71A49782394F}.SavePropValues|x86.Build.0 = SavePropValues|Any CPU + {22D4CFC7-6810-4C18-A353-71A49782394F}.YoloDebug|Any CPU.ActiveCfg = YoloDebug|Any CPU + {22D4CFC7-6810-4C18-A353-71A49782394F}.YoloDebug|Any CPU.Build.0 = YoloDebug|Any CPU {22D4CFC7-6810-4C18-A353-71A49782394F}.YoloDebug|x86.ActiveCfg = YoloDebug|Any CPU {22D4CFC7-6810-4C18-A353-71A49782394F}.YoloDebug|x86.Build.0 = YoloDebug|Any CPU + {9E6E1490-43BD-4925-8A3F-84B962828208}.Bitstream-Debugging|Any CPU.ActiveCfg = Debug-release|x86 + {9E6E1490-43BD-4925-8A3F-84B962828208}.Bitstream-Debugging|Any CPU.Build.0 = Debug-release|x86 {9E6E1490-43BD-4925-8A3F-84B962828208}.Bitstream-Debugging|x86.ActiveCfg = Debug|x86 {9E6E1490-43BD-4925-8A3F-84B962828208}.Bitstream-Debugging|x86.Build.0 = Debug|x86 + {9E6E1490-43BD-4925-8A3F-84B962828208}.Debug|Any CPU.ActiveCfg = Debug|x86 + {9E6E1490-43BD-4925-8A3F-84B962828208}.Debug|Any CPU.Build.0 = Debug|x86 {9E6E1490-43BD-4925-8A3F-84B962828208}.Debug|x86.ActiveCfg = Debug|x86 {9E6E1490-43BD-4925-8A3F-84B962828208}.Debug|x86.Build.0 = Debug|x86 + {9E6E1490-43BD-4925-8A3F-84B962828208}.Release|Any CPU.ActiveCfg = Release|x86 + {9E6E1490-43BD-4925-8A3F-84B962828208}.Release|Any CPU.Build.0 = Release|x86 {9E6E1490-43BD-4925-8A3F-84B962828208}.Release|x86.ActiveCfg = Release|x86 {9E6E1490-43BD-4925-8A3F-84B962828208}.Release|x86.Build.0 = Release|x86 + {9E6E1490-43BD-4925-8A3F-84B962828208}.SavePropValues|Any CPU.ActiveCfg = Debug-release|x86 + {9E6E1490-43BD-4925-8A3F-84B962828208}.SavePropValues|Any CPU.Build.0 = Debug-release|x86 {9E6E1490-43BD-4925-8A3F-84B962828208}.SavePropValues|x86.ActiveCfg = Release|x86 {9E6E1490-43BD-4925-8A3F-84B962828208}.SavePropValues|x86.Build.0 = Release|x86 + {9E6E1490-43BD-4925-8A3F-84B962828208}.YoloDebug|Any CPU.ActiveCfg = Debug-release|x86 + {9E6E1490-43BD-4925-8A3F-84B962828208}.YoloDebug|Any CPU.Build.0 = Debug-release|x86 {9E6E1490-43BD-4925-8A3F-84B962828208}.YoloDebug|x86.ActiveCfg = Debug|x86 {9E6E1490-43BD-4925-8A3F-84B962828208}.YoloDebug|x86.Build.0 = Debug|x86 + {4180E444-4AA1-4564-9296-50323FE504FE}.Bitstream-Debugging|Any CPU.ActiveCfg = Debug-release|x86 + {4180E444-4AA1-4564-9296-50323FE504FE}.Bitstream-Debugging|Any CPU.Build.0 = Debug-release|x86 {4180E444-4AA1-4564-9296-50323FE504FE}.Bitstream-Debugging|x86.ActiveCfg = Debug|x86 {4180E444-4AA1-4564-9296-50323FE504FE}.Bitstream-Debugging|x86.Build.0 = Debug|x86 + {4180E444-4AA1-4564-9296-50323FE504FE}.Debug|Any CPU.ActiveCfg = Debug|x86 + {4180E444-4AA1-4564-9296-50323FE504FE}.Debug|Any CPU.Build.0 = Debug|x86 {4180E444-4AA1-4564-9296-50323FE504FE}.Debug|x86.ActiveCfg = Debug|x86 {4180E444-4AA1-4564-9296-50323FE504FE}.Debug|x86.Build.0 = Debug|x86 + {4180E444-4AA1-4564-9296-50323FE504FE}.Release|Any CPU.ActiveCfg = Release|x86 + {4180E444-4AA1-4564-9296-50323FE504FE}.Release|Any CPU.Build.0 = Release|x86 {4180E444-4AA1-4564-9296-50323FE504FE}.Release|x86.ActiveCfg = Release|x86 {4180E444-4AA1-4564-9296-50323FE504FE}.Release|x86.Build.0 = Release|x86 + {4180E444-4AA1-4564-9296-50323FE504FE}.SavePropValues|Any CPU.ActiveCfg = Debug-release|x86 + {4180E444-4AA1-4564-9296-50323FE504FE}.SavePropValues|Any CPU.Build.0 = Debug-release|x86 {4180E444-4AA1-4564-9296-50323FE504FE}.SavePropValues|x86.ActiveCfg = Release|x86 {4180E444-4AA1-4564-9296-50323FE504FE}.SavePropValues|x86.Build.0 = Release|x86 + {4180E444-4AA1-4564-9296-50323FE504FE}.YoloDebug|Any CPU.ActiveCfg = Debug-release|x86 + {4180E444-4AA1-4564-9296-50323FE504FE}.YoloDebug|Any CPU.Build.0 = Debug-release|x86 {4180E444-4AA1-4564-9296-50323FE504FE}.YoloDebug|x86.ActiveCfg = Debug|x86 {4180E444-4AA1-4564-9296-50323FE504FE}.YoloDebug|x86.Build.0 = Debug|x86 + {B0B2F0B5-4E7F-41AE-817F-9C0F30DA5367}.Bitstream-Debugging|Any CPU.ActiveCfg = Debug-release|x86 + {B0B2F0B5-4E7F-41AE-817F-9C0F30DA5367}.Bitstream-Debugging|Any CPU.Build.0 = Debug-release|x86 {B0B2F0B5-4E7F-41AE-817F-9C0F30DA5367}.Bitstream-Debugging|x86.ActiveCfg = Debug|x86 {B0B2F0B5-4E7F-41AE-817F-9C0F30DA5367}.Bitstream-Debugging|x86.Build.0 = Debug|x86 + {B0B2F0B5-4E7F-41AE-817F-9C0F30DA5367}.Debug|Any CPU.ActiveCfg = Debug|x86 + {B0B2F0B5-4E7F-41AE-817F-9C0F30DA5367}.Debug|Any CPU.Build.0 = Debug|x86 {B0B2F0B5-4E7F-41AE-817F-9C0F30DA5367}.Debug|x86.ActiveCfg = Debug|x86 {B0B2F0B5-4E7F-41AE-817F-9C0F30DA5367}.Debug|x86.Build.0 = Debug|x86 + {B0B2F0B5-4E7F-41AE-817F-9C0F30DA5367}.Release|Any CPU.ActiveCfg = Release|x86 + {B0B2F0B5-4E7F-41AE-817F-9C0F30DA5367}.Release|Any CPU.Build.0 = Release|x86 {B0B2F0B5-4E7F-41AE-817F-9C0F30DA5367}.Release|x86.ActiveCfg = Release|x86 {B0B2F0B5-4E7F-41AE-817F-9C0F30DA5367}.Release|x86.Build.0 = Release|x86 + {B0B2F0B5-4E7F-41AE-817F-9C0F30DA5367}.SavePropValues|Any CPU.ActiveCfg = Debug-release|x86 + {B0B2F0B5-4E7F-41AE-817F-9C0F30DA5367}.SavePropValues|Any CPU.Build.0 = Debug-release|x86 {B0B2F0B5-4E7F-41AE-817F-9C0F30DA5367}.SavePropValues|x86.ActiveCfg = Release|x86 {B0B2F0B5-4E7F-41AE-817F-9C0F30DA5367}.SavePropValues|x86.Build.0 = Release|x86 + {B0B2F0B5-4E7F-41AE-817F-9C0F30DA5367}.YoloDebug|Any CPU.ActiveCfg = Debug-release|x86 + {B0B2F0B5-4E7F-41AE-817F-9C0F30DA5367}.YoloDebug|Any CPU.Build.0 = Debug-release|x86 {B0B2F0B5-4E7F-41AE-817F-9C0F30DA5367}.YoloDebug|x86.ActiveCfg = Debug|x86 {B0B2F0B5-4E7F-41AE-817F-9C0F30DA5367}.YoloDebug|x86.Build.0 = Debug|x86 + {496A0714-9ADF-4C56-8E93-3DFA0EBA89D1}.Bitstream-Debugging|Any CPU.ActiveCfg = Debug-release|x86 + {496A0714-9ADF-4C56-8E93-3DFA0EBA89D1}.Bitstream-Debugging|Any CPU.Build.0 = Debug-release|x86 {496A0714-9ADF-4C56-8E93-3DFA0EBA89D1}.Bitstream-Debugging|x86.ActiveCfg = Debug|x86 {496A0714-9ADF-4C56-8E93-3DFA0EBA89D1}.Bitstream-Debugging|x86.Build.0 = Debug|x86 + {496A0714-9ADF-4C56-8E93-3DFA0EBA89D1}.Debug|Any CPU.ActiveCfg = Debug|x86 + {496A0714-9ADF-4C56-8E93-3DFA0EBA89D1}.Debug|Any CPU.Build.0 = Debug|x86 {496A0714-9ADF-4C56-8E93-3DFA0EBA89D1}.Debug|x86.ActiveCfg = Debug|x86 {496A0714-9ADF-4C56-8E93-3DFA0EBA89D1}.Debug|x86.Build.0 = Debug|x86 + {496A0714-9ADF-4C56-8E93-3DFA0EBA89D1}.Release|Any CPU.ActiveCfg = Release|x86 + {496A0714-9ADF-4C56-8E93-3DFA0EBA89D1}.Release|Any CPU.Build.0 = Release|x86 {496A0714-9ADF-4C56-8E93-3DFA0EBA89D1}.Release|x86.ActiveCfg = Release|x86 {496A0714-9ADF-4C56-8E93-3DFA0EBA89D1}.Release|x86.Build.0 = Release|x86 + {496A0714-9ADF-4C56-8E93-3DFA0EBA89D1}.SavePropValues|Any CPU.ActiveCfg = Debug-release|x86 + {496A0714-9ADF-4C56-8E93-3DFA0EBA89D1}.SavePropValues|Any CPU.Build.0 = Debug-release|x86 {496A0714-9ADF-4C56-8E93-3DFA0EBA89D1}.SavePropValues|x86.ActiveCfg = Release|x86 {496A0714-9ADF-4C56-8E93-3DFA0EBA89D1}.SavePropValues|x86.Build.0 = Release|x86 + {496A0714-9ADF-4C56-8E93-3DFA0EBA89D1}.YoloDebug|Any CPU.ActiveCfg = Debug-release|x86 + {496A0714-9ADF-4C56-8E93-3DFA0EBA89D1}.YoloDebug|Any CPU.Build.0 = Debug-release|x86 {496A0714-9ADF-4C56-8E93-3DFA0EBA89D1}.YoloDebug|x86.ActiveCfg = Debug|x86 {496A0714-9ADF-4C56-8E93-3DFA0EBA89D1}.YoloDebug|x86.Build.0 = Debug|x86 + {86541EF7-D99F-46CC-8836-020D0AE1BCE9}.Bitstream-Debugging|Any CPU.ActiveCfg = Debug|Any CPU + {86541EF7-D99F-46CC-8836-020D0AE1BCE9}.Bitstream-Debugging|Any CPU.Build.0 = Debug|Any CPU + {86541EF7-D99F-46CC-8836-020D0AE1BCE9}.Bitstream-Debugging|x86.ActiveCfg = Debug|Any CPU + {86541EF7-D99F-46CC-8836-020D0AE1BCE9}.Bitstream-Debugging|x86.Build.0 = Debug|Any CPU + {86541EF7-D99F-46CC-8836-020D0AE1BCE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {86541EF7-D99F-46CC-8836-020D0AE1BCE9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {86541EF7-D99F-46CC-8836-020D0AE1BCE9}.Debug|x86.ActiveCfg = Debug|Any CPU + {86541EF7-D99F-46CC-8836-020D0AE1BCE9}.Debug|x86.Build.0 = Debug|Any CPU + {86541EF7-D99F-46CC-8836-020D0AE1BCE9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {86541EF7-D99F-46CC-8836-020D0AE1BCE9}.Release|Any CPU.Build.0 = Release|Any CPU + {86541EF7-D99F-46CC-8836-020D0AE1BCE9}.Release|x86.ActiveCfg = Release|Any CPU + {86541EF7-D99F-46CC-8836-020D0AE1BCE9}.Release|x86.Build.0 = Release|Any CPU + {86541EF7-D99F-46CC-8836-020D0AE1BCE9}.SavePropValues|Any CPU.ActiveCfg = Debug|Any CPU + {86541EF7-D99F-46CC-8836-020D0AE1BCE9}.SavePropValues|Any CPU.Build.0 = Debug|Any CPU + {86541EF7-D99F-46CC-8836-020D0AE1BCE9}.SavePropValues|x86.ActiveCfg = Debug|Any CPU + {86541EF7-D99F-46CC-8836-020D0AE1BCE9}.SavePropValues|x86.Build.0 = Debug|Any CPU + {86541EF7-D99F-46CC-8836-020D0AE1BCE9}.YoloDebug|Any CPU.ActiveCfg = Debug|Any CPU + {86541EF7-D99F-46CC-8836-020D0AE1BCE9}.YoloDebug|Any CPU.Build.0 = Debug|Any CPU + {86541EF7-D99F-46CC-8836-020D0AE1BCE9}.YoloDebug|x86.ActiveCfg = Debug|Any CPU + {86541EF7-D99F-46CC-8836-020D0AE1BCE9}.YoloDebug|x86.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Core/MultilingualResources/Core.ar.xlf b/Core/MultilingualResources/Core.ar.xlf index 049704e74..22c5e3cc8 100644 --- a/Core/MultilingualResources/Core.ar.xlf +++ b/Core/MultilingualResources/Core.ar.xlf @@ -202,6 +202,10 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + diff --git a/Core/MultilingualResources/Core.da.xlf b/Core/MultilingualResources/Core.da.xlf index 4736f7f45..8167aa5ae 100644 --- a/Core/MultilingualResources/Core.da.xlf +++ b/Core/MultilingualResources/Core.da.xlf @@ -202,6 +202,10 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + diff --git a/Core/MultilingualResources/Core.de.xlf b/Core/MultilingualResources/Core.de.xlf index 427bcbd43..e7f499d83 100644 --- a/Core/MultilingualResources/Core.de.xlf +++ b/Core/MultilingualResources/Core.de.xlf @@ -202,6 +202,10 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + diff --git a/Core/MultilingualResources/Core.es.xlf b/Core/MultilingualResources/Core.es.xlf index f333f95b4..e92150cb6 100644 --- a/Core/MultilingualResources/Core.es.xlf +++ b/Core/MultilingualResources/Core.es.xlf @@ -202,6 +202,10 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + diff --git a/Core/MultilingualResources/Core.fr.xlf b/Core/MultilingualResources/Core.fr.xlf index b36c1ef81..a371e3615 100644 --- a/Core/MultilingualResources/Core.fr.xlf +++ b/Core/MultilingualResources/Core.fr.xlf @@ -202,6 +202,10 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + diff --git a/Core/MultilingualResources/Core.hr.xlf b/Core/MultilingualResources/Core.hr.xlf index 10e5ee39f..00ea575fe 100644 --- a/Core/MultilingualResources/Core.hr.xlf +++ b/Core/MultilingualResources/Core.hr.xlf @@ -202,6 +202,10 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + diff --git a/Core/MultilingualResources/Core.hu.xlf b/Core/MultilingualResources/Core.hu.xlf index 4c325a5bc..85ba0e0cb 100644 --- a/Core/MultilingualResources/Core.hu.xlf +++ b/Core/MultilingualResources/Core.hu.xlf @@ -202,6 +202,10 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + diff --git a/Core/MultilingualResources/Core.it.xlf b/Core/MultilingualResources/Core.it.xlf index 266a87deb..f345d9fab 100644 --- a/Core/MultilingualResources/Core.it.xlf +++ b/Core/MultilingualResources/Core.it.xlf @@ -202,6 +202,10 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + diff --git a/Core/MultilingualResources/Core.ja.xlf b/Core/MultilingualResources/Core.ja.xlf index 161887acb..a6fc8e07d 100644 --- a/Core/MultilingualResources/Core.ja.xlf +++ b/Core/MultilingualResources/Core.ja.xlf @@ -202,6 +202,10 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + diff --git a/Core/MultilingualResources/Core.nl.xlf b/Core/MultilingualResources/Core.nl.xlf index 1dd2e3045..7bf548abb 100644 --- a/Core/MultilingualResources/Core.nl.xlf +++ b/Core/MultilingualResources/Core.nl.xlf @@ -202,6 +202,10 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + diff --git a/Core/MultilingualResources/Core.pl.xlf b/Core/MultilingualResources/Core.pl.xlf index 66c7b5cd8..55b94cfcc 100644 --- a/Core/MultilingualResources/Core.pl.xlf +++ b/Core/MultilingualResources/Core.pl.xlf @@ -202,6 +202,10 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + diff --git a/Core/MultilingualResources/Core.pt-BR.xlf b/Core/MultilingualResources/Core.pt-BR.xlf index 3dd61a30f..f08baaefe 100644 --- a/Core/MultilingualResources/Core.pt-BR.xlf +++ b/Core/MultilingualResources/Core.pt-BR.xlf @@ -202,6 +202,10 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + diff --git a/Core/MultilingualResources/Core.pt.xlf b/Core/MultilingualResources/Core.pt.xlf index 0844bd287..d605ef9c1 100644 --- a/Core/MultilingualResources/Core.pt.xlf +++ b/Core/MultilingualResources/Core.pt.xlf @@ -202,6 +202,10 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + diff --git a/Core/MultilingualResources/Core.ru.xlf b/Core/MultilingualResources/Core.ru.xlf index 3cc85314d..b166a2831 100644 --- a/Core/MultilingualResources/Core.ru.xlf +++ b/Core/MultilingualResources/Core.ru.xlf @@ -202,6 +202,10 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + diff --git a/Core/MultilingualResources/Core.sr-Cyrl.xlf b/Core/MultilingualResources/Core.sr-Cyrl.xlf index 618c585c6..d5b73d239 100644 --- a/Core/MultilingualResources/Core.sr-Cyrl.xlf +++ b/Core/MultilingualResources/Core.sr-Cyrl.xlf @@ -202,6 +202,10 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + diff --git a/Core/MultilingualResources/Core.tr-TR.xlf b/Core/MultilingualResources/Core.tr-TR.xlf index 8a2da335c..d7e6c1f6c 100644 --- a/Core/MultilingualResources/Core.tr-TR.xlf +++ b/Core/MultilingualResources/Core.tr-TR.xlf @@ -202,6 +202,10 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + diff --git a/Core/MultilingualResources/Core.tr.xlf b/Core/MultilingualResources/Core.tr.xlf index 5d32913a6..85fbf5a03 100644 --- a/Core/MultilingualResources/Core.tr.xlf +++ b/Core/MultilingualResources/Core.tr.xlf @@ -202,6 +202,10 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + diff --git a/Core/MultilingualResources/Core.zh-Hans.xlf b/Core/MultilingualResources/Core.zh-Hans.xlf index 88b728135..367765f71 100644 --- a/Core/MultilingualResources/Core.zh-Hans.xlf +++ b/Core/MultilingualResources/Core.zh-Hans.xlf @@ -202,6 +202,10 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + diff --git a/Core/MultilingualResources/Core.zh-Hant.xlf b/Core/MultilingualResources/Core.zh-Hant.xlf index de99729e3..7ee410978 100644 --- a/Core/MultilingualResources/Core.zh-Hant.xlf +++ b/Core/MultilingualResources/Core.zh-Hant.xlf @@ -202,6 +202,10 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + diff --git a/Core/Properties/Resources.ar.resx b/Core/Properties/Resources.ar.resx index 7cbfbe521..667b72531 100644 --- a/Core/Properties/Resources.ar.resx +++ b/Core/Properties/Resources.ar.resx @@ -15,4 +15,7 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Core/Properties/Resources.da.resx b/Core/Properties/Resources.da.resx index 700e1e725..ada797ae3 100644 --- a/Core/Properties/Resources.da.resx +++ b/Core/Properties/Resources.da.resx @@ -72,4 +72,7 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Core/Properties/Resources.de.resx b/Core/Properties/Resources.de.resx index 9409d0bc0..942fd0252 100644 --- a/Core/Properties/Resources.de.resx +++ b/Core/Properties/Resources.de.resx @@ -72,4 +72,7 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Core/Properties/Resources.es.resx b/Core/Properties/Resources.es.resx index e8ccda660..1ef6eb358 100644 --- a/Core/Properties/Resources.es.resx +++ b/Core/Properties/Resources.es.resx @@ -69,4 +69,7 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Core/Properties/Resources.fr.resx b/Core/Properties/Resources.fr.resx index a90cc8a99..63fa145f7 100644 --- a/Core/Properties/Resources.fr.resx +++ b/Core/Properties/Resources.fr.resx @@ -72,4 +72,7 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Core/Properties/Resources.hr.resx b/Core/Properties/Resources.hr.resx index 7cbfbe521..667b72531 100644 --- a/Core/Properties/Resources.hr.resx +++ b/Core/Properties/Resources.hr.resx @@ -15,4 +15,7 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Core/Properties/Resources.hu.resx b/Core/Properties/Resources.hu.resx index bdb7acfa0..f4d1b2c86 100644 --- a/Core/Properties/Resources.hu.resx +++ b/Core/Properties/Resources.hu.resx @@ -69,4 +69,7 @@ Arany nova III + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Core/Properties/Resources.it.resx b/Core/Properties/Resources.it.resx index 7cbfbe521..667b72531 100644 --- a/Core/Properties/Resources.it.resx +++ b/Core/Properties/Resources.it.resx @@ -15,4 +15,7 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Core/Properties/Resources.ja.resx b/Core/Properties/Resources.ja.resx index 7cbfbe521..667b72531 100644 --- a/Core/Properties/Resources.ja.resx +++ b/Core/Properties/Resources.ja.resx @@ -15,4 +15,7 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Core/Properties/Resources.nl.resx b/Core/Properties/Resources.nl.resx index fb42227ef..df8a53be3 100644 --- a/Core/Properties/Resources.nl.resx +++ b/Core/Properties/Resources.nl.resx @@ -102,4 +102,7 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Core/Properties/Resources.pl.resx b/Core/Properties/Resources.pl.resx index d75d8a0be..b19e623f5 100644 --- a/Core/Properties/Resources.pl.resx +++ b/Core/Properties/Resources.pl.resx @@ -72,4 +72,7 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Core/Properties/Resources.pt-BR.resx b/Core/Properties/Resources.pt-BR.resx index bfb5e0c37..62394a554 100644 --- a/Core/Properties/Resources.pt-BR.resx +++ b/Core/Properties/Resources.pt-BR.resx @@ -159,4 +159,7 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Core/Properties/Resources.pt.resx b/Core/Properties/Resources.pt.resx index 7cbfbe521..667b72531 100644 --- a/Core/Properties/Resources.pt.resx +++ b/Core/Properties/Resources.pt.resx @@ -15,4 +15,7 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Core/Properties/Resources.ru.resx b/Core/Properties/Resources.ru.resx index 7cbfbe521..667b72531 100644 --- a/Core/Properties/Resources.ru.resx +++ b/Core/Properties/Resources.ru.resx @@ -15,4 +15,7 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Core/Properties/Resources.sr-Cyrl.resx b/Core/Properties/Resources.sr-Cyrl.resx index 7cbfbe521..667b72531 100644 --- a/Core/Properties/Resources.sr-Cyrl.resx +++ b/Core/Properties/Resources.sr-Cyrl.resx @@ -15,4 +15,7 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Core/Properties/Resources.tr-TR.resx b/Core/Properties/Resources.tr-TR.resx index fb42227ef..df8a53be3 100644 --- a/Core/Properties/Resources.tr-TR.resx +++ b/Core/Properties/Resources.tr-TR.resx @@ -102,4 +102,7 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Core/Properties/Resources.tr.resx b/Core/Properties/Resources.tr.resx index fb42227ef..df8a53be3 100644 --- a/Core/Properties/Resources.tr.resx +++ b/Core/Properties/Resources.tr.resx @@ -102,4 +102,7 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Core/Properties/Resources.zh-Hans.resx b/Core/Properties/Resources.zh-Hans.resx index 471361b80..db23db1e3 100644 --- a/Core/Properties/Resources.zh-Hans.resx +++ b/Core/Properties/Resources.zh-Hans.resx @@ -72,4 +72,7 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Core/Properties/Resources.zh-Hant.resx b/Core/Properties/Resources.zh-Hant.resx index 7cbfbe521..667b72531 100644 --- a/Core/Properties/Resources.zh-Hant.resx +++ b/Core/Properties/Resources.zh-Hant.resx @@ -15,4 +15,7 @@ ..\Resources\Images\Logos\wanmei.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Images\Logos\esportal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Manager/Manager.csproj b/Manager/Manager.csproj index 884081af4..a03b40e95 100644 --- a/Manager/Manager.csproj +++ b/Manager/Manager.csproj @@ -626,15 +626,6 @@ - - Always - - - Always - - - Always - diff --git a/Manager/MultilingualResources/Manager.ar.xlf b/Manager/MultilingualResources/Manager.ar.xlf index 18ac7d149..cc5466c41 100644 --- a/Manager/MultilingualResources/Manager.ar.xlf +++ b/Manager/MultilingualResources/Manager.ar.xlf @@ -2268,8 +2268,8 @@ An error occured while refreshing last rank. - An error occured while retrieving matches information ({0}). - An error occured while retrieving matches information ({0}). + An error occured while retrieving matches information. + An error occured while retrieving matches information. Do you want to export data into a single file or in multiple files? @@ -2545,10 +2545,6 @@ Unable to start the game. boiler.exe is incorrect. boiler.exe is incorrect. - - boiler.exe not found. - boiler.exe not found. - This demos may be too old, if not please send an email with the attached demos. You can find more information on {0}. @@ -4219,6 +4215,14 @@ Please update it by clicking on the "Update" button. Cancel Cancel + + An error occurred while downloading demos. + An error occurred while downloading demos. + + + An unknown error happened, code: ({0}). + An unknown error happened, code: ({0}). + diff --git a/Manager/MultilingualResources/Manager.da.xlf b/Manager/MultilingualResources/Manager.da.xlf index 93f42a4d7..be6a27f81 100644 --- a/Manager/MultilingualResources/Manager.da.xlf +++ b/Manager/MultilingualResources/Manager.da.xlf @@ -2269,8 +2269,8 @@ En fejl skete ved opdateringen af nyeste rang - An error occured while retrieving matches information ({0}). - En Fejl skete ved hentning af kamp informationer ({0}). + An error occured while retrieving matches information. + An error occured while retrieving matches information. Do you want to export data into a single file or in multiple files? @@ -2546,10 +2546,6 @@ Er ikke istand til at starte spillet boiler.exe is incorrect. boiler.exe er ukorrekt. - - boiler.exe not found. - boiler.exe blev ikke funndet. - This demos may be too old, if not please send an email with the attached demos. You can find more information on {0}. @@ -4220,6 +4216,14 @@ Please update it by clicking on the "Update" button. Cancel Cancel + + An error occurred while downloading demos. + An error occurred while downloading demos. + + + An unknown error happened, code: ({0}). + An unknown error happened, code: ({0}). + diff --git a/Manager/MultilingualResources/Manager.de.xlf b/Manager/MultilingualResources/Manager.de.xlf index 1c000fef8..26794b1e2 100644 --- a/Manager/MultilingualResources/Manager.de.xlf +++ b/Manager/MultilingualResources/Manager.de.xlf @@ -2268,8 +2268,8 @@ Beim Aktualisieren des zuletzt bekannten Rangs ist ein Fehler aufgetreten. - An error occured while retrieving matches information ({0}). - Beim erhalten der Match-Informationen ({0}) ist ein Fehler aufgetreten. + An error occured while retrieving matches information. + An error occured while retrieving matches information. Do you want to export data into a single file or in multiple files? @@ -2545,10 +2545,6 @@ Das Spiel kann nicht gestartet werden. boiler.exe is incorrect. boiler.exe ist fehlerhaft. - - boiler.exe not found. - boiler.exe nicht gefunden. - This demos may be too old, if not please send an email with the attached demos. You can find more information on {0}. @@ -4220,6 +4216,14 @@ Bitte aktualisieren Sie mit dem Klicken auf den "Update"-Button. Cancel Cancel + + An error occurred while downloading demos. + An error occurred while downloading demos. + + + An unknown error happened, code: ({0}). + An unknown error happened, code: ({0}). + diff --git a/Manager/MultilingualResources/Manager.es.xlf b/Manager/MultilingualResources/Manager.es.xlf index 33cadb2ad..fcb15650b 100644 --- a/Manager/MultilingualResources/Manager.es.xlf +++ b/Manager/MultilingualResources/Manager.es.xlf @@ -2282,8 +2282,8 @@ Ha ocurrido un error mientras se refrescaba el último rango. - An error occured while retrieving matches information ({0}). - Ha ocurrido un error mientras se recuperaba la información de partida ({0}). + An error occured while retrieving matches information. + An error occured while retrieving matches information. Do you want to export data into a single file or in multiple files? @@ -2559,10 +2559,6 @@ No se puede iniciar el juego. boiler.exe is incorrect. boiler.exe es incorrecto. - - boiler.exe not found. - boiler.exe no encontrado. - This demos may be too old, if not please send an email with the attached demos. You can find more information on {0}. @@ -4237,6 +4233,14 @@ Please update it by clicking on the "Update" button. Cancel Cancel + + An error occurred while downloading demos. + An error occurred while downloading demos. + + + An unknown error happened, code: ({0}). + An unknown error happened, code: ({0}). + diff --git a/Manager/MultilingualResources/Manager.fr.xlf b/Manager/MultilingualResources/Manager.fr.xlf index d114ed5e4..0ee765dcb 100644 --- a/Manager/MultilingualResources/Manager.fr.xlf +++ b/Manager/MultilingualResources/Manager.fr.xlf @@ -2250,8 +2250,8 @@ Elles ne seront pas supprimées de votre disque dur. Une erreur s'est produite pendant la récupération du dernier rang. - An error occured while retrieving matches information ({0}). - Une erreur s'est produite pendant la récuparation des informations des matchs ({0}). + An error occured while retrieving matches information. + Une erreur s'est produite pendant la récuparation des informations des matchs. Goto Tick @@ -2549,10 +2549,6 @@ Vous pouvez trouver plus d'informations sur {0}. boiler.exe is incorrect. boiler.exe est incorrect. - - boiler.exe not found. - boiler.exe introuvable. - Demo {0} not found. Démo {0} introuvable. @@ -4226,6 +4222,14 @@ Il peut être pratique dans ce cas d'ajouter un commentaire pour noter les ticks Cancel Annuler + + An error occurred while downloading demos. + An error occurred while downloading demos. + + + An unknown error happened, code: ({0}). + An unknown error happened, code: ({0}). + diff --git a/Manager/MultilingualResources/Manager.hr.xlf b/Manager/MultilingualResources/Manager.hr.xlf index 07dfbb639..d44f1d349 100644 --- a/Manager/MultilingualResources/Manager.hr.xlf +++ b/Manager/MultilingualResources/Manager.hr.xlf @@ -2268,8 +2268,8 @@ An error occured while refreshing last rank. - An error occured while retrieving matches information ({0}). - An error occured while retrieving matches information ({0}). + An error occured while retrieving matches information. + An error occured while retrieving matches information. Do you want to export data into a single file or in multiple files? @@ -2545,10 +2545,6 @@ Unable to start the game. boiler.exe is incorrect. boiler.exe is incorrect. - - boiler.exe not found. - boiler.exe not found. - This demos may be too old, if not please send an email with the attached demos. You can find more information on {0}. @@ -4219,6 +4215,14 @@ Please update it by clicking on the "Update" button. Cancel Cancel + + An error occurred while downloading demos. + An error occurred while downloading demos. + + + An unknown error happened, code: ({0}). + An unknown error happened, code: ({0}). + diff --git a/Manager/MultilingualResources/Manager.hu.xlf b/Manager/MultilingualResources/Manager.hu.xlf index 021f36355..ca837d41c 100644 --- a/Manager/MultilingualResources/Manager.hu.xlf +++ b/Manager/MultilingualResources/Manager.hu.xlf @@ -2268,8 +2268,8 @@ Egy hiba lépett fel a rang frissítése közben. - An error occured while retrieving matches information ({0}). - Egy hiba lépett fel a meccs információk elemzése közben ({0}). + An error occured while retrieving matches information. + An error occured while retrieving matches information. Do you want to export data into a single file or in multiple files? @@ -2545,10 +2545,6 @@ A játékot nem lehet elindítani. boiler.exe is incorrect. boiler.exe hibás. - - boiler.exe not found. - boiler.exe nem található. - This demos may be too old, if not please send an email with the attached demos. You can find more information on {0}. @@ -4220,6 +4216,14 @@ Please update it by clicking on the "Update" button. Cancel Cancel + + An error occurred while downloading demos. + An error occurred while downloading demos. + + + An unknown error happened, code: ({0}). + An unknown error happened, code: ({0}). + diff --git a/Manager/MultilingualResources/Manager.it.xlf b/Manager/MultilingualResources/Manager.it.xlf index 01dab0ceb..593ae3dc4 100644 --- a/Manager/MultilingualResources/Manager.it.xlf +++ b/Manager/MultilingualResources/Manager.it.xlf @@ -2268,8 +2268,8 @@ An error occured while refreshing last rank. - An error occured while retrieving matches information ({0}). - An error occured while retrieving matches information ({0}). + An error occured while retrieving matches information. + An error occured while retrieving matches information. Do you want to export data into a single file or in multiple files? @@ -2545,10 +2545,6 @@ Unable to start the game. boiler.exe is incorrect. boiler.exe is incorrect. - - boiler.exe not found. - boiler.exe not found. - This demos may be too old, if not please send an email with the attached demos. You can find more information on {0}. @@ -4219,6 +4215,14 @@ Please update it by clicking on the "Update" button. Cancel Cancel + + An error occurred while downloading demos. + An error occurred while downloading demos. + + + An unknown error happened, code: ({0}). + An unknown error happened, code: ({0}). + diff --git a/Manager/MultilingualResources/Manager.ja.xlf b/Manager/MultilingualResources/Manager.ja.xlf index f911e8240..e084ef2ba 100644 --- a/Manager/MultilingualResources/Manager.ja.xlf +++ b/Manager/MultilingualResources/Manager.ja.xlf @@ -2268,8 +2268,8 @@ An error occured while refreshing last rank. - An error occured while retrieving matches information ({0}). - An error occured while retrieving matches information ({0}). + An error occured while retrieving matches information. + An error occured while retrieving matches information. Do you want to export data into a single file or in multiple files? @@ -2545,10 +2545,6 @@ Unable to start the game. boiler.exe is incorrect. boiler.exe is incorrect. - - boiler.exe not found. - boiler.exe not found. - This demos may be too old, if not please send an email with the attached demos. You can find more information on {0}. @@ -4219,6 +4215,14 @@ Please update it by clicking on the "Update" button. Cancel Cancel + + An error occurred while downloading demos. + An error occurred while downloading demos. + + + An unknown error happened, code: ({0}). + An unknown error happened, code: ({0}). + diff --git a/Manager/MultilingualResources/Manager.nl.xlf b/Manager/MultilingualResources/Manager.nl.xlf index 88d122e53..d35aadf64 100644 --- a/Manager/MultilingualResources/Manager.nl.xlf +++ b/Manager/MultilingualResources/Manager.nl.xlf @@ -2272,8 +2272,8 @@ An error occured while refreshing last rank. - An error occured while retrieving matches information ({0}). - An error occured while retrieving matches information ({0}). + An error occured while retrieving matches information. + An error occured while retrieving matches information. Do you want to export data into a single file or in multiple files? @@ -2561,10 +2561,6 @@ If you enable it, the game is launched with the "-insecure" parameter (everytime boiler.exe is incorrect. boiler.exe is incorrect. - - boiler.exe not found. - boiler.exe not found. - This demos may be too old, if not please send an email with the attached demos. You can find more information on {0}. @@ -4219,6 +4215,14 @@ Please update it by clicking on the "Update" button. Cancel Cancel + + An error occurred while downloading demos. + An error occurred while downloading demos. + + + An unknown error happened, code: ({0}). + An unknown error happened, code: ({0}). + diff --git a/Manager/MultilingualResources/Manager.pl.xlf b/Manager/MultilingualResources/Manager.pl.xlf index f9e77252b..c0b8e815f 100644 --- a/Manager/MultilingualResources/Manager.pl.xlf +++ b/Manager/MultilingualResources/Manager.pl.xlf @@ -2269,8 +2269,8 @@ Podczas odświeżania rangi pojawił się błąd. - An error occured while retrieving matches information ({0}). - Pojawił się błąd podczas uzyskiwania informacji o meczach ({0}). + An error occured while retrieving matches information. + An error occured while retrieving matches information. Do you want to export data into a single file or in multiple files? @@ -2546,10 +2546,6 @@ Uruchomienie gry nie powiodło się. boiler.exe is incorrect. boiler.exe jest niepoprawny. - - boiler.exe not found. - boiler.exe nie został znaleziony. - This demos may be too old, if not please send an email with the attached demos. You can find more information on {0}. @@ -4220,6 +4216,14 @@ Please update it by clicking on the "Update" button. Cancel Cancel + + An error occurred while downloading demos. + An error occurred while downloading demos. + + + An unknown error happened, code: ({0}). + An unknown error happened, code: ({0}). + diff --git a/Manager/MultilingualResources/Manager.pt-BR.xlf b/Manager/MultilingualResources/Manager.pt-BR.xlf index 6c7c3df50..1ce6248ef 100644 --- a/Manager/MultilingualResources/Manager.pt-BR.xlf +++ b/Manager/MultilingualResources/Manager.pt-BR.xlf @@ -2268,8 +2268,8 @@ Ocorreu um erro ao recuperar o último rank. - An error occured while retrieving matches information ({0}). - Ocorreu um erro ao recuperar informações das partidas ({0}). + An error occured while retrieving matches information. + An error occured while retrieving matches information. Do you want to export data into a single file or in multiple files? @@ -2545,10 +2545,6 @@ Não é possivel iniciar o jogo. boiler.exe is incorrect. boiler.exe está incorreto. - - boiler.exe not found. - boiler.exe não encontrado. - This demos may be too old, if not please send an email with the attached demos. You can find more information on {0}. @@ -4220,6 +4216,14 @@ Please update it by clicking on the "Update" button. Cancel Cancel + + An error occurred while downloading demos. + An error occurred while downloading demos. + + + An unknown error happened, code: ({0}). + An unknown error happened, code: ({0}). + diff --git a/Manager/MultilingualResources/Manager.pt.xlf b/Manager/MultilingualResources/Manager.pt.xlf index 5b8a6b33f..8a95af398 100644 --- a/Manager/MultilingualResources/Manager.pt.xlf +++ b/Manager/MultilingualResources/Manager.pt.xlf @@ -2268,8 +2268,8 @@ An error occured while refreshing last rank. - An error occured while retrieving matches information ({0}). - An error occured while retrieving matches information ({0}). + An error occured while retrieving matches information. + An error occured while retrieving matches information. Do you want to export data into a single file or in multiple files? @@ -2545,10 +2545,6 @@ Unable to start the game. boiler.exe is incorrect. boiler.exe is incorrect. - - boiler.exe not found. - boiler.exe not found. - This demos may be too old, if not please send an email with the attached demos. You can find more information on {0}. @@ -4219,6 +4215,14 @@ Please update it by clicking on the "Update" button. Cancel Cancel + + An error occurred while downloading demos. + An error occurred while downloading demos. + + + An unknown error happened, code: ({0}). + An unknown error happened, code: ({0}). + diff --git a/Manager/MultilingualResources/Manager.ru.xlf b/Manager/MultilingualResources/Manager.ru.xlf index 7d0b26760..1f92baa5b 100644 --- a/Manager/MultilingualResources/Manager.ru.xlf +++ b/Manager/MultilingualResources/Manager.ru.xlf @@ -2268,8 +2268,8 @@ An error occured while refreshing last rank. - An error occured while retrieving matches information ({0}). - An error occured while retrieving matches information ({0}). + An error occured while retrieving matches information. + An error occured while retrieving matches information. Do you want to export data into a single file or in multiple files? @@ -2545,10 +2545,6 @@ Unable to start the game. boiler.exe is incorrect. boiler.exe is incorrect. - - boiler.exe not found. - boiler.exe not found. - This demos may be too old, if not please send an email with the attached demos. You can find more information on {0}. @@ -4219,6 +4215,14 @@ Please update it by clicking on the "Update" button. Cancel Cancel + + An error occurred while downloading demos. + An error occurred while downloading demos. + + + An unknown error happened, code: ({0}). + An unknown error happened, code: ({0}). + diff --git a/Manager/MultilingualResources/Manager.sr-Cyrl.xlf b/Manager/MultilingualResources/Manager.sr-Cyrl.xlf index 22dadc6e2..dd104e9b1 100644 --- a/Manager/MultilingualResources/Manager.sr-Cyrl.xlf +++ b/Manager/MultilingualResources/Manager.sr-Cyrl.xlf @@ -2268,8 +2268,8 @@ An error occured while refreshing last rank. - An error occured while retrieving matches information ({0}). - An error occured while retrieving matches information ({0}). + An error occured while retrieving matches information. + An error occured while retrieving matches information. Do you want to export data into a single file or in multiple files? @@ -2545,10 +2545,6 @@ Unable to start the game. boiler.exe is incorrect. boiler.exe is incorrect. - - boiler.exe not found. - boiler.exe not found. - This demos may be too old, if not please send an email with the attached demos. You can find more information on {0}. @@ -4219,6 +4215,14 @@ Please update it by clicking on the "Update" button. Cancel Cancel + + An error occurred while downloading demos. + An error occurred while downloading demos. + + + An unknown error happened, code: ({0}). + An unknown error happened, code: ({0}). + diff --git a/Manager/MultilingualResources/Manager.tr-TR.xlf b/Manager/MultilingualResources/Manager.tr-TR.xlf index c6a299b15..088644e9d 100644 --- a/Manager/MultilingualResources/Manager.tr-TR.xlf +++ b/Manager/MultilingualResources/Manager.tr-TR.xlf @@ -2272,8 +2272,8 @@ An error occured while refreshing last rank. - An error occured while retrieving matches information ({0}). - An error occured while retrieving matches information ({0}). + An error occured while retrieving matches information. + An error occured while retrieving matches information. Do you want to export data into a single file or in multiple files? @@ -2561,10 +2561,6 @@ If you enable it, the game is launched with the "-insecure" parameter (everytime boiler.exe is incorrect. boiler.exe is incorrect. - - boiler.exe not found. - boiler.exe not found. - This demos may be too old, if not please send an email with the attached demos. You can find more information on {0}. @@ -4219,6 +4215,14 @@ Please update it by clicking on the "Update" button. Cancel Cancel + + An error occurred while downloading demos. + An error occurred while downloading demos. + + + An unknown error happened, code: ({0}). + An unknown error happened, code: ({0}). + diff --git a/Manager/MultilingualResources/Manager.tr.xlf b/Manager/MultilingualResources/Manager.tr.xlf index b26a999bf..8ac41efa6 100644 --- a/Manager/MultilingualResources/Manager.tr.xlf +++ b/Manager/MultilingualResources/Manager.tr.xlf @@ -2272,8 +2272,8 @@ An error occured while refreshing last rank. - An error occured while retrieving matches information ({0}). - An error occured while retrieving matches information ({0}). + An error occured while retrieving matches information. + An error occured while retrieving matches information. Do you want to export data into a single file or in multiple files? @@ -2561,10 +2561,6 @@ If you enable it, the game is launched with the "-insecure" parameter (everytime boiler.exe is incorrect. boiler.exe is incorrect. - - boiler.exe not found. - boiler.exe not found. - This demos may be too old, if not please send an email with the attached demos. You can find more information on {0}. @@ -4219,6 +4215,14 @@ Please update it by clicking on the "Update" button. Cancel Cancel + + An error occurred while downloading demos. + An error occurred while downloading demos. + + + An unknown error happened, code: ({0}). + An unknown error happened, code: ({0}). + diff --git a/Manager/MultilingualResources/Manager.zh-Hans.xlf b/Manager/MultilingualResources/Manager.zh-Hans.xlf index b3a5812c2..ec8e936b3 100644 --- a/Manager/MultilingualResources/Manager.zh-Hans.xlf +++ b/Manager/MultilingualResources/Manager.zh-Hans.xlf @@ -2268,8 +2268,8 @@ 在获取最新段位时发生错误。 - An error occured while retrieving matches information ({0}). - 在检索以下比赛信息时发生错误:{0} + An error occured while retrieving matches information. + An error occured while retrieving matches information. Do you want to export data into a single file or in multiple files? @@ -2545,10 +2545,6 @@ Unable to start the game. boiler.exe is incorrect. 无效的 "boiler.exe" 文件路径。 - - boiler.exe not found. - 未找到 "boiler.exe" 文件。 - This demos may be too old, if not please send an email with the attached demos. You can find more information on {0}. @@ -4219,6 +4215,14 @@ Please update it by clicking on the "Update" button. Cancel Cancel + + An error occurred while downloading demos. + An error occurred while downloading demos. + + + An unknown error happened, code: ({0}). + An unknown error happened, code: ({0}). + diff --git a/Manager/MultilingualResources/Manager.zh-Hant.xlf b/Manager/MultilingualResources/Manager.zh-Hant.xlf index 4f2a343c6..bd65e0bf5 100644 --- a/Manager/MultilingualResources/Manager.zh-Hant.xlf +++ b/Manager/MultilingualResources/Manager.zh-Hant.xlf @@ -2268,8 +2268,8 @@ An error occured while refreshing last rank. - An error occured while retrieving matches information ({0}). - An error occured while retrieving matches information ({0}). + An error occured while retrieving matches information. + An error occured while retrieving matches information. Do you want to export data into a single file or in multiple files? @@ -2545,10 +2545,6 @@ Unable to start the game. boiler.exe is incorrect. boiler.exe is incorrect. - - boiler.exe not found. - boiler.exe not found. - This demos may be too old, if not please send an email with the attached demos. You can find more information on {0}. @@ -4219,6 +4215,14 @@ Please update it by clicking on the "Update" button. Cancel Cancel + + An error occurred while downloading demos. + An error occurred while downloading demos. + + + An unknown error happened, code: ({0}). + An unknown error happened, code: ({0}). + diff --git a/Manager/Properties/Resources.Designer.cs b/Manager/Properties/Resources.Designer.cs index 3a1d1894b..420c135dc 100644 --- a/Manager/Properties/Resources.Designer.cs +++ b/Manager/Properties/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace Manager.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] public class Resources { @@ -1394,15 +1394,6 @@ public static string DialogBoilerIncorrect { } } - /// - /// Looks up a localized string similar to boiler.exe not found.. - /// - public static string DialogBoilerNotFound { - get { - return ResourceManager.GetString("DialogBoilerNotFound", resourceCulture); - } - } - /// /// Looks up a localized string similar to Chat messages file has been created.. /// @@ -1627,6 +1618,15 @@ public static string DialogErrorDemoNotFound { } } + /// + /// Looks up a localized string similar to An error occurred while downloading demos.. + /// + public static string DialogErrorDownloadingDemos { + get { + return ResourceManager.GetString("DialogErrorDownloadingDemos", resourceCulture); + } + } + /// /// Looks up a localized string similar to An error occured while exporting the chart.. /// @@ -1861,7 +1861,7 @@ public static string DialogErrorWhileRetrievingDemoData { } /// - /// Looks up a localized string similar to An error occured while retrieving matches information ({0}).. + /// Looks up a localized string similar to An error occured while retrieving matches information.. /// public static string DialogErrorWhileRetrievingMatchesData { get { @@ -2479,6 +2479,15 @@ public static string DialogTitleDownloadDemoFromShareCode { } } + /// + /// Looks up a localized string similar to An unknown error happened, code: ({0}).. + /// + public static string DialogUnknownBoilerExitCode { + get { + return ResourceManager.GetString("DialogUnknownBoilerExitCode", resourceCulture); + } + } + /// /// Looks up a localized string similar to This update requires to clear custom data from cache (your suspects list will not be removed). ///Do you want to save your custom data?. diff --git a/Manager/Properties/Resources.da.resx b/Manager/Properties/Resources.da.resx index 788167ac9..81ed9ec7e 100644 --- a/Manager/Properties/Resources.da.resx +++ b/Manager/Properties/Resources.da.resx @@ -1712,9 +1712,6 @@ En fejl skete ved opdateringen af nyeste rang - - En Fejl skete ved hentning af kamp informationer ({0}). - Vil du eksportere data til en enkelt fil eller flere filer? @@ -1919,9 +1916,6 @@ Er ikke istand til at starte spillet boiler.exe er ukorrekt. - - boiler.exe blev ikke funndet. - Demoen kan være for gammel, hvis det ikke er tilfældet send den venligst til mig i en email. Du kan finde mere information på diff --git a/Manager/Properties/Resources.de.resx b/Manager/Properties/Resources.de.resx index 31719a2be..3fa10043d 100644 --- a/Manager/Properties/Resources.de.resx +++ b/Manager/Properties/Resources.de.resx @@ -1708,9 +1708,6 @@ Beim Aktualisieren des zuletzt bekannten Rangs ist ein Fehler aufgetreten. - - Beim erhalten der Match-Informationen ({0}) ist ein Fehler aufgetreten. - Wollen Sie die Daten in eine einzelne Datei oder in mehrere exporieren? @@ -1915,9 +1912,6 @@ Das Spiel kann nicht gestartet werden. boiler.exe ist fehlerhaft. - - boiler.exe nicht gefunden. - Diese Demos scheinen zu alt zu sein. Falls nicht, senden Sie mir bitte eine E-Mail mit der Demo. Mehr Informationen finden Sie unter {0}. diff --git a/Manager/Properties/Resources.es.resx b/Manager/Properties/Resources.es.resx index 7a5e0f8dc..00fe6a8af 100644 --- a/Manager/Properties/Resources.es.resx +++ b/Manager/Properties/Resources.es.resx @@ -1711,9 +1711,6 @@ Ha ocurrido un error mientras se refrescaba el último rango. - - Ha ocurrido un error mientras se recuperaba la información de partida ({0}). - ¿Quieres exportar los datos a un solo archivo o a varios? @@ -1918,9 +1915,6 @@ No se puede iniciar el juego. boiler.exe es incorrecto. - - boiler.exe no encontrado. - Estas repeticiones parecen ser demasiado antiguas, si no lo son por favor envia un correo con las repeticiones adjuntas. Puedes encontrar más información en {0}. diff --git a/Manager/Properties/Resources.fr.resx b/Manager/Properties/Resources.fr.resx index 14b6aba8f..501ebd8ca 100644 --- a/Manager/Properties/Resources.fr.resx +++ b/Manager/Properties/Resources.fr.resx @@ -1698,7 +1698,7 @@ Elles ne seront pas supprimées de votre disque dur. Une erreur s'est produite pendant la récupération du dernier rang. - Une erreur s'est produite pendant la récuparation des informations des matchs ({0}). + Une erreur s'est produite pendant la récuparation des informations des matchs. Allez au tick @@ -1921,9 +1921,6 @@ Vous pouvez trouver plus d'informations sur {0}. boiler.exe est incorrect. - - boiler.exe introuvable. - Démo {0} introuvable. diff --git a/Manager/Properties/Resources.hu.resx b/Manager/Properties/Resources.hu.resx index 3feff9167..c570786d3 100644 --- a/Manager/Properties/Resources.hu.resx +++ b/Manager/Properties/Resources.hu.resx @@ -1711,9 +1711,6 @@ Egy hiba lépett fel a rang frissítése közben. - - Egy hiba lépett fel a meccs információk elemzése közben ({0}). - Egy vagy több fájlba szeretné exportálni az adatokat? @@ -1918,9 +1915,6 @@ A játékot nem lehet elindítani. boiler.exe hibás. - - boiler.exe nem található. - Ezek a demók túl régiek lehetnek, ha nem kérem küldjön egy emailt a demókkal. Több információt találhat a {0}. diff --git a/Manager/Properties/Resources.pl.resx b/Manager/Properties/Resources.pl.resx index 5a199149d..e81370361 100644 --- a/Manager/Properties/Resources.pl.resx +++ b/Manager/Properties/Resources.pl.resx @@ -1712,9 +1712,6 @@ Podczas odświeżania rangi pojawił się błąd. - - Pojawił się błąd podczas uzyskiwania informacji o meczach ({0}). - Czy chcesz eksportować dane w jednym czy w kilku plikach? @@ -1919,9 +1916,6 @@ Uruchomienie gry nie powiodło się. boiler.exe jest niepoprawny. - - boiler.exe nie został znaleziony. - Te dema mogą być za stare, jesli nie - wyślij email z załączonymi demami. Więcej informacji znajdziesz na {0}. diff --git a/Manager/Properties/Resources.pt-BR.resx b/Manager/Properties/Resources.pt-BR.resx index c8b4fa50d..0e7bc5f36 100644 --- a/Manager/Properties/Resources.pt-BR.resx +++ b/Manager/Properties/Resources.pt-BR.resx @@ -1711,9 +1711,6 @@ Ocorreu um erro ao recuperar o último rank. - - Ocorreu um erro ao recuperar informações das partidas ({0}). - Você deseja exportar os dados em um único arquivo ou em vários arquivos? @@ -1918,9 +1915,6 @@ Não é possivel iniciar o jogo. boiler.exe está incorreto. - - boiler.exe não encontrado. - Estas demos parecem ser muito antigas, se não for por favor envie um e-mail com as demos anexadas. Você pode encontrar mais informações sobre em {0}. diff --git a/Manager/Properties/Resources.resx b/Manager/Properties/Resources.resx index 574382dc4..bfeebcdb4 100644 --- a/Manager/Properties/Resources.resx +++ b/Manager/Properties/Resources.resx @@ -1827,7 +1827,7 @@ An error occured while refreshing last rank. - An error occured while retrieving matches information ({0}). + An error occured while retrieving matches information. Do you want to export data into a single file or in multiple files? @@ -2040,9 +2040,6 @@ If you enable it, the game is launched with the "-insecure" parameter (everytime boiler.exe is incorrect. - - boiler.exe not found. - This demos may be too old, if not please send an email with the attached demos. You can find more information on {0}. @@ -3273,4 +3270,10 @@ Please update it by clicking on the "Update" button. Cancel + + An error occurred while downloading demos. + + + An unknown error happened, code: ({0}). + \ No newline at end of file diff --git a/Manager/Properties/Resources.zh-Hans.resx b/Manager/Properties/Resources.zh-Hans.resx index e3fb11698..379279d18 100644 --- a/Manager/Properties/Resources.zh-Hans.resx +++ b/Manager/Properties/Resources.zh-Hans.resx @@ -1711,9 +1711,6 @@ 在获取最新段位时发生错误。 - - 在检索以下比赛信息时发生错误:{0} - 您希望将数据导出至单个文件还是多个文件? @@ -1918,9 +1915,6 @@ 无效的 "boiler.exe" 文件路径。 - - 未找到 "boiler.exe" 文件。 - 此录像文件可能太过久远。若非如此,请发送邮件并将其随附。 您可以前往 {0} 了解更多信息。 diff --git a/Manager/ViewModel/Demos/DemoListViewModel.cs b/Manager/ViewModel/Demos/DemoListViewModel.cs index 19202efbe..cdf923334 100644 --- a/Manager/ViewModel/Demos/DemoListViewModel.cs +++ b/Manager/ViewModel/Demos/DemoListViewModel.cs @@ -31,6 +31,7 @@ using Services.Concrete; using Services.Concrete.Excel; using Services.Concrete.ThirdParties; +using Services.Exceptions; using Services.Interfaces; using Services.Models; using Services.Models.ThirdParties; @@ -1220,14 +1221,20 @@ public RelayCommand DownloadDemosCommand _cts = new CancellationTokenSource(); } - int result = await _steamService.GenerateMatchListFile(_cts.Token); - await HandleBoilerResult(result); + int exitCode = await _steamService.GenerateMatchListFile(_cts.Token); + await HandleBoilerResult(exitCode); + } + catch (InvalidBoilerExecutableException) + { + await _dialogService.ShowErrorAsync(Properties.Resources.DialogBoilerIncorrect, MessageDialogStyle.Affirmative); } catch (Exception e) { if (!(e is TaskCanceledException)) { Logger.Instance.Log(e); + await _dialogService.ShowErrorAsync(Properties.Resources.DialogErrorDownloadingDemos, + MessageDialogStyle.Affirmative); } } finally @@ -1276,21 +1283,25 @@ public RelayCommand DownloadDemoFromShareCodeCommand _cts = new CancellationTokenSource(); } - int result = await _steamService.DownloadDemoFromShareCode(shareCode, _cts.Token); - - await HandleBoilerResult(result, false); + int exitCode = await _steamService.DownloadDemoFromShareCode(shareCode, _cts.Token); + await HandleBoilerResult(exitCode, false); + } + catch (InvalidBoilerExecutableException) + { + await _dialogService.ShowErrorAsync(Properties.Resources.DialogBoilerIncorrect, MessageDialogStyle.Affirmative); + } + catch (ShareCode.ShareCodePatternException) + { + await _dialogService.ShowErrorAsync(Properties.Resources.DialogErrorInvalidShareCode, + MessageDialogStyle.Affirmative); } catch (Exception e) { - if (e is ShareCode.ShareCodePatternException) - { - await _dialogService.ShowErrorAsync(Properties.Resources.DialogErrorInvalidShareCode, - MessageDialogStyle.Affirmative); - } - - if (!(e is TaskCanceledException) && !(e is ShareCode.ShareCodePatternException)) + if (!(e is TaskCanceledException)) { Logger.Instance.Log(e); + await _dialogService.ShowErrorAsync(Properties.Resources.DialogErrorDownloadingDemos, + MessageDialogStyle.Affirmative); } } finally @@ -1995,47 +2006,48 @@ private async Task PreProcessDemoDownload() return true; } - private async Task HandleBoilerResult(int result, bool isRecentMatches = true) + private async Task HandleBoilerResult(int exitCode, bool isRecentMatches = true) { - switch (result) + switch (exitCode) { - case 1: - await _dialogService.ShowErrorAsync(Properties.Resources.DialogBoilerNotFound, MessageDialogStyle.Affirmative); + case (int)BoilerExitCode.Success: + await ProcessDemosDownloaded(); break; - case 2: - await _dialogService.ShowErrorAsync(Properties.Resources.DialogBoilerIncorrect, MessageDialogStyle.Affirmative); + case (int)BoilerExitCode.FatalError: + string msg = isRecentMatches + ? Properties.Resources.DialogErrorWhileRetrievingMatchesData + : Properties.Resources.DialogErrorWhileRetrievingDemoData; + await _dialogService.ShowErrorAsync(msg, MessageDialogStyle.Affirmative); break; - case -1: - await _dialogService.ShowErrorAsync("Invalid arguments", MessageDialogStyle.Affirmative); + case (int)BoilerExitCode.InvalidArguments: + await _dialogService.ShowErrorAsync("Invalid arguments provided to boiler", MessageDialogStyle.Affirmative); break; - case -2: + case (int)BoilerExitCode.CommunicationFailure: + await _dialogService.ShowErrorAsync("Error while contacting Steam, please retry later", MessageDialogStyle.Affirmative); + break; + case (int)BoilerExitCode.AlreadyConnectedToGC: + await _dialogService.ShowErrorAsync("You are already connected to the CSGO game coordinator, make sure to close CSGO and retry", MessageDialogStyle.Affirmative); + break; + case (int)BoilerExitCode.SteamRestartRequired: await _dialogService.ShowErrorAsync(Properties.Resources.DialogRestartSteam, MessageDialogStyle.Affirmative); break; - case -3: - case -4: - await - _dialogService.ShowErrorAsync(Properties.Resources.DialogSteamNotRunningOrNotLoggedIn, MessageDialogStyle.Affirmative); + case (int)BoilerExitCode.SteamNotRunningOrLoggedIn: + await _dialogService.ShowErrorAsync(Properties.Resources.DialogSteamNotRunningOrNotLoggedIn, MessageDialogStyle.Affirmative); break; - case -5: - case -6: - case -7: - string msg = isRecentMatches - ? string.Format(Properties.Resources.DialogErrorWhileRetrievingMatchesData, result) - : Properties.Resources.DialogErrorWhileRetrievingDemoData; - await _dialogService.ShowErrorAsync(msg, MessageDialogStyle.Affirmative); + case (int)BoilerExitCode.SteamUserNotLoggedIn: + await _dialogService.ShowErrorAsync("Steam account not connected", MessageDialogStyle.Affirmative); break; - case -8: + case (int)BoilerExitCode.NoMatchesFound: string demoNotFoundMessage = isRecentMatches ? Properties.Resources.DialogNoNewerDemo : Properties.Resources.DialogDemoFromShareCodeNotAvailable; await _dialogService.ShowMessageAsync(demoNotFoundMessage, MessageDialogStyle.Affirmative); break; - case 0: - await ProcessDemosDownloaded(isRecentMatches); + case (int)BoilerExitCode.WriteFileFailure: + await _dialogService.ShowErrorAsync("An error occurred while writing matches file", MessageDialogStyle.Affirmative); break; default: - await - _dialogService.ShowErrorAsync("Unknown error", MessageDialogStyle.Affirmative); + await _dialogService.ShowErrorAsync(string.Format(Properties.Resources.DialogUnknownBoilerExitCode, exitCode), MessageDialogStyle.Affirmative); break; } } diff --git a/Manager/boiler.exe b/Manager/boiler.exe deleted file mode 100644 index 31713bcae..000000000 Binary files a/Manager/boiler.exe and /dev/null differ diff --git a/Manager/steam_api.dll b/Manager/steam_api.dll deleted file mode 100644 index 52171b1dd..000000000 Binary files a/Manager/steam_api.dll and /dev/null differ diff --git a/Manager/steam_appid.txt b/Manager/steam_appid.txt deleted file mode 100644 index 826b14075..000000000 --- a/Manager/steam_appid.txt +++ /dev/null @@ -1 +0,0 @@ -730 \ No newline at end of file diff --git a/Services/Concrete/BoilerExitCode.cs b/Services/Concrete/BoilerExitCode.cs new file mode 100644 index 000000000..1b303ef8d --- /dev/null +++ b/Services/Concrete/BoilerExitCode.cs @@ -0,0 +1,16 @@ +namespace Services.Concrete +{ + public enum BoilerExitCode + { + Success = 0, + FatalError = 1, + InvalidArguments = 2, + CommunicationFailure = 3, + AlreadyConnectedToGC = 4, + SteamRestartRequired = 5, + SteamNotRunningOrLoggedIn = 6, + SteamUserNotLoggedIn = 7, // probably in offline mode + NoMatchesFound = 8, + WriteFileFailure = 9, + } +} diff --git a/Services/Concrete/CacheService.cs b/Services/Concrete/CacheService.cs index 9dbbd7adb..51abfe44f 100644 --- a/Services/Concrete/CacheService.cs +++ b/Services/Concrete/CacheService.cs @@ -662,7 +662,7 @@ public async Task CreateBackupCustomDataFile(string filePath) File.WriteAllText(filePath, jsonBackup); } - public async Task GenerateJsonAsync(Demo demo, string folderPath) + public async Task GenerateJsonAsync(Demo demo, string folderPath) { JsonSerializerSettings settings = new JsonSerializerSettings { @@ -677,7 +677,7 @@ public async Task GenerateJsonAsync(Demo demo, string folderPath) string json = await Task.Factory.StartNew(() => JsonConvert.SerializeObject(demo, settings)); File.WriteAllText(filePath, json); - return true; + return filePath; } /// diff --git a/Services/Concrete/SteamService.cs b/Services/Concrete/SteamService.cs index 320da20d8..cc0dc337b 100644 --- a/Services/Concrete/SteamService.cs +++ b/Services/Concrete/SteamService.cs @@ -14,6 +14,7 @@ using Core.Models; using Core.Models.Steam; using Newtonsoft.Json; +using Services.Exceptions; using Services.Interfaces; namespace Services.Concrete @@ -24,7 +25,7 @@ public class SteamService : ISteamService private const string PLAYERS_SUMMARIES_URL = "http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v1/?key={0}&steamids={1}"; private const string STEAM_RESOLVE_VANITY_URL = "http://api.steampowered.com/ISteamUser/ResolveVanityURL/v0001/?key={0}&vanityurl={1}"; private const string BOILER_EXE_NAME = "boiler.exe"; - private const string BOILER_SHA1 = "80F2C8A1F51118FA450AB9E700645508172B01B8"; + private const string BOILER_SHA1 = "8C016C34466B1DB5E46B7CE7DECFC5CCA8A7EE2F"; /// /// Return suspect list that have been banned @@ -324,10 +325,11 @@ public async Task> GetNewSuspectBannedArray(List suspectIdL private static async Task StartBoiler(CancellationToken ct, string args = "") { ct.ThrowIfCancellationRequested(); - string hash = GetSha1HashFile(BOILER_EXE_NAME); + string boilerPath = AppDomain.CurrentDomain.BaseDirectory + BOILER_EXE_NAME; + string hash = GetSha1HashFile(boilerPath); if (!hash.Equals(BOILER_SHA1)) { - return 2; + throw new InvalidBoilerExecutableException(); } Process[] currentProcess = Process.GetProcessesByName("csgo"); @@ -340,7 +342,7 @@ private static async Task StartBoiler(CancellationToken ct, string args = " { StartInfo = { - FileName = BOILER_EXE_NAME, + FileName = boilerPath, Arguments = $"\"{AppSettings.GetMatchListDataFilePath()}\" {args}", UseShellExecute = false, CreateNoWindow = true, diff --git a/Services/Design/CacheDesignService.cs b/Services/Design/CacheDesignService.cs index 707a08dd7..907511aff 100644 --- a/Services/Design/CacheDesignService.cs +++ b/Services/Design/CacheDesignService.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.IO; using System.Linq; using System.Threading.Tasks; using Core; @@ -263,9 +264,10 @@ public Task RemovePlayerFromWhitelist(string steamId) return Task.FromResult(true); } - public Task GenerateJsonAsync(Demo demo, string folderPath) + public Task GenerateJsonAsync(Demo demo, string folderPath) { - return Task.FromResult(true); + string filePath = folderPath + Path.DirectorySeparatorChar + demo.Name + ".json"; + return Task.FromResult(filePath); } public Task GetCacheSizeAsync() diff --git a/Services/Exceptions/InvalidBoilerExecutableException.cs b/Services/Exceptions/InvalidBoilerExecutableException.cs new file mode 100644 index 000000000..ea2de86b2 --- /dev/null +++ b/Services/Exceptions/InvalidBoilerExecutableException.cs @@ -0,0 +1,11 @@ +using System; + +namespace Services.Exceptions +{ + public class InvalidBoilerExecutableException : Exception + { + public InvalidBoilerExecutableException() : base("Invalid boiler executable") + { + } + } +} diff --git a/Services/Interfaces/ICacheService.cs b/Services/Interfaces/ICacheService.cs index 9282360a3..a221737eb 100644 --- a/Services/Interfaces/ICacheService.cs +++ b/Services/Interfaces/ICacheService.cs @@ -76,7 +76,7 @@ public interface ICacheService /// /// /// - Task GenerateJsonAsync(Demo demo, string folderPath); + Task GenerateJsonAsync(Demo demo, string folderPath); /// /// Return the size of the cache folder diff --git a/Services/Services.csproj b/Services/Services.csproj index 8203a36ec..26d002c28 100644 --- a/Services/Services.csproj +++ b/Services/Services.csproj @@ -175,6 +175,8 @@ + + @@ -434,6 +436,18 @@ + + + Always + + + Always + + + Always + + + diff --git a/Services/boiler.exe b/Services/boiler.exe new file mode 100644 index 000000000..f54144ae5 Binary files /dev/null and b/Services/boiler.exe differ diff --git a/Services/steam_api.dll b/Services/steam_api.dll new file mode 100644 index 000000000..e2b2db088 Binary files /dev/null and b/Services/steam_api.dll differ diff --git a/Services/steam_appid.txt b/Services/steam_appid.txt new file mode 100644 index 000000000..9559cd924 --- /dev/null +++ b/Services/steam_appid.txt @@ -0,0 +1 @@ +730 diff --git a/setup.iss b/setup.iss index f59078dee..8efab4ad2 100644 --- a/setup.iss +++ b/setup.iss @@ -25,10 +25,26 @@ OutputDir=. OutputBaseFilename=csgo-demos-manager-{#AppVer} SolidCompression=yes UninstallDisplayIcon={app}\{#ExeName} +ChangesEnvironment=yes [Dirs] Name: "{userappdata}\{#emit SetupSetting("AppPublisher")}\{#emit SetupSetting("AppName")}" +[code] +function NeedsAddPath(Param: string): boolean; +var + OrigPath: string; +begin + if not RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 'Path', OrigPath) + then begin + Result := True; + exit; + end; + { look for the path with leading and trailing semicolon } + { Pos() returns 0 if not found } + Result := Pos(';' + Param + ';', ';' + OrigPath + ';') = 0; +end; + [code] ///////////////////////////////////////////////////////////////////// function GetUninstallString(): String; @@ -98,14 +114,12 @@ begin end; end; - -// setup registry to change .dem files association [Registry] Root: HKCR; Subkey: ".dem"; ValueData: "{#AppName}"; Flags: uninsdeletevalue; ValueType: string; ValueName: "" Root: HKCR; Subkey: "{#AppName}"; ValueData: "Program {#AppName}"; Flags: uninsdeletekey; ValueType: string; ValueName: "" Root: HKCR; Subkey: "{#AppName}\DefaultIcon"; ValueData: "{app}\app.ico,0"; ValueType: string; ValueName: "" Root: HKCR; Subkey: "{#AppName}\shell\open\command"; ValueData: """{app}\{#ExeName}"" ""%1"""; ValueType: string; ValueName: "" - +Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};{app}"; Check: NeedsAddPath(ExpandConstant('{app}')); Tasks: envPath [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" Name: "french"; MessagesFile: "compiler:Languages\French.isl" @@ -113,8 +127,11 @@ Name: "french"; MessagesFile: "compiler:Languages\French.isl" [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked Name: "fileassoc"; Description: "{cm:AssocFileExtension,{#AppName},.dem}" +Name: "envPath"; Description: "Add to PATH variable (useful to use the CLI from anywhere)" [Files] +Source: "CLI\bin\Release\csgodm.exe"; DestDir: "{app}"; Flags: ignoreversion +Source: "CLI\bin\Release\csgodm.exe.config"; DestDir: "{app}"; Flags: ignoreversion Source: "Manager\bin\x86\Release\app.ico"; DestDir: "{app}"; Flags: ignoreversion Source: "Manager\bin\x86\Release\boiler.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "Manager\bin\x86\Release\CommonServiceLocator.dll"; DestDir: "{app}"; Flags: ignoreversion @@ -191,3 +208,4 @@ Filename: "{app}\{#ExeName}"; Description: "{cm:LaunchProgram,CSGO Demos Manager [UninstallRun] Filename: "{cmd}"; Parameters: "/C ""taskkill /im CSGOSuspectsBot.exe /f /t" +Filename: "{cmd}"; Parameters: "/C ""taskkill /im csgodm.exe /f /t"