From befca003b68addf6341f9b2aa4c38fe0890c94ea 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: Thu, 5 Feb 2026 12:58:36 +0100 Subject: [PATCH 1/2] Fix HTML tags in some Quests DisplayName. --- FModel/Creator/Bases/FN/BaseQuest.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 @@ private void DrawTexts(SKCanvas c, int x, int y, int padding) { _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 _); } From 8551504ce1c0b37ef99b2bff5967bf11e1a4fa8e 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: Thu, 5 Feb 2026 20:16:53 +0100 Subject: [PATCH 2/2] New Backups & Hotfixes API --- FModel/ViewModels/ApiEndpointViewModel.cs | 4 ++-- ...ralApiEndpoint.cs => DillyApiEndpoints.cs} | 22 ++++++++++++++++--- FModel/ViewModels/BackupManagerViewModel.cs | 2 +- FModel/ViewModels/CUE4ParseViewModel.cs | 2 +- 4 files changed, 23 insertions(+), 7 deletions(-) rename FModel/ViewModels/ApiEndpoints/{FortniteCentralApiEndpoint.cs => DillyApiEndpoints.cs} (52%) 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 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..6dd3e680 100644 --- a/FModel/ViewModels/ApiEndpoints/FortniteCentralApiEndpoint.cs +++ b/FModel/ViewModels/ApiEndpoints/DillyApiEndpoints.cs @@ -2,18 +2,21 @@ 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>> 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] }; @@ -27,4 +30,17 @@ public IDictionary> GetHotfixes(Cancellation { return GetHotfixesAsync(token, language).GetAwaiter().GetResult(); } + + public async Task GetBackupsAsync(CancellationToken token) + { + var request = new FRestRequest($"https://api.fortniteapi.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(); + } } diff --git a/FModel/ViewModels/BackupManagerViewModel.cs b/FModel/ViewModels/BackupManagerViewModel.cs index 0010b761..764ec851 100644 --- a/FModel/ViewModels/BackupManagerViewModel.cs +++ b/FModel/ViewModels/BackupManagerViewModel.cs @@ -48,7 +48,7 @@ public async Task Initialize() { await _threadWorkerView.Begin(cancellationToken => { - var backups = _apiEndpointView.FModelApi.GetBackups(cancellationToken, _gameName); + var backups = _apiEndpointView.DillyApi.GetBackups(cancellationToken); // gamename is useless here if (backups == null) return; Application.Current.Dispatcher.Invoke(() => diff --git a/FModel/ViewModels/CUE4ParseViewModel.cs b/FModel/ViewModels/CUE4ParseViewModel.cs index b4db2ad5..e11e0d94 100644 --- a/FModel/ViewModels/CUE4ParseViewModel.cs +++ b/FModel/ViewModels/CUE4ParseViewModel.cs @@ -527,7 +527,7 @@ private Task LoadHotfixedLocalizedResources() 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);