diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index bd149f0..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "SteamStorefrontAPI"] - path = SteamStorefrontAPI - url = https://git.jeddunk.xyz/jeddunk/SteamStorefrontAPI.git diff --git a/auto-creamapi.sln b/auto-creamapi.sln index 78be129..c220862 100644 --- a/auto-creamapi.sln +++ b/auto-creamapi.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.8.34330.188 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30413.136 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "auto-creamapi", "auto-creamapi\auto-creamapi.csproj", "{26060B32-199E-4366-8FDE-6B1E10E0EF62}" EndProject diff --git a/auto-creamapi/App.xaml.cs b/auto-creamapi/App.xaml.cs index d78cbe5..95e07c3 100644 --- a/auto-creamapi/App.xaml.cs +++ b/auto-creamapi/App.xaml.cs @@ -10,7 +10,7 @@ namespace auto_creamapi { protected override void RegisterSetup() { - this.RegisterSetupType(); + this.RegisterSetupType>(); } } } \ No newline at end of file diff --git a/auto-creamapi/Converters/ListOfDLcToStringConverter.cs b/auto-creamapi/Converters/ListOfDLcToStringConverter.cs index 5691ee6..9904374 100644 --- a/auto-creamapi/Converters/ListOfDLcToStringConverter.cs +++ b/auto-creamapi/Converters/ListOfDLcToStringConverter.cs @@ -31,26 +31,24 @@ namespace auto_creamapi.Converters { MyLogger.Log.Debug("ListOfDLcToStringConverter: ConvertBack"); var stringToDlcList = StringToDlcList(value); - return stringToDlcList.GetType() == targetType ? stringToDlcList : []; + return stringToDlcList.GetType() == targetType ? stringToDlcList : new ObservableCollection(); } private static ObservableCollection StringToDlcList(string value) { var result = new ObservableCollection(); - var expression = new Regex("(?.*) *= *(?.*)"); + var expression = new Regex(@"(?.*) *= *(?.*)"); using var reader = new StringReader(value); string line; while ((line = reader.ReadLine()) != null) { var match = expression.Match(line); if (match.Success) - { result.Add(new SteamApp { AppId = int.Parse(match.Groups["id"].Value), Name = match.Groups["name"].Value }); - } } return result; diff --git a/auto-creamapi/Core/MainApplication.cs b/auto-creamapi/Core/App.cs similarity index 90% rename from auto-creamapi/Core/MainApplication.cs rename to auto-creamapi/Core/App.cs index 2201b8a..f64d409 100644 --- a/auto-creamapi/Core/MainApplication.cs +++ b/auto-creamapi/Core/App.cs @@ -4,7 +4,7 @@ using MvvmCross.ViewModels; namespace auto_creamapi.Core { - public class MainApplication : MvxApplication + public class App : MvxApplication { public override void Initialize() { diff --git a/auto-creamapi/Services/CacheService.cs b/auto-creamapi/Services/CacheService.cs index 223bbe5..ca2af53 100644 --- a/auto-creamapi/Services/CacheService.cs +++ b/auto-creamapi/Services/CacheService.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using System.IO; using System.Linq; using System.Net.Http; @@ -33,7 +32,11 @@ namespace auto_creamapi.Services private const string CachePath = "steamapps.json"; private const string SteamUri = "https://api.steampowered.com/ISteamApps/GetAppList/v2/"; - private HashSet _cache = []; + private const string UserAgent = + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) " + + "Chrome/87.0.4280.88 Safari/537.36"; + + private HashSet _cache = new HashSet(); public async Task Initialize() { @@ -81,149 +84,125 @@ namespace auto_creamapi.Services public SteamApp GetAppByName(string name) { - MyLogger.Log.Information("Trying to get app {Name}", name); + MyLogger.Log.Information($"Trying to get app {name}"); var comparableName = Regex.Replace(name, Misc.SpecialCharsRegex, "").ToLower(); var app = _cache.FirstOrDefault(x => x.CompareName(comparableName)); - if (app != null) MyLogger.Log.Information("Successfully got app {App}", app); + if (app != null) MyLogger.Log.Information($"Successfully got app {app}"); return app; } public SteamApp GetAppById(int appid) { - MyLogger.Log.Information("Trying to get app with ID {AppId}", appid); + MyLogger.Log.Information($"Trying to get app with ID {appid}"); var app = _cache.FirstOrDefault(x => x.AppId.Equals(appid)); - if (app != null) MyLogger.Log.Information("Successfully got app {App}", app); + if (app != null) MyLogger.Log.Information($"Successfully got app {app}"); return app; } public async Task> GetListOfDlc(SteamApp steamApp, bool useSteamDb, bool ignoreUnknown) { - MyLogger.Log.Debug("Start: GetListOfDlc"); + MyLogger.Log.Information("Get DLC"); var dlcList = new List(); - try + if (steamApp != null) { - if (steamApp != null) + var steamAppDetails = await AppDetails.GetAsync(steamApp.AppId).ConfigureAwait(false); + if (steamAppDetails != null) { - var steamAppDetails = await AppDetails.GetAsync(steamApp.AppId).ConfigureAwait(false); - if (steamAppDetails != null) + MyLogger.Log.Debug($"Type for Steam App {steamApp.Name}: \"{steamAppDetails.Type}\""); + if (steamAppDetails.Type == "game" | steamAppDetails.Type == "demo") { - MyLogger.Log.Debug("Type for Steam App {Name}: \"{Type}\"", steamApp.Name, - steamAppDetails.Type); - if (steamAppDetails.Type == "game" || steamAppDetails.Type == "demo") + steamAppDetails.DLC.ForEach(x => { - steamAppDetails.DLC.ForEach(x => + var result = _cache.FirstOrDefault(y => y.AppId.Equals(x)); + if (result == null) { - var result = _cache.FirstOrDefault(y => y.AppId.Equals(x)); - if (result == null) return; var dlcDetails = AppDetails.GetAsync(x).Result; - dlcList.Add(dlcDetails != null + result = dlcDetails != null ? new SteamApp { AppId = dlcDetails.SteamAppId, Name = dlcDetails.Name } - : new SteamApp { AppId = x, Name = $"Unknown DLC {x}" }); - }); - - dlcList.ForEach(x => MyLogger.Log.Debug("{AppId}={Name}", x.AppId, x.Name)); - MyLogger.Log.Information("Got DLC successfully..."); - - // Return if Steam DB is deactivated - if (!useSteamDb) return dlcList; - - string steamDbUrl = $"https://steamdb.info/app/{steamApp.AppId}/dlc/"; - - var client = new HttpClient(); - string archiveJson = await client.GetStringAsync($"https://archive.org/wayback/available?url={steamDbUrl}"); - var archiveResult = JsonSerializer.Deserialize(archiveJson); - - if (archiveResult == null || archiveResult.ArchivedSnapshots.Closest?.Status != "200") - { - return dlcList; + : new SteamApp { AppId = x, Name = $"Unknown DLC {x}" }; } - //language=regex - const string pattern = @"^(https?:\/\/web\.archive\.org\/web\/\d+)(\/.+)$"; - const string substitution = "$1id_$2"; - const RegexOptions options = RegexOptions.Multiline; + dlcList.Add(result); + }); - Regex regex = new(pattern, options); - string newUrl = regex.Replace(archiveResult.ArchivedSnapshots.Closest.Url, substitution); + dlcList.ForEach(x => MyLogger.Log.Debug($"{x.AppId}={x.Name}")); + MyLogger.Log.Information("Got DLC successfully..."); + + if (!useSteamDb) return dlcList; + + // Get DLC from SteamDB + // Get Cloudflare cookie + // Scrape and parse HTML page + // Add missing to DLC list + var steamDbUri = new Uri($"https://steamdb.info/app/{steamApp.AppId}/dlc/"); - //client.DefaultRequestHeaders.UserAgent.ParseAdd(UserAgent); + var client = new HttpClient(); + client.DefaultRequestHeaders.UserAgent.ParseAdd(UserAgent); - MyLogger.Log.Information("Get SteamDB App"); - var httpCall = client.GetAsync(newUrl); - var response = await httpCall.ConfigureAwait(false); - MyLogger.Log.Debug("{Status}", httpCall.Status.ToString()); - MyLogger.Log.Debug("{Boolean}", response.IsSuccessStatusCode.ToString()); + MyLogger.Log.Information("Get SteamDB App"); + var httpCall = client.GetAsync(steamDbUri); + var response = await httpCall.ConfigureAwait(false); + MyLogger.Log.Debug(httpCall.Status.ToString()); + MyLogger.Log.Debug(response.EnsureSuccessStatusCode().ToString()); - response.EnsureSuccessStatusCode(); + var readAsStringAsync = response.Content.ReadAsStringAsync(); + var responseBody = await readAsStringAsync.ConfigureAwait(false); + MyLogger.Log.Debug(readAsStringAsync.Status.ToString()); - var readAsStringAsync = response.Content.ReadAsStringAsync(); - var responseBody = await readAsStringAsync.ConfigureAwait(false); - MyLogger.Log.Debug("{Status}", readAsStringAsync.Status.ToString()); + var parser = new HtmlParser(); + var doc = parser.ParseDocument(responseBody); + // Console.WriteLine(doc.DocumentElement.OuterHtml); - var parser = new HtmlParser(); - var doc = parser.ParseDocument(responseBody); - // Console.WriteLine(doc.DocumentElement.OuterHtml); - - var query1 = doc.QuerySelector("#dlc"); - if (query1 != null) + var query1 = doc.QuerySelector("#dlc"); + if (query1 != null) + { + var query2 = query1.QuerySelectorAll(".app"); + foreach (var element in query2) { - var query2 = query1.QuerySelectorAll(".app"); - foreach (var element in query2) - { - var dlcId = element.GetAttribute("data-appid"); - var query3 = element.QuerySelectorAll("td"); - var dlcName = query3 == null - ? $"Unknown DLC {dlcId}" - : query3[1].Text().Replace("\n", "").Trim(); + var dlcId = element.GetAttribute("data-appid"); + var dlcName = $"Unknown DLC {dlcId}"; + var query3 = element.QuerySelectorAll("td"); + if (query3 != null) dlcName = query3[1].Text().Replace("\n", "").Trim(); - if (ignoreUnknown && dlcName.Contains("SteamDB Unknown App")) + if (ignoreUnknown && dlcName.Contains("SteamDB Unknown App")) + { + MyLogger.Log.Information($"Skipping SteamDB Unknown App {dlcId}"); + } + else + { + var dlcApp = new SteamApp {AppId = Convert.ToInt32(dlcId), Name = dlcName}; + var i = dlcList.FindIndex(x => x.AppId.Equals(dlcApp.AppId)); + if (i > -1) { - MyLogger.Log.Information("Skipping SteamDB Unknown App {DlcId}", dlcId); + if (dlcList[i].Name.Contains("Unknown DLC")) dlcList[i] = dlcApp; } else { - var dlcApp = new SteamApp { AppId = Convert.ToInt32(dlcId), Name = dlcName }; - var i = dlcList.FindIndex(x => x.AppId.Equals(dlcApp.AppId)); - if (i > -1) - { - if (dlcList[i].Name.Contains("Unknown DLC")) dlcList[i] = dlcApp; - } - else - { - dlcList.Add(dlcApp); - } + dlcList.Add(dlcApp); } } - - dlcList.ForEach(x => MyLogger.Log.Debug("{AppId}={Name}", x.AppId, x.Name)); - MyLogger.Log.Information("Got DLC from SteamDB successfully..."); - } - else - { - MyLogger.Log.Error("Could not get DLC from SteamDB!"); } + dlcList.ForEach(x => MyLogger.Log.Debug($"{x.AppId}={x.Name}")); + MyLogger.Log.Information("Got DLC from SteamDB successfully..."); } else { - MyLogger.Log.Error("Could not get DLC: Steam App is not of type: \"Game\""); + MyLogger.Log.Error("Could not get DLC from SteamDB!"); } } else { - MyLogger.Log.Error("Could not get DLC: Could not get Steam App details"); + MyLogger.Log.Error("Could not get DLC: Steam App is not of type: \"Game\""); } } else { - MyLogger.Log.Error("Could not get DLC: Invalid Steam App"); + MyLogger.Log.Error("Could not get DLC..."); } - - //return dlcList; } - catch (Exception e) + else { - MyLogger.Log.Error("Could not get DLC!"); - MyLogger.Log.Debug(e.Demystify(), "Exception thrown!"); + MyLogger.Log.Error("Could not get DLC: Invalid Steam App"); } return dlcList; diff --git a/auto-creamapi/Services/CreamConfigService.cs b/auto-creamapi/Services/CreamConfigService.cs index d21f13d..acd2a3e 100644 --- a/auto-creamapi/Services/CreamConfigService.cs +++ b/auto-creamapi/Services/CreamConfigService.cs @@ -65,7 +65,7 @@ namespace auto_creamapi.Services _configFilePath = configFilePath; if (File.Exists(configFilePath)) { - MyLogger.Log.Information("Config file found @ {ConfigFilePath}, parsing...", configFilePath); + MyLogger.Log.Information($"Config file found @ {configFilePath}, parsing..."); var parser = new FileIniDataParser(); var data = parser.ReadFile(_configFilePath, Encoding.UTF8); @@ -83,7 +83,7 @@ namespace auto_creamapi.Services } else { - MyLogger.Log.Information("Config file does not exist @ {ConfigFilePath}, skipping...", configFilePath); + MyLogger.Log.Information($"Config file does not exist @ {configFilePath}, skipping..."); ResetConfigData(); } } diff --git a/auto-creamapi/Services/CreamDllService.cs b/auto-creamapi/Services/CreamDllService.cs index de3c9b7..9cee2df 100644 --- a/auto-creamapi/Services/CreamDllService.cs +++ b/auto-creamapi/Services/CreamDllService.cs @@ -66,8 +66,8 @@ namespace auto_creamapi.Services var x64File = Path.Combine(TargetPath, "steam_api64.dll"); _x86Exists = File.Exists(x86File); _x64Exists = File.Exists(x64File); - if (_x86Exists) MyLogger.Log.Information("x86 SteamAPI DLL found: {X}", x86File); - if (_x64Exists) MyLogger.Log.Information("x64 SteamAPI DLL found: {X}", x64File); + if (_x86Exists) MyLogger.Log.Information($"x86 SteamAPI DLL found: {x86File}"); + if (_x64Exists) MyLogger.Log.Information($"x64 SteamAPI DLL found: {x64File}"); } public bool CreamApiApplied() @@ -83,7 +83,7 @@ namespace auto_creamapi.Services var targetSteamApiDll = Path.Combine(TargetPath, _creamDlls[arch].Filename); var targetSteamApiOrigDll = Path.Combine(TargetPath, _creamDlls[arch].OrigFilename); var targetSteamApiDllBackup = Path.Combine(TargetPath, $"{_creamDlls[arch].Filename}.backup"); - MyLogger.Log.Information("Setting up CreamAPI DLL @ {TargetPath} (arch :{Arch})", TargetPath, arch); + MyLogger.Log.Information($"Setting up CreamAPI DLL @ {TargetPath} (arch :{arch})"); // Create backup of steam_api.dll File.Copy(targetSteamApiDll, targetSteamApiDllBackup, true); // Check if steam_api_o.dll already exists diff --git a/auto-creamapi/Services/DownloadCreamApiService.cs b/auto-creamapi/Services/DownloadCreamApiService.cs index ba9f75c..870c755 100644 --- a/auto-creamapi/Services/DownloadCreamApiService.cs +++ b/auto-creamapi/Services/DownloadCreamApiService.cs @@ -4,6 +4,7 @@ using System.IO; using System.Linq; using System.Net; using System.Net.Http; +using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using auto_creamapi.Messenger; @@ -36,8 +37,6 @@ namespace auto_creamapi.Services var container = new CookieContainer(); var handler = new HttpClientHandler {CookieContainer = container}; var client = new HttpClient(handler); - client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) " + - "Gecko/20100101 Firefox/86.0"); var formContent = new FormUrlEncodedContent(new[] { new KeyValuePair("username", username), @@ -48,15 +47,14 @@ namespace auto_creamapi.Services MyLogger.Log.Debug("Download: post login"); var response1 = await client.PostAsync("https://cs.rin.ru/forum/ucp.php?mode=login", formContent) .ConfigureAwait(false); - MyLogger.Log.Debug("Login Status Code: {StatusCode}", - response1.EnsureSuccessStatusCode().StatusCode); + MyLogger.Log.Debug($"Login Status Code: {response1.EnsureSuccessStatusCode().StatusCode.ToString()}"); var cookie = container.GetCookies(new Uri("https://cs.rin.ru/forum/ucp.php?mode=login")) .FirstOrDefault(c => c.Name.Contains("_sid")); - MyLogger.Log.Debug("Login Cookie: {Cookie}", cookie); + MyLogger.Log.Debug($"Login Cookie: {cookie}"); var response2 = await client.GetAsync("https://cs.rin.ru/forum/viewtopic.php?t=70576") .ConfigureAwait(false); - MyLogger.Log.Debug("Download Page Status Code: {StatusCode}", - response2.EnsureSuccessStatusCode().StatusCode); + MyLogger.Log.Debug( + $"Download Page Status Code: {response2.EnsureSuccessStatusCode().StatusCode.ToString()}"); var content = response2.Content.ReadAsStringAsync(); var contentResult = await content.ConfigureAwait(false); @@ -73,7 +71,7 @@ namespace auto_creamapi.Services { archiveFileList.Add(match.Groups["filename"].Value, $"https://cs.rin.ru/forum{match.Groups["url"].Value}"); - MyLogger.Log.Debug("{X}", archiveFileList.LastOrDefault().Key); + MyLogger.Log.Debug(archiveFileList.LastOrDefault().Key); } } @@ -81,7 +79,7 @@ namespace auto_creamapi.Services var (filename, url) = archiveFileList.FirstOrDefault(); if (File.Exists(filename)) { - MyLogger.Log.Information("{Filename} already exists, skipping download...", filename); + MyLogger.Log.Information($"{filename} already exists, skipping download..."); return filename; } @@ -104,7 +102,7 @@ namespace auto_creamapi.Services const string nonlogBuild = "nonlog_build"; const string steamApi64Dll = "steam_api64.dll"; const string steamApiDll = "steam_api.dll"; - MyLogger.Log.Information(@"Start extraction of ""{Filename}""...", filename); + MyLogger.Log.Information($@"Start extraction of ""{filename}""..."); var nonlogBuildPath = Path.Combine(cwd, nonlogBuild); if (Directory.Exists(nonlogBuildPath)) Directory.Delete(nonlogBuildPath, true); diff --git a/auto-creamapi/Setup.cs b/auto-creamapi/Setup.cs deleted file mode 100644 index 9a5682a..0000000 --- a/auto-creamapi/Setup.cs +++ /dev/null @@ -1,29 +0,0 @@ -using auto_creamapi.Core; -using auto_creamapi.Utils; -using Microsoft.Extensions.Logging; -using MvvmCross.Platforms.Wpf.Core; -using Serilog; -using Serilog.Extensions.Logging; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace auto_creamapi -{ - public class Setup : MvxWpfSetup - { - protected override ILoggerFactory CreateLogFactory() - { - Log.Logger = MyLogger.Log; - - return new SerilogLoggerFactory(); - } - - protected override ILoggerProvider CreateLogProvider() - { - return new SerilogLoggerProvider(); - } - } -} diff --git a/auto-creamapi/Utils/AvailabeArchive.cs b/auto-creamapi/Utils/AvailabeArchive.cs deleted file mode 100644 index f7561b1..0000000 --- a/auto-creamapi/Utils/AvailabeArchive.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Text.Json.Serialization; - -namespace auto_creamapi.Utils -{ - - public class AvailableArchive - { - [JsonPropertyName("url")] - public string Url { get; set; } - - [JsonPropertyName("archived_snapshots")] - public ArchivedSnapshot ArchivedSnapshots { get; set; } - } - - public class ArchivedSnapshot - { - [JsonPropertyName("closest")] - public Closest Closest { get; set; } - } - - public class Closest - { - [JsonPropertyName("status")] - public string Status { get; set; } - - [JsonPropertyName("available")] - public bool Available { get; set; } - - [JsonPropertyName("url")] - public string Url { get; set; } - - [JsonPropertyName("timestamp")] - public string Timestamp { get; set; } - } -} diff --git a/auto-creamapi/Utils/ISecrets.cs b/auto-creamapi/Utils/ISecrets.cs deleted file mode 100644 index 01840ac..0000000 --- a/auto-creamapi/Utils/ISecrets.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace auto_creamapi.Utils -{ - public interface ISecrets - { - public string ForumUsername(); - public string ForumPassword(); - } -} \ No newline at end of file diff --git a/auto-creamapi/Utils/Misc.cs b/auto-creamapi/Utils/Misc.cs index 5e0883c..3290f47 100644 --- a/auto-creamapi/Utils/Misc.cs +++ b/auto-creamapi/Utils/Misc.cs @@ -3,11 +3,11 @@ using System.Collections.ObjectModel; namespace auto_creamapi.Utils { - public static class Misc + public class Misc { public const string SpecialCharsRegex = "[^0-9a-zA-Z]+"; public const string DefaultLanguageSelection = "english"; - public static readonly ObservableCollection DefaultLanguages = new(new[] + public static readonly ObservableCollection DefaultLanguages = new ObservableCollection(new[] { "arabic", "bulgarian", diff --git a/auto-creamapi/Utils/MyLogger.cs b/auto-creamapi/Utils/MyLogger.cs index 903e5a9..9e1b19a 100644 --- a/auto-creamapi/Utils/MyLogger.cs +++ b/auto-creamapi/Utils/MyLogger.cs @@ -1,14 +1,12 @@ using Serilog; using Serilog.Core; -using Serilog.Exceptions; namespace auto_creamapi.Utils { - public static class MyLogger + public class MyLogger { public static readonly Logger Log = new LoggerConfiguration() .MinimumLevel.Debug() - .Enrich.WithExceptionDetails() .WriteTo.Console() .WriteTo.File("autocreamapi.log", rollingInterval: RollingInterval.Day) .CreateLogger(); diff --git a/auto-creamapi/Utils/Secrets.EXAMPLE.cs b/auto-creamapi/Utils/Secrets.EXAMPLE.cs new file mode 100644 index 0000000..f885562 --- /dev/null +++ b/auto-creamapi/Utils/Secrets.EXAMPLE.cs @@ -0,0 +1,14 @@ +namespace auto_creamapi.Utils +{ + /// + /// To use this: + /// Rename file Secrets.EXAMPLE.cs to Secrets.cs + /// Rename class Secrets_REMOVETHIS to Secrets + /// Enter the relevant info below + /// + public class Secrets_REMOVETHIS + { + public const string Username = "Enter username here"; + public const string Password = "Enter password here"; + } +} \ No newline at end of file diff --git a/auto-creamapi/ViewModels/DownloadViewModel.cs b/auto-creamapi/ViewModels/DownloadViewModel.cs index 238509c..c580d8d 100644 --- a/auto-creamapi/ViewModels/DownloadViewModel.cs +++ b/auto-creamapi/ViewModels/DownloadViewModel.cs @@ -1,37 +1,32 @@ -using System; using System.Threading.Tasks; -using System.Windows; using auto_creamapi.Messenger; using auto_creamapi.Services; using auto_creamapi.Utils; -using Microsoft.Extensions.Logging; +using MvvmCross.Logging; using MvvmCross.Navigation; using MvvmCross.Plugin.Messenger; using MvvmCross.ViewModels; namespace auto_creamapi.ViewModels { + public class DownloadViewModel : MvxNavigationViewModel { private readonly IDownloadCreamApiService _download; private readonly IMvxNavigationService _navigationService; private readonly MvxSubscriptionToken _token; - private readonly ILogger _logger; private string _filename; private string _info; private double _progress; - private readonly Secrets _secrets = new(); - - public DownloadViewModel(ILoggerFactory loggerFactory, IMvxNavigationService navigationService, - IDownloadCreamApiService download, IMvxMessenger messenger) : base(loggerFactory, navigationService) + public DownloadViewModel(IMvxLogProvider logProvider, IMvxNavigationService navigationService, + IDownloadCreamApiService download, IMvxMessenger messenger) : base(logProvider, navigationService) { _navigationService = navigationService; - _logger = loggerFactory.CreateLogger(); _download = download; _token = messenger.Subscribe(OnProgressMessage); - _logger.LogDebug("{Count}", messenger.CountSubscriptionsFor()); + MyLogger.Log.Debug(messenger.CountSubscriptionsFor().ToString()); } public string InfoLabel @@ -67,38 +62,25 @@ namespace auto_creamapi.ViewModels public string ProgressPercent => _progress.ToString("P2"); - public override void Prepare() + public override async Task Initialize() { + await base.Initialize().ConfigureAwait(false); InfoLabel = "Please wait..."; FilenameLabel = ""; Progress = 0.0; - } - - public override async Task Initialize() - { - try - { - await base.Initialize().ConfigureAwait(false); - var download = _download.Download(_secrets.ForumUsername(), _secrets.ForumPassword()); - var filename = await download.ConfigureAwait(false); - var extract = _download.Extract(filename); - await extract.ConfigureAwait(false); - _token.Dispose(); - await _navigationService.Close(this).ConfigureAwait(false); - } - catch (Exception e) - { - MessageBox.Show("Could not download CreamAPI!\nPlease add CreamAPI DLLs manually!\nShutting down...", - "Error", MessageBoxButton.OK, MessageBoxImage.Error); - _token.Dispose(); - await _navigationService.Close(this).ConfigureAwait(false); - Console.WriteLine(e); - throw; - } + var download = _download.Download(Secrets.ForumUsername, Secrets.ForumPassword); + var filename = await download.ConfigureAwait(false); + /*var extract = _download.Extract(filename); + await extract;*/ + var extract = _download.Extract(filename); + await extract.ConfigureAwait(false); + _token.Dispose(); + await _navigationService.Close(this).ConfigureAwait(false); } private void OnProgressMessage(ProgressMessage obj) { + //MyLogger.Log.Debug($"{obj.Filename}: {obj.BytesTransferred}"); InfoLabel = obj.Info; FilenameLabel = obj.Filename; Progress = obj.PercentComplete; diff --git a/auto-creamapi/ViewModels/MainViewModel.cs b/auto-creamapi/ViewModels/MainViewModel.cs index 296164d..eed6b30 100644 --- a/auto-creamapi/ViewModels/MainViewModel.cs +++ b/auto-creamapi/ViewModels/MainViewModel.cs @@ -7,7 +7,6 @@ using System.Threading.Tasks; using auto_creamapi.Models; using auto_creamapi.Services; using auto_creamapi.Utils; -using Microsoft.Extensions.Logging; using Microsoft.Win32; using MvvmCross.Commands; using MvvmCross.Navigation; @@ -20,7 +19,6 @@ namespace auto_creamapi.ViewModels private readonly ICacheService _cache; private readonly ICreamConfigService _config; - private readonly ILogger _logger; private readonly ICreamDllService _dll; private readonly IMvxNavigationService _navigationService; private int _appId; @@ -45,10 +43,9 @@ namespace auto_creamapi.ViewModels //private const string DlcRegexPattern = @"(?.*) *= *(?.*)"; public MainViewModel(ICacheService cache, ICreamConfigService config, ICreamDllService dll, - IMvxNavigationService navigationService, ILoggerFactory loggerFactory) + IMvxNavigationService navigationService) { _navigationService = navigationService; - _logger = loggerFactory.CreateLogger(); _cache = cache; _config = config; _dll = dll; @@ -59,7 +56,7 @@ namespace auto_creamapi.ViewModels { base.Prepare(); _config.Initialize(); - var tasks = new List { _cache.Initialize() }; + var tasks = new List {_cache.Initialize()}; if (!File.Exists("steam_api.dll") | !File.Exists("steam_api64.dll")) tasks.Add(_navigationService.Navigate()); //tasks.Add(_navigationService.Navigate()); @@ -72,6 +69,11 @@ namespace auto_creamapi.ViewModels Status = "Ready."; } + public override Task Initialize() + { + return base.Initialize(); + } + // // COMMANDS // // public IMvxCommand OpenFileCommand => new MvxAsyncCommand(OpenFile); @@ -86,8 +88,6 @@ namespace auto_creamapi.ViewModels public IMvxCommand GoToForumThreadCommand => new MvxCommand(GoToForumThread); - public IMvxCommand GoToSteamdbCommand => new MvxCommand(GoToSteamdb); - // // ATTRIBUTES // // public bool MainWindowEnabled @@ -275,7 +275,7 @@ namespace auto_creamapi.ViewModels var s = index > -1 ? strings[index] : null; if (s != null) GameName = s; await Search().ConfigureAwait(false); - // await GetListOfDlc().ConfigureAwait(false); + await GetListOfDlc().ConfigureAwait(false); } Status = "Ready."; @@ -311,11 +311,11 @@ namespace auto_creamapi.ViewModels } } - // await GetListOfDlc().ConfigureAwait(false); + await GetListOfDlc().ConfigureAwait(false); } else { - _logger.LogWarning("Empty game name, cannot initiate search!"); + MyLogger.Log.Warning("Empty game name, cannot initiate search!"); } MainWindowEnabled = true; @@ -323,10 +323,10 @@ namespace auto_creamapi.ViewModels private async Task GetListOfDlc() { - Status = "Trying to get DLC, please wait..."; + Status = "Trying to get DLC..."; if (AppId > 0) { - var app = new SteamApp { AppId = AppId, Name = GameName }; + var app = new SteamApp {AppId = AppId, Name = GameName}; var task = _cache.GetListOfDlc(app, UseSteamDb, IgnoreUnknown); MainWindowEnabled = false; var listOfDlc = await task.ConfigureAwait(false); @@ -346,7 +346,7 @@ namespace auto_creamapi.ViewModels else { Status = $"Could not get DLC for AppID {AppId}"; - _logger.LogError("GetListOfDlc: Invalid AppID {AppId}", AppId); + MyLogger.Log.Error($"GetListOfDlc: Invalid AppID {AppId}"); } } @@ -385,7 +385,9 @@ namespace auto_creamapi.ViewModels { var searchTerm = AppId; //$"{GameName.Replace(" ", "+")}+{appId}"; var destinationUrl = - $"https://cs.rin.ru/forum/search.php?keywords={searchTerm}&terms=any&fid[]=10&sf=firstpost&sr=topics&submit=Search"; + "https://cs.rin.ru/forum/search.php?keywords=" + + searchTerm + + "&terms=any&fid[]=10&sf=firstpost&sr=topics&submit=Search"; var uri = new Uri(destinationUrl); var process = new ProcessStartInfo(uri.AbsoluteUri) { @@ -395,29 +397,7 @@ namespace auto_creamapi.ViewModels } else { - _logger.LogError("OpenURL: Invalid AppID {AppId}", AppId); - Status = $"Could not open URL: Invalid AppID {AppId}"; - } - } - - private void GoToSteamdb() - { - Status = "Opening URL..."; - if (AppId > 0) - { - var searchTerm = AppId; //$"{GameName.Replace(" ", "+")}+{appId}"; - var destinationUrl = - $"https://steamdb.info/app/{searchTerm}/dlc/"; - var uri = new Uri(destinationUrl); - var process = new ProcessStartInfo(uri.AbsoluteUri) - { - UseShellExecute = true - }; - Process.Start(process); - } - else - { - _logger.LogError("OpenURL: Invalid AppID {AppId}", AppId); + MyLogger.Log.Error($"OpenURL: Invalid AppID {AppId}"); Status = $"Could not open URL: Invalid AppID {AppId}"; } } diff --git a/auto-creamapi/ViewModels/SearchResultViewModel.cs b/auto-creamapi/ViewModels/SearchResultViewModel.cs index 82e401c..17804ca 100644 --- a/auto-creamapi/ViewModels/SearchResultViewModel.cs +++ b/auto-creamapi/ViewModels/SearchResultViewModel.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Threading.Tasks; using auto_creamapi.Models; using auto_creamapi.Utils; -using Microsoft.Extensions.Logging; using MvvmCross.Commands; using MvvmCross.Logging; using MvvmCross.Navigation; @@ -14,18 +13,16 @@ namespace auto_creamapi.ViewModels IMvxViewModel, SteamApp> { private readonly IMvxNavigationService _navigationService; - private readonly ILogger _logger; private IEnumerable _steamApps; /*public override async Task Initialize() { await base.Initialize(); }*/ - public SearchResultViewModel(ILoggerFactory loggerFactory, IMvxNavigationService navigationService) : base( - loggerFactory, navigationService) + public SearchResultViewModel(IMvxLogProvider logProvider, IMvxNavigationService navigationService) : base( + logProvider, navigationService) { _navigationService = navigationService; - _logger = loggerFactory.CreateLogger(); } public IEnumerable Apps @@ -58,11 +55,9 @@ namespace auto_creamapi.ViewModels public override void ViewDestroy(bool viewFinishing = true) { - if (viewFinishing && CloseCompletionSource?.Task.IsCompleted == false && + if (viewFinishing && CloseCompletionSource != null && !CloseCompletionSource.Task.IsCompleted && !CloseCompletionSource.Task.IsFaulted) - { CloseCompletionSource?.TrySetCanceled(); - } base.ViewDestroy(viewFinishing); } @@ -71,7 +66,7 @@ namespace auto_creamapi.ViewModels { if (Selected != null) { - _logger.LogInformation("Successfully got app {Selected}", Selected); + MyLogger.Log.Information($"Successfully got app {Selected}"); await _navigationService.Close(this, Selected).ConfigureAwait(false); } } diff --git a/auto-creamapi/Views/MainView.xaml b/auto-creamapi/Views/MainView.xaml index 719893e..154e9f4 100644 --- a/auto-creamapi/Views/MainView.xaml +++ b/auto-creamapi/Views/MainView.xaml @@ -56,18 +56,9 @@ - - - - - - - Search for cs.rin.ru thread... - - - Open SteamDB DLC page... - - + + Search for cs.rin.ru thread + - - WinExe - net8.0-windows - auto_creamapi - true - 2.2.0 - auto-creamapi - Jeddunk - jeddunk.xyz - 2.2.0 - 2.2.0 - + + WinExe + netcoreapp3.1 + auto_creamapi + true + 2.1.5 + auto-creamapi + Jeddunk + jeddunk.xyz + 2.1.5 + 2.1.5 + - - none - + + none + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - + + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + \ No newline at end of file