Game type is now an enum for Nexus downloads

This commit is contained in:
Timothy Baldridge 2020-03-30 16:26:34 -06:00
parent 160ac8a4c3
commit a6e3ef5f72
9 changed files with 23 additions and 30 deletions

View File

@ -47,7 +47,7 @@ namespace Compression.BSA.Test
var state = new NexusDownloader.State
{
ModID = mod.ToString(),
GameName = game.MetaData().NexusName,
Game = game,
FileID = file.file_id.ToString()
};
await state.Download(src);

View File

@ -102,7 +102,7 @@ namespace Wabbajack.BuildServer.Controllers
return NotFound("Original state not found");
var nexusState = state.State as NexusDownloader.State;
var nexusGame = GameRegistry.GetByFuzzyName(nexusState.GameName).NexusName;
var nexusGame = nexusState.Game.MetaData().NexusName;
var mod_files = await Db.NexusModFiles.AsQueryable()
.Where(f => f.Game == nexusGame && f.ModId == nexusState.ModID)
.ToListAsync();
@ -164,8 +164,7 @@ namespace Wabbajack.BuildServer.Controllers
{
var origSize = _settings.PathForArchive(srcHash).Size;
var api = await NexusApiClient.Get(Request.Headers["apikey"].FirstOrDefault());
var allMods = await api.GetModFiles(GameRegistry.GetByFuzzyName(state.GameName).Game,
int.Parse(state.ModID));
var allMods = await api.GetModFiles(state.Game, int.Parse(state.ModID));
var archive = allMods.files.Where(m => !string.IsNullOrEmpty(m.category_name))
.OrderBy(s => Math.Abs((long)s.size - origSize))
.Select(s => new Archive {
@ -173,7 +172,7 @@ namespace Wabbajack.BuildServer.Controllers
Size = (long)s.size,
State = new NexusDownloader.State
{
GameName = state.GameName,
Game = state.Game,
ModID = state.ModID,
FileID = s.file_id.ToString()
}}).FirstOrDefault();

View File

@ -39,13 +39,13 @@ namespace Wabbajack.BuildServer.Models.Jobs
{
var files = await client.GetModFiles(GameRegistry.GetByNexusName(mod.Game).Game,
(int)mod.ModId);
return (mod.Game, mod.ModId, files.files);
return (Game: GameRegistry.GetByFuzzyName(mod.Game).Game, mod.ModId, files.files);
}
catch (Exception)
{
return default;
}
})).Where(t => t.Game != null).ToList();
})).Where(t => t.Game != default).ToList();
var archives =
mod_files.SelectMany(mod => mod.files.Select(file => (mod.Game, mod.ModId, File:file)).Where(f => !string.IsNullOrEmpty(f.File.category_name) ))
@ -53,7 +53,7 @@ namespace Wabbajack.BuildServer.Models.Jobs
{
var state = new NexusDownloader.State
{
GameName = tuple.Game, ModID = tuple.ModId.ToString(), FileID = tuple.File.file_id.ToString()
Game = tuple.Game, ModID = tuple.ModId.ToString(), FileID = tuple.File.file_id.ToString()
};
return new Archive {State = state, Name = tuple.File.file_name};
}).ToList();

View File

@ -173,7 +173,7 @@ namespace Wabbajack.BuildServer.Models.Jobs
{
try
{
var gameMeta = GameRegistry.GetByFuzzyName(state.GameName);
var gameMeta = state.Game.MetaData();
if (gameMeta == null)
return false;

View File

@ -10,6 +10,7 @@ using Wabbajack.Common;
using Wabbajack.Common.StatusFeed.Errors;
using Wabbajack.Lib.NexusApi;
using Wabbajack.Lib.Validation;
using Game = Wabbajack.Common.Game;
namespace Wabbajack.Lib.Downloaders
{
@ -77,7 +78,7 @@ namespace Wabbajack.Lib.Downloaders
ImageURL = info.picture_url,
IsNSFW = info.contains_adult_content,
Description = NexusApiUtils.FixupSummary(info.summary),
GameName = general.gameName,
Game = GameRegistry.GetByFuzzyName((string)general.gameName).Game,
ModID = general.modID,
FileID = general.fileID
};
@ -124,7 +125,7 @@ namespace Wabbajack.Lib.Downloaders
public class State : AbstractDownloadState, IMetaState
{
[IgnoreMember]
public Uri URL => new Uri($"http://nexusmods.com/{NexusApiUtils.ConvertGameName(GameName)}/mods/{ModID}");
public Uri URL => new Uri($"http://nexusmods.com/{Game.MetaData().NexusName}/mods/{ModID}");
[Key(0)]
public string Name { get; set; }
@ -145,7 +146,7 @@ namespace Wabbajack.Lib.Downloaders
public string Description { get; set; }
[Key(6)]
public string GameName { get; set; }
public Game Game { get; set; }
[Key(7)]
public string ModID { get; set; }
@ -158,7 +159,7 @@ namespace Wabbajack.Lib.Downloaders
}
[IgnoreMember]
public override object[] PrimaryKey { get => new object[]{GameName, ModID, FileID};}
public override object[] PrimaryKey { get => new object[]{Game, ModID, FileID};}
public override bool IsWhitelisted(ServerWhitelist whitelist)
{
@ -180,7 +181,7 @@ namespace Wabbajack.Lib.Downloaders
return false;
}
Utils.Log($"Downloading Nexus Archive - {a.Name} - {GameName} - {ModID} - {FileID}");
Utils.Log($"Downloading Nexus Archive - {a.Name} - {Game} - {ModID} - {FileID}");
return await new HTTPDownloader.State
{
@ -192,7 +193,7 @@ namespace Wabbajack.Lib.Downloaders
{
try
{
var gameMeta = GameRegistry.GetByMO2ArchiveName(GameName) ?? GameRegistry.GetByNexusName(GameName);
var gameMeta = Game.MetaData();
if (gameMeta == null)
return false;
@ -212,7 +213,7 @@ namespace Wabbajack.Lib.Downloaders
}
catch (Exception ex)
{
Utils.Log($"{Name} - {GameName} - {ModID} - {FileID} - Error getting Nexus download URL - {ex}");
Utils.Log($"{Name} - {Game} - {ModID} - {FileID} - Error getting Nexus download URL - {ex}");
return false;
}
@ -225,12 +226,12 @@ namespace Wabbajack.Lib.Downloaders
public override string GetManifestURL(Archive a)
{
return $"http://nexusmods.com/{NexusApiUtils.ConvertGameName(GameName)}/mods/{ModID}";
return $"http://nexusmods.com/{Game.MetaData().NexusName}/mods/{ModID}";
}
public override string[] GetMetaIni()
{
return new[] {"[General]", $"gameName={GameName}", $"modID={ModID}", $"fileID={FileID}"};
return new[] {"[General]", $"gameName={Game.MetaData().MO2Name}", $"modID={ModID}", $"fileID={FileID}"};
}
}
}

View File

@ -268,7 +268,7 @@ namespace Wabbajack.Lib.NexusApi
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var url = $"https://api.nexusmods.com/v1/games/{ConvertGameName(archive.GameName)}/mods/{archive.ModID}/files/{archive.FileID}/download_link.json";
var url = $"https://api.nexusmods.com/v1/games/{archive.Game.MetaData().NexusName}/mods/{archive.ModID}/files/{archive.FileID}/download_link.json";
try
{
return (await Get<List<DownloadLink>>(url)).First().URI;
@ -292,13 +292,6 @@ namespace Wabbajack.Lib.NexusApi
throw;
}
}
public async Task<NexusFileInfo> GetFileInfo(NexusDownloader.State mod)
{
var url = $"https://api.nexusmods.com/v1/games/{ConvertGameName(mod.GameName)}/mods/{mod.ModID}/files/{mod.FileID}.json";
return await GetCached<NexusFileInfo>(url);
}
public class GetModFilesResponse
{
public List<NexusFileInfo> files { get; set; }
@ -346,7 +339,7 @@ namespace Wabbajack.Lib.NexusApi
public static Uri ManualDownloadUrl(NexusDownloader.State state)
{
return new Uri($"https://www.nexusmods.com/{GameRegistry.GetByFuzzyName(state.GameName).NexusName}/mods/{state.ModID}?tab=files");
return new Uri($"https://www.nexusmods.com/{state.Game.MetaData().NexusName}/mods/{state.ModID}?tab=files");
}
}
}

View File

@ -52,7 +52,7 @@ namespace Wabbajack.Test
{
State = new NexusDownloader.State
{
GameName = "Skyrim",
Game = Game.Skyrim,
Author = "bill",
ModID = "42",
FileID = "33",

View File

@ -548,7 +548,7 @@ namespace Wabbajack.Test
Hash = Hash.FromBase64("gCRVrvzDNH0="),
State = new NexusDownloader.State
{
GameName = Game.SkyrimSpecialEdition.MetaData().NexusName,
Game = Game.SkyrimSpecialEdition,
ModID = "24808",
FileID = "123501"
}

View File

@ -148,7 +148,7 @@ namespace Wabbajack
private async Task HandleManualNexusDownload(WebBrowserVM vm, CancellationTokenSource cancel, ManuallyDownloadNexusFile manuallyDownloadNexusFile)
{
var state = manuallyDownloadNexusFile.State;
var game = GameRegistry.GetByFuzzyName(state.GameName);
var game = state.Game.MetaData();
var hrefs = new[]
{
$"/Core/Libs/Common/Widgets/DownloadPopUp?id={state.FileID}&game_id={game.NexusGameId}",