summary refs log tree commit diff
path: root/ReferenceClientProxyImplementation/Services/BuildDownloadService.cs
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2026-02-23 02:03:20 +0100
committerRory& <root@rory.gay>2026-02-23 02:03:20 +0100
commit77a609758bb80bac9497d2e3988550f8be578407 (patch)
tree991a9d258ca4fece1132a1a344d0fe11e3b03d51 /ReferenceClientProxyImplementation/Services/BuildDownloadService.cs
downloadReferenceClientProxyImplementation-77a609758bb80bac9497d2e3988550f8be578407.tar.xz
Initial commit HEAD master
Diffstat (limited to 'ReferenceClientProxyImplementation/Services/BuildDownloadService.cs')
-rw-r--r--ReferenceClientProxyImplementation/Services/BuildDownloadService.cs76
1 files changed, 76 insertions, 0 deletions
diff --git a/ReferenceClientProxyImplementation/Services/BuildDownloadService.cs b/ReferenceClientProxyImplementation/Services/BuildDownloadService.cs
new file mode 100644

index 0000000..364c6c5 --- /dev/null +++ b/ReferenceClientProxyImplementation/Services/BuildDownloadService.cs
@@ -0,0 +1,76 @@ +// using System.Net; +// using AngleSharp.Html.Parser; +// +// namespace ReferenceClientProxyImplementation.Services; +// +// public class BuildDownloadService(ILogger<BuildDownloadService> logger) { +// private static readonly HttpClient hc = new(); +// +// public async Task DownloadBuildFromArchiveOrg(string outputDirectory, DateTime timestamp) { +// // 20150906025145 +// var paddedTimestamp = timestamp.ToString("yyyyMMddHHmmss"); +// await DownloadBuildFromUrl(outputDirectory, $"https://web.archive.org/web/{paddedTimestamp}im_/https://discordapp.com/login"); +// } +// +// public async Task DownloadBuildFromUrl(string outputDirectory, string url) { +// logger.LogInformation("Downloading build from {url} to {outDir}", url, outputDirectory); +// var response = await hc.GetAsync(url); +// if (!response.IsSuccessStatusCode) +// throw new Exception($"Failed to download build from {url}"); +// var html = await response.Content.ReadAsStringAsync(); +// File.WriteAllText(outputDirectory + "/index.html", html); +// var parser = new HtmlParser(); +// var document = parser.ParseDocument(html); +// var assets = document.QuerySelectorAll("link[rel=stylesheet], link[rel=icon], script, img"); +// foreach (var asset in assets) { +// var assetUrl = asset.GetAttribute("href") ?? asset.GetAttribute("src"); +// if (assetUrl == null) +// continue; +// if (assetUrl.StartsWith("//")) { +// logger.LogWarning("Skipping asset {assetUrl} as it is a protocol-relative URL", assetUrl); +// continue; +// } +// +// var assetStream = await GetAssetStream(assetUrl); +// var assetPath = Path.Combine(outputDirectory, assetUrl.TrimStart('/')); +// Console.WriteLine($"Downloading asset {assetUrl} to {assetPath}"); +// Directory.CreateDirectory(Path.GetDirectoryName(assetPath)); +// await using var fs = File.Create(assetPath); +// await assetStream.CopyToAsync(fs); +// } +// +// logger.LogInformation("Downloading build from {url} complete!", url); +// } +// +// public async Task<Stream> GetAssetStream(string asset) { +// asset = asset.Replace("/assets/", ""); +// var urlsToTry = new Stack<string>(new[] { +// $"https://web.archive.org/web/0id_/https://discordapp.com/assets/{asset}", +// $"https://web.archive.org/web/0id_/https://discord.com/assets/{asset}", +// $"https://discord.com/assets/{asset}" +// }); +// while (urlsToTry.TryPop(out var urlToTry)) { +// if (string.IsNullOrWhiteSpace(urlToTry)) continue; +// try { +// var response = await hc.GetAsync(urlToTry, HttpCompletionOption.ResponseHeadersRead); +// if (response.IsSuccessStatusCode) { +// Console.WriteLine($"Got success for asset {asset} from {urlToTry}"); +// return await response.Content.ReadAsStreamAsync(); +// } +// //redirect +// +// if (response.StatusCode == HttpStatusCode.Found) { +// var redirectUrl = response.Headers.Location?.ToString(); +// if (string.IsNullOrWhiteSpace(redirectUrl)) continue; +// urlsToTry.Push(redirectUrl); +// } +// else logger.LogWarning("Failed to download asset {asset} from {urlToTry}", asset, urlToTry); +// } +// catch { +// // ignored +// } +// } +// +// throw new Exception($"Failed to download asset {asset}"); +// } +// } \ No newline at end of file