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>
/// Roundtrips the value throught the JSON routines
/// Roundtrips the value through the JSON routines
/// </summary>
/// <typeparam name="TV"></typeparam>
/// <typeparam name="TR"></typeparam>

View File

@ -80,5 +80,6 @@ namespace Wabbajack.Lib.Downloaders
public abstract IDownloader GetDownloader();
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 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)
{
@ -143,6 +151,25 @@ namespace Wabbajack.Lib.Downloaders
var downloader = (INeedsLogin)GetDownloader();
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) :

View File

@ -86,6 +86,11 @@ namespace Wabbajack.Lib.Downloaders
{
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)";
}
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})";
}
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})";
}
public override string[] GetMetaIni()
{
return new [] {
"[General]",
$"manualURL={Url}"
};
}
}
}
}

View File

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

View File

@ -107,6 +107,11 @@ namespace Wabbajack.Lib.Downloaders
{
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})",
$" * 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}]";
}
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);
var converted = state.ViaJSON();
var converted = await state.RoundTripState();
Assert.IsTrue(await converted.Verify());
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",
((HTTPDownloader.State)url_state).Url);
var converted = state.ViaJSON();
var converted = await state.RoundTripState();
Assert.IsTrue(await converted.Verify());
var filename = Guid.NewGuid().ToString();
@ -123,7 +123,7 @@ namespace Wabbajack.Test
Assert.AreEqual("1grLRTrpHxlg7VPxATTFNfq2OkU_Plvh_",
((GoogleDriveDownloader.State)url_state).Id);
var converted = state.ViaJSON();
var converted = await state.RoundTripState();
Assert.IsTrue(await converted.Verify());
var filename = Guid.NewGuid().ToString();
@ -152,7 +152,7 @@ namespace Wabbajack.Test
Assert.AreEqual("http://build.wabbajack.org/WABBAJACK_TEST_FILE.txt",
((HTTPDownloader.State)url_state).Url);
var converted = state.ViaJSON();
var converted = await state.RoundTripState();
Assert.IsTrue(await converted.Verify());
var filename = Guid.NewGuid().ToString();
@ -176,7 +176,7 @@ namespace Wabbajack.Test
Assert.IsNotNull(state);
var converted = state.ViaJSON();
var converted = await state.RoundTripState();
Assert.IsTrue(await converted.Verify());
var filename = Guid.NewGuid().ToString();
@ -206,7 +206,7 @@ namespace Wabbajack.Test
Assert.AreEqual("http://www.mediafire.com/file/agiqzm1xwebczpx/WABBAJACK_TEST_FILE.txt",
((MediaFireDownloader.State) url_state).Url);
var converted = state.ViaJSON();
var converted = await state.RoundTripState();
Assert.IsTrue(await converted.Verify());
var filename = Guid.NewGuid().ToString();
@ -237,7 +237,7 @@ namespace Wabbajack.Test
Assert.IsNotNull(state);
var converted = state.ViaJSON();
var converted = await state.RoundTripState();
Assert.IsTrue(await converted.Verify());
// Exercise the cache code
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",
((ModDBDownloader.State)url_state).Url);
var converted = state.ViaJSON();
var converted = await state.RoundTripState();
Assert.IsTrue(await converted.Verify());
var filename = Guid.NewGuid().ToString();
@ -298,7 +298,7 @@ namespace Wabbajack.Test
Assert.AreEqual("http://build.wabbajack.org/WABBAJACK_TEST_FILE.txt",
((HTTPDownloader.State)url_state).Url);
*/
var converted = state.ViaJSON();
var converted = await state.RoundTripState();
Assert.IsTrue(await converted.Verify());
var filename = Guid.NewGuid().ToString();
@ -326,7 +326,7 @@ namespace Wabbajack.Test
Assert.AreEqual("http://build.wabbajack.org/WABBAJACK_TEST_FILE.txt",
((HTTPDownloader.State)url_state).Url);
*/
var converted = state.ViaJSON();
var converted = await state.RoundTripState();
Assert.IsTrue(await converted.Verify());
var filename = Guid.NewGuid().ToString();
@ -353,7 +353,7 @@ namespace Wabbajack.Test
Assert.IsNotNull(state);
var converted = state.ViaJSON();
var converted = await state.RoundTripState();
Assert.IsTrue(await converted.Verify());
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
{
@ -12,6 +15,16 @@ namespace Wabbajack.Test
{
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)
{
Utils.Log($"Downloaded VFS data for {Path.GetFileName(abs_path)}");
VirtualFile Convert(IndexedVirtualFile file, string path, VirtualFile vparent)
{
var vself = new VirtualFile