Пример #1
0
        public void GetNestedDependencies()
        {
            var dependencies = ModConfig.GetDependencies(TestData.TestModConfigC);

            Assert.Contains(TestData.TestModConfigA, dependencies.Configurations);
            Assert.Contains(TestData.TestModConfigB, dependencies.Configurations);
        }
Пример #2
0
        public void GetNestedMissingDependencies()
        {
            var dependencies = ModConfig.GetDependencies(TestData.TestModConfigC);

            foreach (var missingDependency in TestData.NonexistingDependencies)
            {
                Assert.Contains(missingDependency, dependencies.MissingConfigurations);
            }
        }
Пример #3
0
        public void SortMods()
        {
            var dependencies = ModConfig.GetDependencies(TestData.TestModConfigC);
            var allMods      = new List <ModConfig>();

            allMods.Add(TestData.TestModConfigC);
            allMods.AddRange(dependencies.Configurations);
            allMods = ModConfig.SortMods(allMods);

            Assert.Equal(TestData.TestModConfigA, allMods[0]);
            Assert.Equal(TestData.TestModConfigB, allMods[1]);
            Assert.Equal(TestData.TestModConfigC, allMods[2]);
        }
Пример #4
0
    /// <summary>
    /// Retrieves all of the dependencies for a given set of mods.
    /// </summary>
    /// <exception cref="FileNotFoundException">A dependency for any of the mods has not been found.</exception>
    private HashSet <ModConfig> GetDependenciesForMods(IEnumerable <ModConfig> mods, IEnumerable <ModConfig> allMods, string modDirectory)
    {
        if (allMods == null)
        {
            allMods = ModConfig.GetAllMods(LoaderConfig.GetModConfigDirectory()).Select(x => x.Config);
        }

        var dependencies = ModConfig.GetDependencies(mods, allMods, modDirectory);

        if (dependencies.MissingConfigurations.Count > 0 && !IsTesting)
        {
            string missingMods = String.Join(",", dependencies.MissingConfigurations);
            throw new FileNotFoundException($"Reloaded II was unable to find all dependencies for the mod(s) to be loaded.\n" +
                                            $"Aborting load.\n" +
                                            $"Missing dependencies: {missingMods}");
        }

        return(dependencies.Configurations);
    }
Пример #5
0
    /// <summary>
    /// Executes the dependency metadata writer on all mod configurations.
    /// </summary>
    /// <returns>True if a change has been made.</returns>
    public static async Task <bool> ExecuteAllAsync(ModConfigService service, bool saveToFile = true)
    {
        var  existingModTuples      = service.Items.ToArray();
        var  existingConfigurations = existingModTuples.Select(x => x.Config).ToArray();
        bool result = false;

        foreach (var mod in existingModTuples)
        {
            // Fast fail.
            if (mod.Config.ModDependencies.Length <= 0)
            {
                continue;
            }

            // Get mod dependencies.
            var  dependencies = ModConfig.GetDependencies(mod.Config, existingConfigurations);
            bool needsWriting = false;

            // Try to update config.
            foreach (var writer in All)
            {
                if (writer.Update(mod.Config, dependencies.Configurations))
                {
                    needsWriting = true;
                }
            }

            // Save new config.
            if (needsWriting)
            {
                result = true;
                if (saveToFile)
                {
                    await mod.SaveAsync();
                }
            }
        }

        return(result);
    }