refactor: dynamically get best version for intermediary mappings
This commit is contained in:
parent
9eb9ddc668
commit
9349232bd4
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
#include "PackProfile_p.h"
|
#include "PackProfile_p.h"
|
||||||
#include "PackProfile.h"
|
#include "PackProfile.h"
|
||||||
#include "Component.h"
|
|
||||||
#include "meta/Index.h"
|
#include "meta/Index.h"
|
||||||
#include "meta/VersionList.h"
|
#include "meta/VersionList.h"
|
||||||
#include "meta/Version.h"
|
#include "meta/Version.h"
|
||||||
@ -495,6 +494,31 @@ static bool getTrivialComponentChanges(const ComponentIndex & index, const Requi
|
|||||||
return succeeded;
|
return succeeded;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString ComponentUpdateTask::findBestComponentVersion(const ComponentPtr component)
|
||||||
|
{
|
||||||
|
auto & components = d->m_list->d->components;
|
||||||
|
auto versions = component->getVersionList();
|
||||||
|
versions->load(d->netmode);
|
||||||
|
|
||||||
|
for (auto & version : versions->versions()) {
|
||||||
|
if (version->isRecommended()) { // only look at recommended versions
|
||||||
|
bool requirementsMet = true;
|
||||||
|
for (auto req : version->requires()) {
|
||||||
|
auto requirementMet = std::any_of(components.begin(), components.end(), [&req](ComponentPtr & cmp){
|
||||||
|
return cmp->getID() == req.uid && cmp->getVersion() == req.equalsVersion;
|
||||||
|
});
|
||||||
|
if (!requirementMet) {
|
||||||
|
requirementsMet = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (requirementsMet) // return first recommended version that meets all requirements
|
||||||
|
return version->version();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
// FIXME, TODO: decouple dependency resolution from loading
|
// FIXME, TODO: decouple dependency resolution from loading
|
||||||
// FIXME: This works directly with the PackProfile internals. It shouldn't! It needs richer data types than PackProfile uses.
|
// FIXME: This works directly with the PackProfile internals. It shouldn't! It needs richer data types than PackProfile uses.
|
||||||
// FIXME: throw all this away and use a graph
|
// FIXME: throw all this away and use a graph
|
||||||
@ -591,27 +615,14 @@ void ComponentUpdateTask::resolveDependencies(bool checkOnly)
|
|||||||
{
|
{
|
||||||
component->m_version = "3.1.2";
|
component->m_version = "3.1.2";
|
||||||
}
|
}
|
||||||
else if (add.uid == "net.fabricmc.intermediary")
|
|
||||||
{
|
|
||||||
auto minecraft = std::find_if(components.begin(), components.end(), [](ComponentPtr & cmp){
|
|
||||||
return cmp->getID() == "net.minecraft";
|
|
||||||
});
|
|
||||||
if(minecraft != components.end()) {
|
|
||||||
component->m_version = (*minecraft)->getVersion();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (add.uid == "org.quiltmc.quilt-mappings")
|
|
||||||
{
|
|
||||||
auto minecraft = std::find_if(components.begin(), components.end(), [](ComponentPtr & cmp){
|
|
||||||
return cmp->getID() == "net.minecraft";
|
|
||||||
});
|
|
||||||
if(minecraft != components.end()) {
|
|
||||||
component->m_version = (*minecraft)->getVersion() + "+build.1";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// HACK HACK HACK HACK FIXME: this is a placeholder for deciding what version to use. For now, it is hardcoded.
|
// HACK HACK HACK HACK FIXME: this is a placeholder for deciding what version to use. For now, it is hardcoded.
|
||||||
// ############################################################################################################
|
// ############################################################################################################
|
||||||
|
// below is not ugly anymore
|
||||||
|
else if (add.uid == "net.fabricmc.intermediary" || add.uid == "org.quiltmc.quilt-mappings")
|
||||||
|
{
|
||||||
|
component->m_version = findBestComponentVersion(component);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
component->m_dependencyOnly = true;
|
component->m_dependencyOnly = true;
|
||||||
// FIXME: this should not work directly with the component list
|
// FIXME: this should not work directly with the component list
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
#include "tasks/Task.h"
|
#include "tasks/Task.h"
|
||||||
#include "net/Mode.h"
|
#include "net/Mode.h"
|
||||||
|
#include "Component.h"
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
class PackProfile;
|
class PackProfile;
|
||||||
@ -26,6 +27,7 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void loadComponents();
|
void loadComponents();
|
||||||
|
QString findBestComponentVersion(ComponentPtr component);
|
||||||
void resolveDependencies(bool checkOnly);
|
void resolveDependencies(bool checkOnly);
|
||||||
|
|
||||||
void remoteLoadSucceeded(size_t index);
|
void remoteLoadSucceeded(size_t index);
|
||||||
|
Loading…
Reference in New Issue
Block a user