mirror of
https://github.com/wabbajack-tools/wabbajack.git
synced 2024-08-30 18:42:17 +00:00
Add manual downloader and supporting code
This commit is contained in:
parent
97c14f6a7a
commit
b43c2fbfb0
@ -3,11 +3,13 @@ using Wabbajack.DTOs.JsonConverters;
|
|||||||
|
|
||||||
namespace Wabbajack.DTOs.DownloadStates;
|
namespace Wabbajack.DTOs.DownloadStates;
|
||||||
|
|
||||||
[JsonAlias("ManualDownloader, Wabbajack.Lib")]
|
[JsonName("ManualDownloader, Wabbajack.Lib")]
|
||||||
[JsonName("Manual")]
|
[JsonAlias("Manual")]
|
||||||
public class Manual : ADownloadState
|
public class Manual : ADownloadState
|
||||||
{
|
{
|
||||||
public Uri Url { get; init; }
|
public Uri Url { get; init; }
|
||||||
|
|
||||||
|
public string Prompt { get; init; }
|
||||||
public override string TypeName => "ManualDownloader+State";
|
public override string TypeName => "ManualDownloader+State";
|
||||||
public override object[] PrimaryKey => new object[] {Url};
|
public override object[] PrimaryKey => new object[] {Url};
|
||||||
}
|
}
|
@ -192,7 +192,7 @@ public class DownloaderTests
|
|||||||
Game = Game.SkyrimSpecialEdition,
|
Game = Game.SkyrimSpecialEdition,
|
||||||
IsCCMod = true,
|
IsCCMod = true,
|
||||||
ProductId = 4,
|
ProductId = 4,
|
||||||
BranchID = 90898,
|
BranchId = 90898,
|
||||||
ContentId = "4059054"
|
ContentId = "4059054"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -204,7 +204,7 @@ public class DownloaderTests
|
|||||||
Game = Game.SkyrimSpecialEdition,
|
Game = Game.SkyrimSpecialEdition,
|
||||||
IsCCMod = true,
|
IsCCMod = true,
|
||||||
ProductId = 6,
|
ProductId = 6,
|
||||||
BranchID = 9898,
|
BranchId = 9898,
|
||||||
ContentId = "059054"
|
ContentId = "059054"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -2,6 +2,7 @@ using Microsoft.Extensions.DependencyInjection;
|
|||||||
using Wabbajack.Downloaders.Bethesda;
|
using Wabbajack.Downloaders.Bethesda;
|
||||||
using Wabbajack.Downloaders.Http;
|
using Wabbajack.Downloaders.Http;
|
||||||
using Wabbajack.Downloaders.IPS4OAuth2Downloader;
|
using Wabbajack.Downloaders.IPS4OAuth2Downloader;
|
||||||
|
using Wabbajack.Downloaders.Manual;
|
||||||
using Wabbajack.Downloaders.MediaFire;
|
using Wabbajack.Downloaders.MediaFire;
|
||||||
using Wabbajack.Downloaders.ModDB;
|
using Wabbajack.Downloaders.ModDB;
|
||||||
using Wabbajack.DTOs.JsonConverters;
|
using Wabbajack.DTOs.JsonConverters;
|
||||||
@ -27,6 +28,7 @@ public static class ServiceExtensions
|
|||||||
.AddGameFileDownloader()
|
.AddGameFileDownloader()
|
||||||
.AddBethesdaDownloader()
|
.AddBethesdaDownloader()
|
||||||
.AddWabbajackClient()
|
.AddWabbajackClient()
|
||||||
|
.AddManualDownloader()
|
||||||
.AddSingleton<DownloadDispatcher>();
|
.AddSingleton<DownloadDispatcher>();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -14,6 +14,7 @@
|
|||||||
<ProjectReference Include="..\Wabbajack.Downloaders.Http\Wabbajack.Downloaders.Http.csproj" />
|
<ProjectReference Include="..\Wabbajack.Downloaders.Http\Wabbajack.Downloaders.Http.csproj" />
|
||||||
<ProjectReference Include="..\Wabbajack.Downloaders.Interfaces\Wabbajack.Downloaders.Interfaces.csproj" />
|
<ProjectReference Include="..\Wabbajack.Downloaders.Interfaces\Wabbajack.Downloaders.Interfaces.csproj" />
|
||||||
<ProjectReference Include="..\Wabbajack.Downloaders.IPS4OAuth2Downloader\Wabbajack.Downloaders.IPS4OAuth2Downloader.csproj" />
|
<ProjectReference Include="..\Wabbajack.Downloaders.IPS4OAuth2Downloader\Wabbajack.Downloaders.IPS4OAuth2Downloader.csproj" />
|
||||||
|
<ProjectReference Include="..\Wabbajack.Downloaders.Manual\Wabbajack.Downloaders.Manual.csproj" />
|
||||||
<ProjectReference Include="..\Wabbajack.Downloaders.MediaFire\Wabbajack.Downloaders.MediaFire.csproj" />
|
<ProjectReference Include="..\Wabbajack.Downloaders.MediaFire\Wabbajack.Downloaders.MediaFire.csproj" />
|
||||||
<ProjectReference Include="..\Wabbajack.Downloaders.Mega\Wabbajack.Downloaders.Mega.csproj" />
|
<ProjectReference Include="..\Wabbajack.Downloaders.Mega\Wabbajack.Downloaders.Mega.csproj" />
|
||||||
<ProjectReference Include="..\Wabbajack.Downloaders.ModDB\Wabbajack.Downloaders.ModDB.csproj" />
|
<ProjectReference Include="..\Wabbajack.Downloaders.ModDB\Wabbajack.Downloaders.ModDB.csproj" />
|
||||||
|
57
Wabbajack.Downloaders.Manual/ManualDownloader.cs
Normal file
57
Wabbajack.Downloaders.Manual/ManualDownloader.cs
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
using Wabbajack.Downloaders.Interfaces;
|
||||||
|
using Wabbajack.DTOs;
|
||||||
|
using Wabbajack.DTOs.DownloadStates;
|
||||||
|
using Wabbajack.DTOs.Validation;
|
||||||
|
using Wabbajack.Hashing.xxHash64;
|
||||||
|
using Wabbajack.Paths;
|
||||||
|
using Wabbajack.RateLimiter;
|
||||||
|
|
||||||
|
namespace Wabbajack.Downloaders.Manual;
|
||||||
|
|
||||||
|
public class ManualDownloader : ADownloader<DTOs.DownloadStates.Manual>
|
||||||
|
{
|
||||||
|
public override Task<Hash> Download(Archive archive, DTOs.DownloadStates.Manual state, AbsolutePath destination, IJob job, CancellationToken token)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override async Task<bool> Prepare()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool IsAllowed(ServerAllowList allowList, IDownloadState state)
|
||||||
|
{
|
||||||
|
return allowList.AllowedPrefixes.Any(p => ((DTOs.DownloadStates.Manual) state).Url.ToString().StartsWith(p));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override IDownloadState? Resolve(IReadOnlyDictionary<string, string> iniData)
|
||||||
|
{
|
||||||
|
if (iniData.ContainsKey("manualURL") && Uri.TryCreate(iniData["manualURL"], UriKind.Absolute, out var uri))
|
||||||
|
{
|
||||||
|
iniData.TryGetValue("prompt", out var prompt);
|
||||||
|
|
||||||
|
var state = new DTOs.DownloadStates.Manual
|
||||||
|
{
|
||||||
|
Url = uri,
|
||||||
|
Prompt = prompt ?? ""
|
||||||
|
};
|
||||||
|
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Priority Priority { get; } = Priority.Lowest;
|
||||||
|
public override async Task<bool> Verify(Archive archive, DTOs.DownloadStates.Manual archiveState, IJob job, CancellationToken token)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override IEnumerable<string> MetaIni(Archive a, DTOs.DownloadStates.Manual state)
|
||||||
|
{
|
||||||
|
|
||||||
|
return new[] {$"manualURL={state.Url}", $"prompt={state.Prompt}"};
|
||||||
|
}
|
||||||
|
}
|
13
Wabbajack.Downloaders.Manual/ServiceExtensions.cs
Normal file
13
Wabbajack.Downloaders.Manual/ServiceExtensions.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Wabbajack.Downloaders.Interfaces;
|
||||||
|
using Wabbajack.DTOs;
|
||||||
|
|
||||||
|
namespace Wabbajack.Downloaders.Manual;
|
||||||
|
|
||||||
|
public static class ServiceExtensions
|
||||||
|
{
|
||||||
|
public static IServiceCollection AddManualDownloader(this IServiceCollection services)
|
||||||
|
{
|
||||||
|
return services.AddAllSingleton<IDownloader, IDownloader<DTOs.DownloadStates.Manual>, ManualDownloader>();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Wabbajack.Downloaders.Interfaces\Wabbajack.Downloaders.Interfaces.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
@ -137,6 +137,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wabbajack.Networking.Bethes
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wabbajack.Downloaders.Bethesda", "Wabbajack.Downloaders.Bethesda\Wabbajack.Downloaders.Bethesda.csproj", "{B10BB6D6-B3FC-4A76-8A07-6A0A0ADDE198}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wabbajack.Downloaders.Bethesda", "Wabbajack.Downloaders.Bethesda\Wabbajack.Downloaders.Bethesda.csproj", "{B10BB6D6-B3FC-4A76-8A07-6A0A0ADDE198}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wabbajack.Downloaders.Manual", "Wabbajack.Downloaders.Manual\Wabbajack.Downloaders.Manual.csproj", "{7FC4F129-F0FA-46B7-B7C4-532E371A6326}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@ -375,6 +377,10 @@ Global
|
|||||||
{B10BB6D6-B3FC-4A76-8A07-6A0A0ADDE198}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{B10BB6D6-B3FC-4A76-8A07-6A0A0ADDE198}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{B10BB6D6-B3FC-4A76-8A07-6A0A0ADDE198}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{B10BB6D6-B3FC-4A76-8A07-6A0A0ADDE198}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{B10BB6D6-B3FC-4A76-8A07-6A0A0ADDE198}.Release|Any CPU.Build.0 = Release|Any CPU
|
{B10BB6D6-B3FC-4A76-8A07-6A0A0ADDE198}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{7FC4F129-F0FA-46B7-B7C4-532E371A6326}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{7FC4F129-F0FA-46B7-B7C4-532E371A6326}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{7FC4F129-F0FA-46B7-B7C4-532E371A6326}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{7FC4F129-F0FA-46B7-B7C4-532E371A6326}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
@ -422,6 +428,7 @@ Global
|
|||||||
{6D7EA87E-6ABE-4BA3-B93A-BE5E71A4DE7C} = {F677890D-5109-43BC-97C7-C4CD47C8EE0C}
|
{6D7EA87E-6ABE-4BA3-B93A-BE5E71A4DE7C} = {F677890D-5109-43BC-97C7-C4CD47C8EE0C}
|
||||||
{A3813D73-9A8E-4CE7-861A-C59043DFFC14} = {F01F8595-5FD7-4506-8469-F4A5522DACC1}
|
{A3813D73-9A8E-4CE7-861A-C59043DFFC14} = {F01F8595-5FD7-4506-8469-F4A5522DACC1}
|
||||||
{B10BB6D6-B3FC-4A76-8A07-6A0A0ADDE198} = {98B731EE-4FC0-4482-A069-BCBA25497871}
|
{B10BB6D6-B3FC-4A76-8A07-6A0A0ADDE198} = {98B731EE-4FC0-4482-A069-BCBA25497871}
|
||||||
|
{7FC4F129-F0FA-46B7-B7C4-532E371A6326} = {98B731EE-4FC0-4482-A069-BCBA25497871}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {0AA30275-0F38-4A7D-B645-F5505178DDE8}
|
SolutionGuid = {0AA30275-0F38-4A7D-B645-F5505178DDE8}
|
||||||
|
Loading…
Reference in New Issue
Block a user