@@ -23,9 +23,7 @@ import kotlinx.serialization.ExperimentalSerializationApi
2323import kotlinx.serialization.decodeFromString
2424import kotlinx.serialization.json.Json
2525import net.fabricmc.loader.api.FabricLoader
26- import net.fabricmc.loader.api.SemanticVersion
2726import net.fabricmc.loader.api.metadata.ModMetadata
28- import net.fabricmc.loader.util.version.VersionDeserializer
2927import net.minecraft.text.TranslatableText
3028import org.apache.commons.io.FileUtils
3129import org.apache.logging.log4j.LogManager
@@ -99,7 +97,12 @@ class UpdateManager {
9997 }
10098 var result = updateProvider.getVersionsForMod(metadata.id)
10199 if (result is VersionResult .Success ) {
102- val version = findLatestCompatible(metadata.version.friendlyString, result.versions)
100+ val version = VersionFinder .findUpdate(
101+ metadata.version.friendlyString,
102+ ModManager .getMinecraftVersion(),
103+ ModManager .modManager.config.updateChannel,
104+ result.versions
105+ )
103106 if (version == null ) {
104107 logger.info(" No update for {} found!" , metadata.id)
105108 ModManager .modManager.setModState(metadata.id, metadata.id, ModState .INSTALLED )
@@ -117,7 +120,12 @@ class UpdateManager {
117120
118121 val queryResult = provider.search(metadata.name, Sorting .RELEVANCE , 0 , 10 )
119122 if (queryResult is ModsResult .Error ) {
120- logger.warn(" Error while searching for fallback id for mod {}: " , metadata.id, queryResult.cause)
123+ logger.warn(
124+ " Error while searching for fallback id for mod {}: {}" ,
125+ metadata.id,
126+ queryResult.text.key,
127+ queryResult.cause
128+ )
121129 ModManager .modManager.setModState(metadata.id, metadata.id, ModState .INSTALLED )
122130 return
123131 }
@@ -136,13 +144,18 @@ class UpdateManager {
136144 result = updateProvider.getVersionsForMod(mod.id)
137145 val versions = when (result) {
138146 is VersionResult .Error -> {
139- logger.error(" Error while getting versions for mod {}" , metadata.id)
147+ logger.error(" Error while getting versions for mod {}" , metadata.id, result.cause )
140148 ModManager .modManager.setModState(metadata.id, mod.id, ModState .INSTALLED )
141149 return
142150 }
143151 is VersionResult .Success -> result.versions
144152 }
145- val version = findLatestCompatible(metadata.version.friendlyString, versions)
153+ val version = VersionFinder .findUpdate(
154+ metadata.version.friendlyString,
155+ ModManager .getMinecraftVersion(),
156+ ModManager .modManager.config.updateChannel,
157+ versions
158+ )
146159 if (version == null ) {
147160 logger.info(" No update for {} found!" , metadata.id)
148161 ModManager .modManager.setModState(metadata.id, mod.id, ModState .INSTALLED )
@@ -177,13 +190,18 @@ class UpdateManager {
177190 }
178191 val versions = when (val result = provider.getVersionsForMod(id)) {
179192 is VersionResult .Error -> {
180- logger.error(" Error while getting versions for mod {}" , metadata.id)
193+ logger.error(" Error while getting versions for mod {}" , metadata.id, result.cause )
181194 ModManager .modManager.setModState(metadata.id, id, ModState .INSTALLED )
182195 return
183196 }
184197 is VersionResult .Success -> result.versions
185198 }
186- val version = findLatestCompatible(metadata.version.friendlyString, versions)
199+ val version = VersionFinder .findUpdate(
200+ metadata.version.friendlyString,
201+ ModManager .getMinecraftVersion(),
202+ ModManager .modManager.config.updateChannel,
203+ versions
204+ )
187205 if (version == null ) {
188206 logger.info(" No update for {} found!" , metadata.id)
189207 ModManager .modManager.setModState(metadata.id, id, ModState .INSTALLED )
@@ -212,7 +230,12 @@ class UpdateManager {
212230 is VersionResult .Error -> return ModInstallResult .Error (result.text, result.cause)
213231 is VersionResult .Success -> result.versions
214232 }
215- val version = findLatestCompatible(" 0.0.0.0" , versions)
233+ val version = VersionFinder .findUpdate(
234+ " 0.0.0.0" ,
235+ ModManager .getMinecraftVersion(),
236+ ModManager .modManager.config.updateChannel,
237+ versions
238+ )
216239 ? : return ModInstallResult .Error (TranslatableText (" modmanager.error.noCompatibleModVersionFound" ))
217240
218241 val dir = FabricLoader .getInstance().gameDir.resolve(" mods" )
@@ -258,34 +281,6 @@ class UpdateManager {
258281 }
259282 }
260283
261- private fun findLatestCompatible (installedVersion : String , versions : List <Version >): Version ? {
262- var latest: Version ? = null
263- var latestVersion: SemanticVersion ? = null
264- val installVersion =
265- VersionDeserializer .deserializeSemantic(installedVersion.split(" +" )[0 ]) // Remove additional info from version
266- for (version in versions) {
267- if (! version.gameVersions.contains(ModManager .getMinecraftVersion()) ||
268- ! ModManager .modManager.config.isReleaseAllowed(version.type)
269- ) {
270- continue
271- }
272- val ver = try {
273- VersionDeserializer .deserializeSemantic(version.version.split(" +" )[0 ]) // Remove additional info from version
274- } catch (e: Exception ) {
275- logger.warn(" Skipping error producing version {}" , version.version)
276- continue
277- }
278- if (latestVersion == null || ver > latestVersion) {
279- latest = version
280- latestVersion = ver
281- }
282- }
283- if (latestVersion?.compareTo(installVersion) == 0 ) {
284- return null
285- }
286- return latest
287- }
288-
289284 fun updateMod (update : Update ): ModUpdateResult {
290285 val oldUpdate = FabricLoader .getInstance().allMods.find { it.metadata.id == update.fabricId }
291286 ? : return ModUpdateResult .Error (TranslatableText (" modmanager.error.container.notFound" ))
0 commit comments