| 
3 | 3 | using System.Diagnostics;  | 
4 | 4 | using System.IO;  | 
5 | 5 | using System.Linq;  | 
 | 6 | +using System.Net.Http;  | 
6 | 7 | using System.Net.Http.Headers;  | 
7 | 8 | using System.Text.RegularExpressions;  | 
8 | 9 | using System.Threading;  | 
 | 
27 | 28 | using CUE4Parse.GameTypes.PAXDEI.Encryption.Aes;  | 
28 | 29 | using CUE4Parse.GameTypes.Rennsport.Encryption.Aes;  | 
29 | 30 | using CUE4Parse.GameTypes.Snowbreak.Encryption.Aes;  | 
30 |  | -using CUE4Parse.GameTypes.UDWN.Encryption.Aes;  | 
31 | 31 | using CUE4Parse.GameTypes.THPS.Encryption.Aes;  | 
 | 32 | +using CUE4Parse.GameTypes.UDWN.Encryption.Aes;  | 
32 | 33 | using CUE4Parse.MappingsProvider;  | 
33 | 34 | using CUE4Parse.UE4.AssetRegistry;  | 
34 | 35 | using CUE4Parse.UE4.Assets.Exports;  | 
 | 
42 | 43 | using CUE4Parse.UE4.Assets.Exports.Wwise;  | 
43 | 44 | using CUE4Parse.UE4.IO;  | 
44 | 45 | using CUE4Parse.UE4.Localization;  | 
45 |  | -using CUE4Parse.UE4.Objects.Core.Misc;  | 
46 | 46 | using CUE4Parse.UE4.Objects.Core.Serialization;  | 
47 | 47 | using CUE4Parse.UE4.Objects.Engine;  | 
48 | 48 | using CUE4Parse.UE4.Oodle.Objects;  | 
 | 
53 | 53 | 
 
  | 
54 | 54 | using CUE4Parse_Conversion;  | 
55 | 55 | using CUE4Parse_Conversion.Sounds;  | 
56 |  | -using CUE4Parse.UE4.Assets;  | 
 | 56 | + | 
57 | 57 | using EpicManifestParser;  | 
 | 58 | +using EpicManifestParser.UE;  | 
58 | 59 | using EpicManifestParser.ZlibngDotNetDecompressor;  | 
 | 60 | + | 
59 | 61 | using FModel.Creator;  | 
60 | 62 | using FModel.Extensions;  | 
61 | 63 | using FModel.Framework;  | 
 | 
66 | 68 | using FModel.Views.Snooper;  | 
67 | 69 | 
 
  | 
68 | 70 | using Newtonsoft.Json;  | 
69 |  | -using OffiUtils;  | 
 | 71 | + | 
70 | 72 | using OpenTK.Windowing.Common;  | 
71 | 73 | using OpenTK.Windowing.Desktop;  | 
72 | 74 | 
 
  | 
 | 
77 | 79 | using UE4Config.Parsing;  | 
78 | 80 | 
 
  | 
79 | 81 | using Application = System.Windows.Application;  | 
 | 82 | +using FGuid = CUE4Parse.UE4.Objects.Core.Misc.FGuid;  | 
80 | 83 | 
 
  | 
81 | 84 | namespace FModel.ViewModels;  | 
82 | 85 | 
 
  | 
@@ -247,10 +250,20 @@ await _threadWorkerView.Begin(cancellationToken =>  | 
247 | 250 |                             };  | 
248 | 251 | 
 
  | 
249 | 252 |                             var startTs = Stopwatch.GetTimestamp();  | 
250 |  | -                            var (manifest, _) = manifestInfo.DownloadAndParseAsync(manifestOptions,  | 
251 |  | -                                cancellationToken: cancellationToken,  | 
252 |  | -                                elementManifestPredicate: x => x.Uri.Host is ("epicgames-download1.akamaized.net" or "download.epicgames.com")  | 
 | 253 | +                            FBuildPatchAppManifest manifest;  | 
 | 254 | + | 
 | 255 | +                            try  | 
 | 256 | +                            {  | 
 | 257 | +                                (manifest, _) = manifestInfo.DownloadAndParseAsync(manifestOptions,  | 
 | 258 | +                                    cancellationToken: cancellationToken,  | 
 | 259 | +                                    elementManifestPredicate: static x => x.Uri.Host != "cloudflare.epicgamescdn.com"  | 
253 | 260 |                                 ).GetAwaiter().GetResult();  | 
 | 261 | +                            }  | 
 | 262 | +                            catch (HttpRequestException ex)  | 
 | 263 | +                            {  | 
 | 264 | +                                Log.Error("Failed to download manifest ({ManifestUri})", ex.Data["ManifestUri"]?.ToString() ?? "");  | 
 | 265 | +                                throw;  | 
 | 266 | +                            }  | 
254 | 267 | 
 
  | 
255 | 268 |                             if (manifest.TryFindFile("Cloud/IoStoreOnDemand.ini", out var ioStoreOnDemandFile))  | 
256 | 269 |                             {  | 
 | 
0 commit comments