diff --git a/Wabbajack.Lib/Downloaders/AbstractDownloadState.cs b/Wabbajack.Lib/Downloaders/AbstractDownloadState.cs index 3e9d9187..84311758 100644 --- a/Wabbajack.Lib/Downloaders/AbstractDownloadState.cs +++ b/Wabbajack.Lib/Downloaders/AbstractDownloadState.cs @@ -38,7 +38,9 @@ namespace Wabbajack.Lib.Downloaders } public abstract object[] PrimaryKey { get; } - + + public abstract string URL { get; set; } + public string PrimaryKeyString { get @@ -82,7 +84,6 @@ namespace Wabbajack.Lib.Downloaders public abstract IDownloader GetDownloader(); - public abstract string GetReportEntry(Archive a); public abstract string[] GetMetaIni(); } } diff --git a/Wabbajack.Lib/Downloaders/AbstractIPS4Downloader.cs b/Wabbajack.Lib/Downloaders/AbstractIPS4Downloader.cs index 7993dd66..b5488dbd 100644 --- a/Wabbajack.Lib/Downloaders/AbstractIPS4Downloader.cs +++ b/Wabbajack.Lib/Downloaders/AbstractIPS4Downloader.cs @@ -53,6 +53,12 @@ namespace Wabbajack.Lib.Downloaders public string FileID { get; set; } public string FileName { get; set; } + public override string URL + { + get => Site; + set => throw new NotImplementedException(); + } + private static bool IsHTTPS => Downloader.SiteURL.AbsolutePath.StartsWith("https://"); private static string URLPrefix => IsHTTPS ? "https://" : "http://"; @@ -154,11 +160,6 @@ namespace Wabbajack.Lib.Downloaders return DownloadDispatcher.GetInstance(); } - public override string GetReportEntry(Archive a) - { - return $"* {((INeedsLogin)GetDownloader()).SiteName} - [{a.Name}]({Site}/files/file/{FileName}/?do=download&r={FileID})"; - } - public override string[] GetMetaIni() { if (FileID != null) diff --git a/Wabbajack.Lib/Downloaders/BethesdaNetDownloader.cs b/Wabbajack.Lib/Downloaders/BethesdaNetDownloader.cs index 4bf7a75d..c8423669 100644 --- a/Wabbajack.Lib/Downloaders/BethesdaNetDownloader.cs +++ b/Wabbajack.Lib/Downloaders/BethesdaNetDownloader.cs @@ -110,6 +110,9 @@ namespace Wabbajack.Lib.Downloaders { public string GameName { get; set; } public string ContentId { get; set; } + + public override string URL { get; set; } + public override object[] PrimaryKey => new object[] {GameName, ContentId}; public override bool IsWhitelisted(ServerWhitelist whitelist) @@ -255,11 +258,6 @@ namespace Wabbajack.Lib.Downloaders throw new NotImplementedException(); } - public override string GetReportEntry(Archive a) - { - throw new NotImplementedException(); - } - public override string[] GetMetaIni() { throw new NotImplementedException(); diff --git a/Wabbajack.Lib/Downloaders/DropboxDownloader.cs b/Wabbajack.Lib/Downloaders/DropboxDownloader.cs index dfcab85f..d11cfcc1 100644 --- a/Wabbajack.Lib/Downloaders/DropboxDownloader.cs +++ b/Wabbajack.Lib/Downloaders/DropboxDownloader.cs @@ -28,7 +28,7 @@ namespace Wabbajack.Lib.Downloaders return new HTTPDownloader.State() { - Url = uri.ToString().Replace("dropbox.com:443/", "dropbox.com/") + URL = uri.ToString().Replace("dropbox.com:443/", "dropbox.com/") }; } diff --git a/Wabbajack.Lib/Downloaders/GameFileSourceDownloader.cs b/Wabbajack.Lib/Downloaders/GameFileSourceDownloader.cs index d9056275..d266c7d5 100644 --- a/Wabbajack.Lib/Downloaders/GameFileSourceDownloader.cs +++ b/Wabbajack.Lib/Downloaders/GameFileSourceDownloader.cs @@ -55,6 +55,8 @@ namespace Wabbajack.Lib.Downloaders internal string SourcePath => Path.Combine(Game.MetaData().GameLocation(), GameFile); + public override string URL { get; set; } + public override object[] PrimaryKey { get => new object[] {Game, GameVersion, GameFile}; } public override bool IsWhitelisted(ServerWhitelist whitelist) @@ -83,11 +85,6 @@ namespace Wabbajack.Lib.Downloaders return DownloadDispatcher.GetInstance(); } - public override string GetReportEntry(Archive a) - { - return $"* Game File {Game} - {GameFile}"; - } - public override string[] GetMetaIni() { return new[] {"[General]", $"gameName={Game.MetaData().MO2ArchiveName}", $"gameFile={GameFile}"}; diff --git a/Wabbajack.Lib/Downloaders/GoogleDriveDownloader.cs b/Wabbajack.Lib/Downloaders/GoogleDriveDownloader.cs index 4b4dc382..398271ae 100644 --- a/Wabbajack.Lib/Downloaders/GoogleDriveDownloader.cs +++ b/Wabbajack.Lib/Downloaders/GoogleDriveDownloader.cs @@ -37,6 +37,9 @@ namespace Wabbajack.Lib.Downloaders public class State : AbstractDownloadState { public string Id { get; set; } + + public override string URL { get; set; } + public override object[] PrimaryKey { get => new object[] {Id}; } public override bool IsWhitelisted(ServerWhitelist whitelist) @@ -60,7 +63,7 @@ namespace Wabbajack.Lib.Downloaders var regex = new Regex("(?<=/uc\\?export=download&confirm=).*(?=;id=)"); var confirm = regex.Match(await response.Content.ReadAsStringAsync()); var url = $"https://drive.google.com/uc?export=download&confirm={confirm}&id={Id}"; - var httpState = new HTTPDownloader.State {Url = url, Client = client}; + var httpState = new HTTPDownloader.State {URL = url, Client = client}; return httpState; } @@ -75,11 +78,6 @@ namespace Wabbajack.Lib.Downloaders return DownloadDispatcher.GetInstance(); } - public override string GetReportEntry(Archive a) - { - return $"* GoogleDrive - [{a.Name}](https://drive.google.com/uc?id={Id}&export=download)"; - } - public override string[] GetMetaIni() { return new [] {"[General]",$"directURL=https://drive.google.com/uc?id={Id}&export=download"}; diff --git a/Wabbajack.Lib/Downloaders/HTTPDownloader.cs b/Wabbajack.Lib/Downloaders/HTTPDownloader.cs index 5a479137..d21e2ca2 100644 --- a/Wabbajack.Lib/Downloaders/HTTPDownloader.cs +++ b/Wabbajack.Lib/Downloaders/HTTPDownloader.cs @@ -36,7 +36,7 @@ namespace Wabbajack.Lib.Downloaders { var tmp = new State { - Url = url + URL = url }; if (archiveINI?.General?.directURLHeaders != null) { @@ -56,18 +56,18 @@ namespace Wabbajack.Lib.Downloaders [MemberConfig(TargetMember.All)] public class State : AbstractDownloadState { - public string Url { get; set; } + public override string URL { get; set; } public List Headers { get; set; } [Exclude] public HttpClient Client { get; set; } - public override object[] PrimaryKey { get => new object[] {Url};} + public override object[] PrimaryKey { get => new object[] {URL};} public override bool IsWhitelisted(ServerWhitelist whitelist) { - return whitelist.AllowedPrefixes.Any(p => Url.StartsWith(p)); + return whitelist.AllowedPrefixes.Any(p => URL.StartsWith(p)); } public override Task Download(Archive a, string destination) @@ -101,8 +101,8 @@ namespace Wabbajack.Lib.Downloaders long totalRead = 0; var bufferSize = 1024 * 32; - Utils.Status($"Starting Download {a?.Name ?? Url}", 0); - var response = await client.GetAsync(Url, HttpCompletionOption.ResponseHeadersRead); + Utils.Status($"Starting Download {a?.Name ?? URL}", 0); + var response = await client.GetAsync(URL, HttpCompletionOption.ResponseHeadersRead); TOP: if (!response.IsSuccessStatusCode) @@ -115,7 +115,7 @@ TOP: } catch (Exception ex) { - Utils.Error(ex, $"While downloading {Url}"); + Utils.Error(ex, $"While downloading {URL}"); return false; } @@ -162,9 +162,9 @@ TOP: if (supportsResume) { Utils.Log( - $"Abort during download, trying to resume {Url} from {totalRead.ToFileSizeString()}"); + $"Abort during download, trying to resume {URL} from {totalRead.ToFileSizeString()}"); - var msg = new HttpRequestMessage(HttpMethod.Get, Url); + var msg = new HttpRequestMessage(HttpMethod.Get, URL); msg.Headers.Range = new RangeHeaderValue(totalRead, null); response = await client.SendAsync(msg, HttpCompletionOption.ResponseHeadersRead); @@ -200,19 +200,14 @@ TOP: return DownloadDispatcher.GetInstance(); } - public override string GetReportEntry(Archive a) - { - return $"* [{a.Name} - {Url}]({Url})"; - } - public override string[] GetMetaIni() { if (Headers != null) return new [] {"[General]", - $"directURL={Url}", + $"directURL={URL}", $"directURLHeaders={string.Join("|", Headers)}"}; else - return new [] {"[General]", $"directURL={Url}"}; + return new [] {"[General]", $"directURL={URL}"}; } } diff --git a/Wabbajack.Lib/Downloaders/MEGADownloader.cs b/Wabbajack.Lib/Downloaders/MEGADownloader.cs index 81757ee6..3f0f1a0d 100644 --- a/Wabbajack.Lib/Downloaders/MEGADownloader.cs +++ b/Wabbajack.Lib/Downloaders/MEGADownloader.cs @@ -16,7 +16,7 @@ namespace Wabbajack.Lib.Downloaders public AbstractDownloadState GetDownloaderState(string url) { if (url != null && url.StartsWith(Consts.MegaPrefix)) - return new State { Url = url }; + return new State { URL = url }; return null; } @@ -31,7 +31,7 @@ namespace Wabbajack.Lib.Downloaders var client = new MegaApiClient(); Utils.Status("Logging into MEGA (as anonymous)"); client.LoginAnonymous(); - var fileLink = new Uri(Url); + var fileLink = new Uri(URL); var node = client.GetNodeFromLink(fileLink); Utils.Status($"Downloading MEGA file: {a.Name}"); client.DownloadFile(fileLink, destination); @@ -43,7 +43,7 @@ namespace Wabbajack.Lib.Downloaders var client = new MegaApiClient(); Utils.Status("Logging into MEGA (as anonymous)"); client.LoginAnonymous(); - var fileLink = new Uri(Url); + var fileLink = new Uri(URL); try { var node = client.GetNodeFromLink(fileLink); diff --git a/Wabbajack.Lib/Downloaders/ManualDownloader.cs b/Wabbajack.Lib/Downloaders/ManualDownloader.cs index a2e80bc3..a943b014 100644 --- a/Wabbajack.Lib/Downloaders/ManualDownloader.cs +++ b/Wabbajack.Lib/Downloaders/ManualDownloader.cs @@ -63,7 +63,7 @@ namespace Wabbajack.Lib.Downloaders public async Task GetDownloaderState(dynamic archiveINI) { var url = archiveINI?.General?.manualURL; - return url != null ? new State { Url = url} : null; + return url != null ? new State { URL = url} : null; } public async Task Prepare() @@ -72,8 +72,9 @@ namespace Wabbajack.Lib.Downloaders public class State : AbstractDownloadState { - public string Url { get; set; } - public override object[] PrimaryKey { get => new object[] {Url}; } + public override string URL { get; set; } + + public override object[] PrimaryKey { get => new object[] {URL}; } public override bool IsWhitelisted(ServerWhitelist whitelist) { @@ -88,7 +89,7 @@ namespace Wabbajack.Lib.Downloaders { try { - Utils.Log($"You must manually visit {Url} and download {a.Name} file by hand"); + Utils.Log($"You must manually visit {URL} and download {a.Name} file by hand"); Utils.Log($"Waiting for {a.Name}"); downloader._watcher.EnableRaisingEvents = true; var watcher = downloader._fileEvents @@ -97,7 +98,7 @@ namespace Wabbajack.Lib.Downloaders .Buffer(new TimeSpan(0, 5, 0), 1) .Select(x => x.FirstOrDefault()) .FirstOrDefaultAsync(); - Process.Start(Url); + Process.Start(URL); absPath = (await watcher)?.FullPath; if (!File.Exists(absPath)) @@ -122,16 +123,11 @@ namespace Wabbajack.Lib.Downloaders return DownloadDispatcher.GetInstance(); } - public override string GetReportEntry(Archive a) - { - return $"* Manual Download - [{a.Name} - {Url}]({Url})"; - } - public override string[] GetMetaIni() { return new [] { "[General]", - $"manualURL={Url}" + $"manualURL={URL}" }; } diff --git a/Wabbajack.Lib/Downloaders/MediaFireDownloader.cs b/Wabbajack.Lib/Downloaders/MediaFireDownloader.cs index 9ae7afe4..80e742ff 100644 --- a/Wabbajack.Lib/Downloaders/MediaFireDownloader.cs +++ b/Wabbajack.Lib/Downloaders/MediaFireDownloader.cs @@ -16,19 +16,19 @@ namespace Wabbajack.Lib.Downloaders return new State { - Url = url.ToString() + URL = url.ToString() }; } public class State : AbstractDownloadState { - public string Url { get; set; } + public override string URL { get; set; } - public override object[] PrimaryKey { get => new object[] {Url};} + public override object[] PrimaryKey { get => new object[] {URL};} public override bool IsWhitelisted(ServerWhitelist whitelist) { - return whitelist.AllowedPrefixes.Any(p => Url.StartsWith(p)); + return whitelist.AllowedPrefixes.Any(p => URL.StartsWith(p)); } public override async Task Download(Archive a, string destination) @@ -54,7 +54,7 @@ namespace Wabbajack.Lib.Downloaders return new HTTPDownloader.State() { Client = new HttpClient(), - Url = newURL + URL = newURL }; } } @@ -64,17 +64,12 @@ namespace Wabbajack.Lib.Downloaders return DownloadDispatcher.GetInstance(); } - public override string GetReportEntry(Archive a) - { - return $"* [{a.Name} - {Url}]({Url})"; - } - public override string[] GetMetaIni() { return new [] { "[General]", - $"directURL={Url}" + $"directURL={URL}" }; } } @@ -90,7 +85,7 @@ namespace Wabbajack.Lib.Downloaders return new State { - Url = url.ToString() + URL = url.ToString() }; } } diff --git a/Wabbajack.Lib/Downloaders/ModDBDownloader.cs b/Wabbajack.Lib/Downloaders/ModDBDownloader.cs index b0240652..91aeeac1 100644 --- a/Wabbajack.Lib/Downloaders/ModDBDownloader.cs +++ b/Wabbajack.Lib/Downloaders/ModDBDownloader.cs @@ -24,7 +24,7 @@ namespace Wabbajack.Lib.Downloaders { return new State { - Url = url + URL = url }; } @@ -37,8 +37,9 @@ namespace Wabbajack.Lib.Downloaders public class State : AbstractDownloadState { - public string Url { get; set; } - public override object[] PrimaryKey { get => new object[]{Url}; } + public override string URL { get; set; } + + public override object[] PrimaryKey { get => new object[]{URL}; } public override bool IsWhitelisted(ServerWhitelist whitelist) { @@ -54,7 +55,7 @@ namespace Wabbajack.Lib.Downloaders { try { - await new HTTPDownloader.State {Url = url}.Download(a, destination); + await new HTTPDownloader.State {URL = url}.Download(a, destination); return true; } catch (Exception) @@ -69,7 +70,7 @@ namespace Wabbajack.Lib.Downloaders private async Task GetDownloadUrls() { - var uri = new Uri(Url); + var uri = new Uri(URL); var modId = uri.AbsolutePath.Split('/').Reverse().First(f => int.TryParse(f, out int _)); var mirrorUrl = $"https://www.moddb.com/downloads/start/{modId}/all"; var doc = await new HtmlWeb().LoadFromWebAsync($"https://www.moddb.com/downloads/start/{modId}/all"); @@ -105,14 +106,9 @@ namespace Wabbajack.Lib.Downloaders return DownloadDispatcher.GetInstance(); } - public override string GetReportEntry(Archive a) - { - return $"* ModDB - [{a.Name}]({Url})"; - } - public override string[] GetMetaIni() { - return new[] {"[General]", $"directURL={Url}"}; + return new[] {"[General]", $"directURL={URL}"}; } } } diff --git a/Wabbajack.Lib/Downloaders/NexusDownloader.cs b/Wabbajack.Lib/Downloaders/NexusDownloader.cs index 9870811f..b7c3fd7d 100644 --- a/Wabbajack.Lib/Downloaders/NexusDownloader.cs +++ b/Wabbajack.Lib/Downloaders/NexusDownloader.cs @@ -128,6 +128,12 @@ namespace Wabbajack.Lib.Downloaders public string Summary { get; set; } public bool Adult { get; set; } + public override string URL + { + get => NexusURL; + set => NexusURL = value; + } + public override object[] PrimaryKey { get => new object[]{GameName, ModID, FileID};} public override bool IsWhitelisted(ServerWhitelist whitelist) @@ -154,7 +160,7 @@ namespace Wabbajack.Lib.Downloaders return await new HTTPDownloader.State { - Url = url + URL = url }.Download(a, destination); } @@ -193,17 +199,6 @@ namespace Wabbajack.Lib.Downloaders return DownloadDispatcher.GetInstance(); } - public override string GetReportEntry(Archive a) - { - var profile = UploaderProfile.Replace("/games/", - "/" + NexusApiUtils.ConvertGameName(GameName).ToLower() + "/"); - - return string.Join("\n", - $"* [{a.Name}](http://nexusmods.com/{NexusApiUtils.ConvertGameName(GameName)}/mods/{ModID})", - $" * Author : [{UploadedBy}]({profile})", - $" * Version : {Version}"); - } - public override string[] GetMetaIni() { return new[] {"[General]", $"gameName={GameName}", $"modID={ModID}", $"fileID={FileID}"}; diff --git a/Wabbajack.Lib/Downloaders/SteamWorkshopDownloader.cs b/Wabbajack.Lib/Downloaders/SteamWorkshopDownloader.cs index 61723181..98a5d98a 100644 --- a/Wabbajack.Lib/Downloaders/SteamWorkshopDownloader.cs +++ b/Wabbajack.Lib/Downloaders/SteamWorkshopDownloader.cs @@ -41,6 +41,8 @@ namespace Wabbajack.Lib.Downloaders public class State : AbstractDownloadState { + public override string URL { get; set; } + public SteamWorkshopItem Item { get; set; } public override object[] PrimaryKey { get => new object[] {Item.Game, Item.ItemID}; } @@ -92,11 +94,6 @@ namespace Wabbajack.Lib.Downloaders return DownloadDispatcher.GetInstance(); } - public override string GetReportEntry(Archive a) - { - return $"* Steam - [{Item.ItemID}]"; - } - public override string[] GetMetaIni() { return new[]