Added duplicate package filtering to cs loader. Prioritizes loading LocalMods packages.
This commit is contained in:
committed by
Evil Factory
parent
a62b62185f
commit
3708e837e7
@@ -332,10 +332,58 @@ public sealed class CsPackageManager : IDisposable
|
|||||||
.ToDictionary(p => p.Key, p=> p.Value));
|
.ToDictionary(p => p.Key, p=> p.Value));
|
||||||
|
|
||||||
// filter not to be loaded
|
// filter not to be loaded
|
||||||
var cpToRun = _packageRunConfigs
|
var cpToRunA = _packageRunConfigs
|
||||||
.Where(kvp => ShouldRunPackage(kvp.Key, kvp.Value))
|
.Where(kvp => ShouldRunPackage(kvp.Key, kvp.Value))
|
||||||
.Select(kvp => kvp.Key)
|
.Select(kvp => kvp.Key)
|
||||||
.ToImmutableList();
|
.ToHashSet();
|
||||||
|
|
||||||
|
//-- filter and remove duplicate mods, prioritize /LocalMods/
|
||||||
|
HashSet<string> cpNames = new();
|
||||||
|
HashSet<string> duplicateNames = new();
|
||||||
|
|
||||||
|
// search
|
||||||
|
foreach (ContentPackage package in cpToRunA)
|
||||||
|
{
|
||||||
|
if (cpNames.Contains(package.Name))
|
||||||
|
{
|
||||||
|
if (!duplicateNames.Contains(package.Name))
|
||||||
|
{
|
||||||
|
duplicateNames.Add(package.Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cpNames.Add(package.Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove
|
||||||
|
foreach (string name in duplicateNames)
|
||||||
|
{
|
||||||
|
var duplCpList = cpToRunA
|
||||||
|
.Where(p => p.Name.Equals(name))
|
||||||
|
.ToHashSet();
|
||||||
|
|
||||||
|
if (duplCpList.Count < 2) // one or less found
|
||||||
|
continue;
|
||||||
|
|
||||||
|
ContentPackage toKeep = null;
|
||||||
|
foreach (ContentPackage package in duplCpList)
|
||||||
|
{
|
||||||
|
if (package.Dir.Contains("LocalMods"))
|
||||||
|
{
|
||||||
|
toKeep = package;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
toKeep ??= duplCpList.First();
|
||||||
|
|
||||||
|
duplCpList.Remove(toKeep); // remove all but this one
|
||||||
|
cpToRunA.RemoveWhere(p => duplCpList.Contains(p));
|
||||||
|
}
|
||||||
|
|
||||||
|
var cpToRun = cpToRunA.ToImmutableList();
|
||||||
|
|
||||||
// build dependencies map
|
// build dependencies map
|
||||||
bool reliableMap = TryBuildDependenciesMap(cpToRun, out var packDeps);
|
bool reliableMap = TryBuildDependenciesMap(cpToRun, out var packDeps);
|
||||||
|
|||||||
Reference in New Issue
Block a user