diff --git a/src/main/java/net/ornithemc/meta/data/VersionDatabase.java b/src/main/java/net/ornithemc/meta/data/VersionDatabase.java index 04cb224..1acf83b 100644 --- a/src/main/java/net/ornithemc/meta/data/VersionDatabase.java +++ b/src/main/java/net/ornithemc/meta/data/VersionDatabase.java @@ -59,8 +59,6 @@ public class VersionDatabase { public static final MavenMetadataParser FABRIC_LOADER_METADATA_PARSER = new MavenMetadataParser(FABRIC_MAVEN_URL, "net.fabricmc", "fabric-loader"); public static final MavenMetadataParser QUILT_LOADER_METADATA_PARSER = new MavenMetadataParser(QUILT_MAVEN_URL, "org.quiltmc", "quilt-loader"); public static final MavenMetadataParser INSTALLER_METADATA_PARSER = new MavenMetadataParser(ORNITHE_MAVEN_URL, "net.ornithemc", "ornithe-installer"); - public static final MavenMetadataParser OSL_METADATA_PARSER = new MavenMetadataParser(ORNITHE_MAVEN_URL, "net.ornithemc", "osl"); - public static final MavenPomParser OSL_POM_PARSER = new MavenPomParser(ORNITHE_MAVEN_URL, "net.ornithemc", "osl"); private static final Pattern INVALID_FABRIC_LOADER_VERSIONS_GEN2 = Pattern.compile("^(?:0\\.(?:\\d|1[0-6])\\..+|0\\.17\\.[0-2])"); private static final Pattern INVALID_QUILT_LOADER_VERSIONS_GEN2 = Pattern.compile("^(?:0\\.(?:\\d|1\\d|2[0-8])\\..+|0\\.29\\.[0-2])"); @@ -75,6 +73,10 @@ private static final MavenMetadataParser generationalMavenMetadataParser(int gen return new MavenMetadataParser(ORNITHE_MAVEN_URL, groupId, modifyForIntermediaryGeneration(artifactId, generation), generation <= config.stableIntermediaryGeneration); } + private static final MavenPomParser generationalMavenPomParser(int generation, String groupId, String artifactId) { + return new MavenPomParser(ORNITHE_MAVEN_URL, groupId, modifyForIntermediaryGeneration(artifactId, generation), generation <= config.stableIntermediaryGeneration); + } + public static final MavenMetadataParser intermediaryMetadataParser(int generation) { return generationalMavenMetadataParser(generation, "net.ornithemc", "calamus-intermediary"); } @@ -83,8 +85,16 @@ public static final MavenMetadataParser featherMetadataParser(int generation) { return generationalMavenMetadataParser(generation, "net.ornithemc", "feather"); } - public static final MavenMetadataParser oslModuleMetadataParser(String module) { - return new MavenMetadataParser(ORNITHE_MAVEN_URL, "net.ornithemc.osl", module); + public static final MavenMetadataParser oslMetadataParser(int generation) { + return generationalMavenMetadataParser(generation, "net.ornithemc", "osl"); + } + + public static final MavenPomParser oslPomParser(int generation) { + return generationalMavenPomParser(generation, "net.ornithemc", "osl"); + } + + public static final MavenMetadataParser oslModuleMetadataParser(int generation, String module) { + return new MavenMetadataParser(ORNITHE_MAVEN_URL, modifyForIntermediaryGeneration("net.ornithemc.osl", generation), module, generation <= config.stableIntermediaryGeneration); } public static Pattern invalidLoaderVersionsPattern(LoaderType loaderType) { @@ -115,11 +125,11 @@ public static StableVersionIdentifier filterLoaderVersions(int generation, Loade }; } - private static List oslModules() { + private static List oslModules(int generation) { List modules = new ArrayList<>(); try { - URL url = new URL(ORNITHE_MAVEN_DETAILS_URL + "net/ornithemc/osl"); + URL url = new URL(modifyForIntermediaryGeneration(ORNITHE_MAVEN_DETAILS_URL + "net/ornithemc/osl", generation)); try (InputStreamReader input = new InputStreamReader(url.openStream())) { JsonNode json = OrnitheMeta.MAPPER.readTree(input); @@ -156,15 +166,15 @@ private static List oslModules() { private final Int2ObjectMap> game; private final Int2ObjectMap> intermediary; private final Int2ObjectMap> feather; + private final Int2ObjectMap> osl; + private final Int2ObjectMap>> oslDependencies; + private final Int2ObjectMap>> oslModules; private final Int2ObjectMap>> loader; - private final Map> oslDependencies; - private final Map> oslModules; public List raven; public List sparrow; public List nests; public List installer; - public List osl; public List libraryUpgrades; private VersionDatabase() { @@ -172,9 +182,10 @@ private VersionDatabase() { this.game = new Int2ObjectOpenHashMap<>(); this.intermediary = new Int2ObjectOpenHashMap<>(); this.feather = new Int2ObjectOpenHashMap<>(); + this.osl = new Int2ObjectOpenHashMap<>(); + this.oslDependencies = new Int2ObjectOpenHashMap<>(); + this.oslModules = new Int2ObjectOpenHashMap<>(); this.loader = new Int2ObjectOpenHashMap<>(); - this.oslDependencies = new HashMap<>(); - this.oslModules = new HashMap<>(); } public static VersionDatabase generate() throws Exception { @@ -184,6 +195,15 @@ public static VersionDatabase generate() throws Exception { for (int generation = 1; generation <= config.latestIntermediaryGeneration; generation++) { database.intermediary.put(generation, intermediaryMetadataParser(generation).getVersions(MavenVersion::new)); database.feather.put(generation, featherMetadataParser(generation).getVersions(MavenBuildGameVersion::new)); + database.osl.put(generation, oslMetadataParser(generation).getVersions(MavenVersion::new)); + for (MavenVersion version : database.osl.get(generation)) { + database.oslDependencies.computeIfAbsent(generation, key -> new HashMap<>()).put(version.getVersion(), oslPomParser(generation).getDependencies(MavenVersion::new, version.getVersion(), v -> { + return v.getMaven().startsWith("net.ornithemc.osl"); + })); + } + for (String module : oslModules(generation)) { + database.oslModules.computeIfAbsent(generation, key -> new HashMap<>()).put(module, oslModuleMetadataParser(generation, module).getVersions(MavenVersion::new)); + } database.loader.put(generation, new EnumMap<>(LoaderType.class)); database.loader.get(generation).put(LoaderType.FABRIC, FABRIC_LOADER_METADATA_PARSER.getVersions(MavenBuildVersion::new, filterLoaderVersions(generation, LoaderType.FABRIC))); database.loader.get(generation).put(LoaderType.QUILT, QUILT_LOADER_METADATA_PARSER.getVersions(MavenBuildVersion::new, filterLoaderVersions(generation, LoaderType.QUILT))); @@ -192,15 +212,6 @@ public static VersionDatabase generate() throws Exception { database.sparrow = SPARROW_METADATA_PARSER.getVersions(MavenBuildGameVersion::new); database.nests = NESTS_METADATA_PARSER.getVersions(MavenBuildGameVersion::new); database.installer = INSTALLER_METADATA_PARSER.getVersions(MavenUrlVersion::new); - database.osl = OSL_METADATA_PARSER.getVersions(MavenVersion::new); - for (MavenVersion version : database.osl) { - database.oslDependencies.put(version.getVersion(), OSL_POM_PARSER.getDependencies(MavenVersion::new, version.getVersion(), v -> { - return v.getMaven().startsWith("net.ornithemc.osl"); - })); - } - for (String module : oslModules()) { - database.oslModules.put(module, oslModuleMetadataParser(module).getVersions(MavenVersion::new)); - } database.libraryUpgrades = LibraryUpgradesV3.get(); database.loadMcData(); OrnitheMeta.LOGGER.info("DB update took {}ms", System.currentTimeMillis() - start); @@ -317,16 +328,20 @@ public List getFeather(int generation) { return feather.get(generation); } - public List getLoader(int generation, LoaderType type) { - return loader.get(generation).get(type).stream().filter(v -> isPublicLoaderVersion(type, v)).collect(Collectors.toList()); + public List getOsl(int generation) { + return osl.get(generation); } - public List getOslDependencies(String version) { - return oslDependencies.get(version); + public List getOslDependencies(int generation, String version) { + return oslDependencies.get(generation).get(version); } - public List getOslModule(String module) { - return oslModules.get(module); + public List getOslModule(int generation, String module) { + return oslModules.get(generation).get(module); + } + + public List getLoader(int generation, LoaderType type) { + return loader.get(generation).get(type).stream().filter(v -> isPublicLoaderVersion(type, v)).collect(Collectors.toList()); } public List getAllLoader(int generation, LoaderType type) { diff --git a/src/main/java/net/ornithemc/meta/web/EndpointsV3.java b/src/main/java/net/ornithemc/meta/web/EndpointsV3.java index bc0be95..0f29528 100644 --- a/src/main/java/net/ornithemc/meta/web/EndpointsV3.java +++ b/src/main/java/net/ornithemc/meta/web/EndpointsV3.java @@ -85,10 +85,10 @@ public static void setup() { jsonGet("/installer", context -> withLimitSkip(context, OrnitheMeta.database.installer)); - jsonGet("/osl", context -> withLimitSkip(context, OrnitheMeta.database.osl)); - jsonGet("/osl/:version", context -> withLimitSkip(context, getOslDependencyInfo(context))); - jsonGet("/osl/:module/:game_version", context -> withLimitSkip(context, getOslModuleInfo(context))); - jsonGet("/osl/:module/:game_version/:base_version", context -> withLimitSkip(context, getOslModuleInfo(context))); + jsonGetF("/osl", generation -> context -> withLimitSkip(context, OrnitheMeta.database.getOsl(generation))); + jsonGetF("/osl/:version", generation -> context -> withLimitSkip(context, getOslDependencyInfo(context, generation))); + jsonGetF("/osl/:module/:game_version", generation -> context -> withLimitSkip(context, getOslModuleInfo(context, generation))); + jsonGetF("/osl/:module/:game_version/:base_version", generation -> context -> withLimitSkip(context, getOslModuleInfo(context, generation))); ProfileHandlerV3.setup(); } @@ -238,18 +238,18 @@ private static List compatibleGameVersions( return versions; } - private static List getOslDependencyInfo(Context context) { + private static List getOslDependencyInfo(Context context, int generation) { if (!context.pathParamMap().containsKey("version")) { return null; } String version = context.pathParam("version"); - List versions = OrnitheMeta.database.getOslDependencies(version); + List versions = OrnitheMeta.database.getOslDependencies(generation, version); return versions; } - private static List getOslModuleInfo(Context context) { + private static List getOslModuleInfo(Context context, int generation) { if (!context.pathParamMap().containsKey("module")) { return null; } @@ -265,7 +265,7 @@ private static List getOslModuleInfo(Context context) { return null; } - List versions = OrnitheMeta.database.getOslModule(module); + List versions = OrnitheMeta.database.getOslModule(generation, module); if (context.pathParamMap().containsKey("base_version")) { String baseVersion = context.pathParam("base_version");