コード例 #1
0
        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
            });
        }
コード例 #2
0
ファイル: GameFiles.cs プロジェクト: FrannyRed/wabbajack
        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()));
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
ファイル: DiscordFrontend.cs プロジェクト: rhysmdnz/wabbajack
        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");
        }