From 40ed646dcdd2e6b0c69c441941030a0dfb07d7f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=B4=85=E1=B4=8A=CA=9F=E1=B4=8F=CA=803x=E1=B4=A2?= =?UTF-8?q?=E1=B4=8F?= <89230676+djlorenzouasset@users.noreply.github.com> Date: Wed, 11 Feb 2026 16:03:50 +0100 Subject: [PATCH] Fix HTML tags in some Quests DisplayName. (#640) * Fix HTML tags in some Quests DisplayName. * New Backups & Hotfixes API * fix backups being null --------- Co-authored-by: GhostScissors <79089473+GhostScissors@users.noreply.github.com> --- FModel/Creator/Bases/FN/BaseQuest.cs | 3 ++- FModel/ViewModels/ApiEndpointViewModel.cs | 4 ++-- ...ralApiEndpoint.cs => DillyApiEndpoints.cs} | 22 ++++++++++++++++--- .../ApiEndpoints/FModelApiEndpoint.cs | 14 ------------ .../ApiEndpoints/Models/FModelResponse.cs | 4 +--- FModel/ViewModels/BackupManagerViewModel.cs | 6 ++--- FModel/ViewModels/CUE4ParseViewModel.cs | 2 +- 7 files changed, 28 insertions(+), 27 deletions(-) rename FModel/ViewModels/ApiEndpoints/{FortniteCentralApiEndpoint.cs => DillyApiEndpoints.cs} (52%) diff --git a/FModel/Creator/Bases/FN/BaseQuest.cs b/FModel/Creator/Bases/FN/BaseQuest.cs index ef3159aa..6d2e9b87 100644 --- a/FModel/Creator/Bases/FN/BaseQuest.cs +++ b/FModel/Creator/Bases/FN/BaseQuest.cs @@ -242,7 +242,8 @@ public class BaseQuest : BaseIcon { _informationPaint.TextSize = 25; _informationPaint.Typeface = Utils.Typefaces.Bundle; - Utils.DrawMultilineText(c, DisplayName, Width - padding, 0, SKTextAlign.Left, + + Utils.DrawMultilineText(c, Utils.RemoveHtmlTags(DisplayName).Replace(" ", " "), Width - padding, 0, SKTextAlign.Left, new SKRect(x, y + padding, maxX, Height - padding * 1.5f), _informationPaint, out _); } diff --git a/FModel/ViewModels/ApiEndpointViewModel.cs b/FModel/ViewModels/ApiEndpointViewModel.cs index 6276567a..249f450b 100644 --- a/FModel/ViewModels/ApiEndpointViewModel.cs +++ b/FModel/ViewModels/ApiEndpointViewModel.cs @@ -17,7 +17,7 @@ public class ApiEndpointViewModel public FortniteApiEndpoint FortniteApi { get; } public ValorantApiEndpoint ValorantApi { get; } - public FortniteCentralApiEndpoint CentralApi { get; } + public DillyApiEndpoint DillyApi { get; } public EpicApiEndpoint EpicApi { get; } public FModelApiEndpoint FModelApi { get; } public GitHubApiEndpoint GitHubApi { get; } @@ -27,7 +27,7 @@ public class ApiEndpointViewModel { FortniteApi = new FortniteApiEndpoint(_client); ValorantApi = new ValorantApiEndpoint(_client); - CentralApi = new FortniteCentralApiEndpoint(_client); + DillyApi = new DillyApiEndpoint(_client); EpicApi = new EpicApiEndpoint(_client); FModelApi = new FModelApiEndpoint(_client); GitHubApi = new GitHubApiEndpoint(_client); diff --git a/FModel/ViewModels/ApiEndpoints/FortniteCentralApiEndpoint.cs b/FModel/ViewModels/ApiEndpoints/DillyApiEndpoints.cs similarity index 52% rename from FModel/ViewModels/ApiEndpoints/FortniteCentralApiEndpoint.cs rename to FModel/ViewModels/ApiEndpoints/DillyApiEndpoints.cs index 0bb587bb..926061bc 100644 --- a/FModel/ViewModels/ApiEndpoints/FortniteCentralApiEndpoint.cs +++ b/FModel/ViewModels/ApiEndpoints/DillyApiEndpoints.cs @@ -2,18 +2,34 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using FModel.Framework; +using FModel.ViewModels.ApiEndpoints.Models; using RestSharp; using Serilog; namespace FModel.ViewModels.ApiEndpoints; -public class FortniteCentralApiEndpoint : AbstractApiProvider +public class DillyApiEndpoint : AbstractApiProvider { - public FortniteCentralApiEndpoint(RestClient client) : base(client) { } + private Backup[] _backups; + + public DillyApiEndpoint(RestClient client) : base(client) { } + + public async Task GetBackupsAsync(CancellationToken token) + { + var request = new FRestRequest($"https://export-service-new.dillyapis.com/v1/backups"); + var response = await _client.ExecuteAsync(request, token).ConfigureAwait(false); + Log.Information("[{Method}] [{Status}({StatusCode})] '{Resource}'", request.Method, response.StatusDescription, (int) response.StatusCode, response.ResponseUri?.OriginalString); + return response.Data; + } + + public Backup[] GetBackups(CancellationToken token) + { + return _backups ??= GetBackupsAsync(token).GetAwaiter().GetResult(); + } public async Task>> GetHotfixesAsync(CancellationToken token, string language = "en") { - var request = new FRestRequest("https://fortnitecentral.genxgames.gg/api/v1/hotfixes") + var request = new FRestRequest("https://api.fortniteapi.com/v1/cloudstorage/hotfixes") { Interceptors = [_interceptor] }; diff --git a/FModel/ViewModels/ApiEndpoints/FModelApiEndpoint.cs b/FModel/ViewModels/ApiEndpoints/FModelApiEndpoint.cs index c12679bd..db2882ed 100644 --- a/FModel/ViewModels/ApiEndpoints/FModelApiEndpoint.cs +++ b/FModel/ViewModels/ApiEndpoints/FModelApiEndpoint.cs @@ -26,7 +26,6 @@ public class FModelApiEndpoint : AbstractApiProvider private News _news; private Info _infos; private Donator[] _donators; - private Backup[] _backups; private Game _game; private readonly IDictionary _communityDesigns = new Dictionary(); private ApplicationViewModel _applicationView => ApplicationService.ApplicationView; @@ -60,19 +59,6 @@ public class FModelApiEndpoint : AbstractApiProvider return _donators ??= GetDonatorsAsync().GetAwaiter().GetResult(); } - public async Task GetBackupsAsync(CancellationToken token, string gameName) - { - var request = new FRestRequest($"https://api.fmodel.app/v1/backups/{gameName}"); - var response = await _client.ExecuteAsync(request, token).ConfigureAwait(false); - Log.Information("[{Method}] [{Status}({StatusCode})] '{Resource}'", request.Method, response.StatusDescription, (int) response.StatusCode, response.ResponseUri?.OriginalString); - return response.Data; - } - - public Backup[] GetBackups(CancellationToken token, string gameName) - { - return _backups ??= GetBackupsAsync(token, gameName).GetAwaiter().GetResult(); - } - public async Task GetGamesAsync(CancellationToken token, string gameName) { var request = new FRestRequest($"https://api.fmodel.app/v1/games/{gameName}"); diff --git a/FModel/ViewModels/ApiEndpoints/Models/FModelResponse.cs b/FModel/ViewModels/ApiEndpoints/Models/FModelResponse.cs index 6c9b8dc4..67c6f6a4 100644 --- a/FModel/ViewModels/ApiEndpoints/Models/FModelResponse.cs +++ b/FModel/ViewModels/ApiEndpoints/Models/FModelResponse.cs @@ -19,10 +19,8 @@ public class News [DebuggerDisplay("{" + nameof(FileName) + "}")] public class Backup { - [J] public string GameName { get; private set; } [J] public string FileName { get; private set; } - [J] public string DownloadUrl { get; private set; } - [J] public long FileSize { get; private set; } + [J] public string Url { get; private set; } } public class Donator diff --git a/FModel/ViewModels/BackupManagerViewModel.cs b/FModel/ViewModels/BackupManagerViewModel.cs index 0010b761..ce2c0356 100644 --- a/FModel/ViewModels/BackupManagerViewModel.cs +++ b/FModel/ViewModels/BackupManagerViewModel.cs @@ -48,13 +48,13 @@ public class BackupManagerViewModel : ViewModel { await _threadWorkerView.Begin(cancellationToken => { - var backups = _apiEndpointView.FModelApi.GetBackups(cancellationToken, _gameName); + var backups = _apiEndpointView.DillyApi.GetBackups(cancellationToken); if (backups == null) return; Application.Current.Dispatcher.Invoke(() => { foreach (var backup in backups) Backups.Add(backup); - SelectedBackup = Backups.LastOrDefault(); + SelectedBackup = Backups.FirstOrDefault(); }); }); } @@ -93,7 +93,7 @@ public class BackupManagerViewModel : ViewModel await _threadWorkerView.Begin(_ => { var fullPath = Path.Combine(Path.Combine(UserSettings.Default.OutputDirectory, "Backups"), SelectedBackup.FileName); - _apiEndpointView.DownloadFile(SelectedBackup.DownloadUrl, fullPath); + _apiEndpointView.DownloadFile(SelectedBackup.Url, fullPath); SaveCheck(fullPath, SelectedBackup.FileName, "downloaded", "download"); }); } diff --git a/FModel/ViewModels/CUE4ParseViewModel.cs b/FModel/ViewModels/CUE4ParseViewModel.cs index 77910234..b2ad6705 100644 --- a/FModel/ViewModels/CUE4ParseViewModel.cs +++ b/FModel/ViewModels/CUE4ParseViewModel.cs @@ -527,7 +527,7 @@ public class CUE4ParseViewModel : ViewModel if (!Provider.ProjectName.Equals("fortnitegame", StringComparison.OrdinalIgnoreCase) || HotfixedResourcesDone) return Task.CompletedTask; return Task.Run(() => { - var hotfixes = ApplicationService.ApiEndpointView.CentralApi.GetHotfixes(CancellationToken.None, Provider.GetLanguageCode(UserSettings.Default.AssetLanguage)); + var hotfixes = ApplicationService.ApiEndpointView.DillyApi.GetHotfixes(CancellationToken.None, Provider.GetLanguageCode(UserSettings.Default.AssetLanguage)); if (hotfixes == null) return; Provider.Internationalization.Override(hotfixes);