Can now get meta.ini data from a download state

This commit is contained in:
Timothy Baldridge 2020-01-10 21:15:53 -07:00
parent bac5e958bf
commit 5393ed4a84
14 changed files with 115 additions and 15 deletions

View File

@ -881,7 +881,7 @@ namespace Wabbajack.Common
} }
/// <summary> /// <summary>
/// Roundtrips the value throught the JSON routines /// Roundtrips the value through the JSON routines
/// </summary> /// </summary>
/// <typeparam name="TV"></typeparam> /// <typeparam name="TV"></typeparam>
/// <typeparam name="TR"></typeparam> /// <typeparam name="TR"></typeparam>

View File

@ -80,5 +80,6 @@ namespace Wabbajack.Lib.Downloaders
public abstract IDownloader GetDownloader(); public abstract IDownloader GetDownloader();
public abstract string GetReportEntry(Archive a); public abstract string GetReportEntry(Archive a);
public abstract string[] GetMetaIni();
} }
} }

View File

@ -41,7 +41,15 @@ namespace Wabbajack.Lib.Downloaders
public string FileID { get; set; } public string FileID { get; set; }
public string FileName { get; set; } public string FileName { get; set; }
public override object[] PrimaryKey { get => new object[] {FileID, FileName}; } public override object[] PrimaryKey
{
get
{
if (FileID == null)
return new object[] {Downloader.SiteURL, FileName};
return new object[] {Downloader.SiteURL, FileName, FileID};
}
}
public override bool IsWhitelisted(ServerWhitelist whitelist) public override bool IsWhitelisted(ServerWhitelist whitelist)
{ {
@ -143,6 +151,25 @@ namespace Wabbajack.Lib.Downloaders
var downloader = (INeedsLogin)GetDownloader(); var downloader = (INeedsLogin)GetDownloader();
return $"* {((INeedsLogin)GetDownloader()).SiteName} - [{a.Name}](https://{downloader.SiteURL.Host}/files/file/{FileName}/?do=download&r={FileID})"; return $"* {((INeedsLogin)GetDownloader()).SiteName} - [{a.Name}](https://{downloader.SiteURL.Host}/files/file/{FileName}/?do=download&r={FileID})";
} }
public override string[] GetMetaIni()
{
var downloader = Downloader;
if (FileID != null)
return new[]
{
"[General]",
$"directURL=https://{downloader.SiteURL.Host}/files/file/{FileName}/?do=download&r={FileID}&confirm=1&t=1"
};
return new[]
{
"[General]",
$"directURL=https://{downloader.SiteURL.Host}/files/file/{FileName}"
};
}
private static AbstractNeedsLoginDownloader Downloader => (AbstractNeedsLoginDownloader)(object)DownloadDispatcher.GetInstance<TDownloader>();
} }
protected AbstractIPS4Downloader(Uri loginUri, string encryptedKeyName, string cookieDomain) : protected AbstractIPS4Downloader(Uri loginUri, string encryptedKeyName, string cookieDomain) :

View File

@ -86,6 +86,11 @@ namespace Wabbajack.Lib.Downloaders
{ {
return $"* Game File {Game} - {GameFile}"; return $"* Game File {Game} - {GameFile}";
} }
public override string[] GetMetaIni()
{
return new[] {"[General]", $"gameName={Game.MetaData().MO2ArchiveName}", $"gameFile={GameFile}"};
}
} }
} }
} }

View File

@ -79,6 +79,11 @@ namespace Wabbajack.Lib.Downloaders
{ {
return $"* GoogleDrive - [{a.Name}](https://drive.google.com/uc?id={Id}&export=download)"; 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"};
}
} }
} }
} }

View File

@ -193,6 +193,17 @@ namespace Wabbajack.Lib.Downloaders
{ {
return $"* [{a.Name} - {Url}]({Url})"; return $"* [{a.Name} - {Url}]({Url})";
} }
public override string[] GetMetaIni()
{
if (Headers != null)
return new [] {"[General]",
$"directURL={Url}",
$"directURLHeaders={string.Join("|", Headers)}"};
else
return new [] {"[General]", $"directURL={Url}"};
}
} }
} }
} }

View File

@ -125,6 +125,15 @@ namespace Wabbajack.Lib.Downloaders
{ {
return $"* Manual Download - [{a.Name} - {Url}]({Url})"; return $"* Manual Download - [{a.Name} - {Url}]({Url})";
} }
public override string[] GetMetaIni()
{
return new [] {
"[General]",
$"manualURL={Url}"
};
}
} }
} }
} }

View File

@ -69,7 +69,14 @@ namespace Wabbajack.Lib.Downloaders
return $"* [{a.Name} - {Url}]({Url})"; return $"* [{a.Name} - {Url}]({Url})";
} }
public override string[] GetMetaIni()
{
return new []
{
"[General]",
$"directURL={Url}"
};
}
} }
public async Task Prepare() public async Task Prepare()

View File

@ -107,6 +107,11 @@ namespace Wabbajack.Lib.Downloaders
{ {
return $"* ModDB - [{a.Name}]({Url})"; return $"* ModDB - [{a.Name}]({Url})";
} }
public override string[] GetMetaIni()
{
return new[] {"[General]", $"directURL={Url}"};
}
} }
} }
} }

View File

@ -203,6 +203,11 @@ namespace Wabbajack.Lib.Downloaders
$" * Author : [{UploadedBy}]({profile})", $" * Author : [{UploadedBy}]({profile})",
$" * Version : {Version}"); $" * Version : {Version}");
} }
public override string[] GetMetaIni()
{
return new[] {"[General]", $"gameName={GameName}", $"modID={ModID}", $"fileID={FileID}"};
}
} }
} }
} }

View File

@ -94,6 +94,17 @@ namespace Wabbajack.Lib.Downloaders
{ {
return $"* Steam - [{Item.ItemID}]"; return $"* Steam - [{Item.ItemID}]";
} }
public override string[] GetMetaIni()
{
return new[]
{
"[General]",
$"itemID={Item.ItemID}",
$"steamID={Item.Game.Game.MetaData().SteamIDs.First()}",
$"itemSize={Item.Size}"
};
}
} }
} }
} }

View File

@ -63,7 +63,7 @@ namespace Wabbajack.Test
((MegaDownloader.State)url_state).Url); ((MegaDownloader.State)url_state).Url);
var converted = state.ViaJSON(); var converted = await state.RoundTripState();
Assert.IsTrue(await converted.Verify()); Assert.IsTrue(await converted.Verify());
var filename = Guid.NewGuid().ToString(); var filename = Guid.NewGuid().ToString();
@ -93,7 +93,7 @@ namespace Wabbajack.Test
Assert.AreEqual("https://www.dropbox.com/s/5hov3m2pboppoc2/WABBAJACK_TEST_FILE.txt?dl=1", Assert.AreEqual("https://www.dropbox.com/s/5hov3m2pboppoc2/WABBAJACK_TEST_FILE.txt?dl=1",
((HTTPDownloader.State)url_state).Url); ((HTTPDownloader.State)url_state).Url);
var converted = state.ViaJSON(); var converted = await state.RoundTripState();
Assert.IsTrue(await converted.Verify()); Assert.IsTrue(await converted.Verify());
var filename = Guid.NewGuid().ToString(); var filename = Guid.NewGuid().ToString();
@ -123,7 +123,7 @@ namespace Wabbajack.Test
Assert.AreEqual("1grLRTrpHxlg7VPxATTFNfq2OkU_Plvh_", Assert.AreEqual("1grLRTrpHxlg7VPxATTFNfq2OkU_Plvh_",
((GoogleDriveDownloader.State)url_state).Id); ((GoogleDriveDownloader.State)url_state).Id);
var converted = state.ViaJSON(); var converted = await state.RoundTripState();
Assert.IsTrue(await converted.Verify()); Assert.IsTrue(await converted.Verify());
var filename = Guid.NewGuid().ToString(); var filename = Guid.NewGuid().ToString();
@ -152,7 +152,7 @@ namespace Wabbajack.Test
Assert.AreEqual("http://build.wabbajack.org/WABBAJACK_TEST_FILE.txt", Assert.AreEqual("http://build.wabbajack.org/WABBAJACK_TEST_FILE.txt",
((HTTPDownloader.State)url_state).Url); ((HTTPDownloader.State)url_state).Url);
var converted = state.ViaJSON(); var converted = await state.RoundTripState();
Assert.IsTrue(await converted.Verify()); Assert.IsTrue(await converted.Verify());
var filename = Guid.NewGuid().ToString(); var filename = Guid.NewGuid().ToString();
@ -176,7 +176,7 @@ namespace Wabbajack.Test
Assert.IsNotNull(state); Assert.IsNotNull(state);
var converted = state.ViaJSON(); var converted = await state.RoundTripState();
Assert.IsTrue(await converted.Verify()); Assert.IsTrue(await converted.Verify());
var filename = Guid.NewGuid().ToString(); var filename = Guid.NewGuid().ToString();
@ -206,7 +206,7 @@ namespace Wabbajack.Test
Assert.AreEqual("http://www.mediafire.com/file/agiqzm1xwebczpx/WABBAJACK_TEST_FILE.txt", Assert.AreEqual("http://www.mediafire.com/file/agiqzm1xwebczpx/WABBAJACK_TEST_FILE.txt",
((MediaFireDownloader.State) url_state).Url); ((MediaFireDownloader.State) url_state).Url);
var converted = state.ViaJSON(); var converted = await state.RoundTripState();
Assert.IsTrue(await converted.Verify()); Assert.IsTrue(await converted.Verify());
var filename = Guid.NewGuid().ToString(); var filename = Guid.NewGuid().ToString();
@ -237,7 +237,7 @@ namespace Wabbajack.Test
Assert.IsNotNull(state); Assert.IsNotNull(state);
var converted = state.ViaJSON(); var converted = await state.RoundTripState();
Assert.IsTrue(await converted.Verify()); Assert.IsTrue(await converted.Verify());
// Exercise the cache code // Exercise the cache code
Assert.IsTrue(await converted.Verify()); Assert.IsTrue(await converted.Verify());
@ -272,7 +272,7 @@ namespace Wabbajack.Test
Assert.AreEqual("https://www.moddb.com/downloads/start/124908?referer=https%3A%2F%2Fwww.moddb.com%2Fmods%2Fautopause", Assert.AreEqual("https://www.moddb.com/downloads/start/124908?referer=https%3A%2F%2Fwww.moddb.com%2Fmods%2Fautopause",
((ModDBDownloader.State)url_state).Url); ((ModDBDownloader.State)url_state).Url);
var converted = state.ViaJSON(); var converted = await state.RoundTripState();
Assert.IsTrue(await converted.Verify()); Assert.IsTrue(await converted.Verify());
var filename = Guid.NewGuid().ToString(); var filename = Guid.NewGuid().ToString();
@ -298,7 +298,7 @@ namespace Wabbajack.Test
Assert.AreEqual("http://build.wabbajack.org/WABBAJACK_TEST_FILE.txt", Assert.AreEqual("http://build.wabbajack.org/WABBAJACK_TEST_FILE.txt",
((HTTPDownloader.State)url_state).Url); ((HTTPDownloader.State)url_state).Url);
*/ */
var converted = state.ViaJSON(); var converted = await state.RoundTripState();
Assert.IsTrue(await converted.Verify()); Assert.IsTrue(await converted.Verify());
var filename = Guid.NewGuid().ToString(); var filename = Guid.NewGuid().ToString();
@ -326,7 +326,7 @@ namespace Wabbajack.Test
Assert.AreEqual("http://build.wabbajack.org/WABBAJACK_TEST_FILE.txt", Assert.AreEqual("http://build.wabbajack.org/WABBAJACK_TEST_FILE.txt",
((HTTPDownloader.State)url_state).Url); ((HTTPDownloader.State)url_state).Url);
*/ */
var converted = state.ViaJSON(); var converted = await state.RoundTripState();
Assert.IsTrue(await converted.Verify()); Assert.IsTrue(await converted.Verify());
var filename = Guid.NewGuid().ToString(); var filename = Guid.NewGuid().ToString();
@ -353,7 +353,7 @@ namespace Wabbajack.Test
Assert.IsNotNull(state); Assert.IsNotNull(state);
var converted = state.ViaJSON(); var converted = await state.RoundTripState();
Assert.IsTrue(await converted.Verify()); Assert.IsTrue(await converted.Verify());
var filename = Guid.NewGuid().ToString(); var filename = Guid.NewGuid().ToString();

View File

@ -1,4 +1,7 @@
using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Threading.Tasks;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Wabbajack.Common;
using Wabbajack.Lib.Downloaders;
namespace Wabbajack.Test namespace Wabbajack.Test
{ {
@ -13,5 +16,15 @@ namespace Wabbajack.Test
Assert.IsTrue(condition ?? false, string.Empty, (object[])null); Assert.IsTrue(condition ?? false, string.Empty, (object[])null);
} }
public static async Task<T> RoundTripState<T>(this T state) where T : AbstractDownloadState
{
var ini = string.Join("\r\n", state.GetMetaIni()).LoadIniString();
var round = (AbstractDownloadState) await DownloadDispatcher.ResolveArchive(ini);
Assert.IsInstanceOfType(round, state.GetType());
Assert.AreEqual(state.PrimaryKeyString, round.PrimaryKeyString);
CollectionAssert.AreEqual(state.GetMetaIni(), round.GetMetaIni());
return (T)round;
}
} }
} }

View File

@ -145,6 +145,7 @@ namespace Wabbajack.VirtualFileSystem
if (result != null) if (result != null)
{ {
Utils.Log($"Downloaded VFS data for {Path.GetFileName(abs_path)}");
VirtualFile Convert(IndexedVirtualFile file, string path, VirtualFile vparent) VirtualFile Convert(IndexedVirtualFile file, string path, VirtualFile vparent)
{ {
var vself = new VirtualFile var vself = new VirtualFile