public async Task <AbstractDownloadState?> GetDownloaderState(dynamic archiveINI, bool quickMode) { var gameName = (string?)archiveINI?.General?.gameName; var gameFile = (string?)archiveINI?.General?.gameFile; if (gameName == null || gameFile == null) { return(null); } if (!GameRegistry.TryGetByFuzzyName(gameName, out var game)) { return(null); } var path = game.TryGetGameLocation(); var filePath = path?.Combine(gameFile); if (!(filePath?.Exists ?? false)) { return(null); } var fp = filePath.Value; var hash = await fp.FileHashCachedAsync(); return(new State(game.InstalledVersion) { Game = game.Game, GameFile = (RelativePath)gameFile, Hash = hash }); }
public async Task <IActionResult> GetFiles(string game, string version) { if (!GameRegistry.TryGetByFuzzyName(game, out var meta)) { return(NotFound($"Game {game} not found")); } var files = await _sql.GetGameFiles(meta.Game, version); return(Ok(files.ToJson())); }
public void TestGetGameFromMO2ArchiveName() { var games = GameRegistry.Games.Select(x => (name: x.Value.MO2Name, game: x.Key)); foreach (var(name, game) in games) { if (name == null) { continue; } var result = GameRegistry.TryGetByFuzzyName(name); Assert.NotNull(result); Assert.Equal(game, result.Game); } }
public static async Task <bool> Execute(AbsolutePath mo2Folder) { var iniPath = mo2Folder.Combine(Consts.ModOrganizer2Ini); if (!iniPath.Exists) { Utils.Log($"Game folder conversion failed, {Consts.ModOrganizer2Ini} does not exist in {mo2Folder}"); return(false); } var newGamePath = mo2Folder.Combine(Consts.GameFolderFilesDir); newGamePath.CreateDirectory(); var gameIni = iniPath.LoadIniFile(); if (!GameRegistry.TryGetByFuzzyName((string)gameIni.General.gameName, out var gameMeta)) { Utils.Log($"Could not locate game for {gameIni.General.gameName}"); return(false); } var orginGamePath = gameMeta.GameLocation(); foreach (var file in gameMeta.GameLocation().EnumerateFiles()) { var relPath = file.RelativeTo(orginGamePath); var newFile = relPath.RelativeTo(newGamePath); if (newFile.Exists) { Utils.Log($"Skipping {relPath} it already exists in the target path"); continue; } Utils.Log($"Copying/Linking {relPath}"); await file.HardLinkIfOversize(newFile); } Utils.Log("Remapping INI"); var iniString = await iniPath.ReadAllTextAsync(); iniString = iniString.Replace((string)orginGamePath, (string)newGamePath); iniString = iniString.Replace(((string)orginGamePath).Replace(@"\", @"\\"), ((string)newGamePath).Replace(@"\", @"\\")); iniString = iniString.Replace(((string)orginGamePath).Replace(@"\", @"/"), ((string)newGamePath).Replace(@"\", @"/")); await iniPath.WriteAllTextAsync(iniString); return(true); }
private static bool TryParseGameUrl(SyndicationLink link, out Game game, out long modId) { var parts = link.Uri.AbsolutePath.Split('/', StringSplitOptions.RemoveEmptyEntries); if (!GameRegistry.TryGetByFuzzyName(parts[0], out var foundGame)) { game = Game.Oblivion; modId = 0; return(false); } if (long.TryParse(parts[2], out modId)) { game = foundGame.Game; return(true); } game = Game.Oblivion; modId = 0; return(false); }
private async Task MirrorModCommand(SocketMessage msg, string[] parts) { if (parts.Length != 2) { await ReplyTo(msg, "Command is: mirror-mod <game-name> <mod-id>"); return; } if (long.TryParse(parts[2], out var modId)) { await ReplyTo(msg, $"Got {modId} for a mod-id, expected a integer"); return; } if (GameRegistry.TryGetByFuzzyName(parts[1], out var game)) { var gameNames = GameRegistry.Games.Select(g => g.Value.NexusName) .Where(g => !string.IsNullOrWhiteSpace(g)) .Select(g => (string)g) .ToHashSet(); var joined = string.Join(", ", gameNames.OrderBy(g => g)); await ReplyTo(msg, $"Got {parts[1]} for a game name, expected something like: {joined}"); } if (game !.NexusGameId == default) { await ReplyTo(msg, $"No NexusGameID found for {game}"); } await _sql.AddNexusModWithOpenPerms(game.Game, modId); await _quickSync.Notify <MirrorUploader>(); await ReplyTo(msg, "Done, and I notified the uploader"); }