Skip to content
This repository was archived by the owner on Dec 30, 2022. It is now read-only.

Commit b1faead

Browse files
committed
Use also the release date to determine differences in versions
Signed-off-by: DeathsGun <deathsgun@protonmail.com>
1 parent 4b92ec4 commit b1faead

File tree

4 files changed

+29
-5
lines changed

4 files changed

+29
-5
lines changed

src/main/kotlin/xyz/deathsgun/modmanager/api/mod/Version.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,12 @@
1616

1717
package xyz.deathsgun.modmanager.api.mod
1818

19+
import java.time.LocalDate
20+
1921
data class Version(
2022
val version: String,
2123
val changelog: String,
24+
val releaseDate: LocalDate,
2225
val type: VersionType,
2326
val gameVersions: List<String>,
2427
val assets: List<Asset>

src/main/kotlin/xyz/deathsgun/modmanager/providers/modrinth/Modrinth.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ import java.net.http.HttpClient
3939
import java.net.http.HttpRequest
4040
import java.net.http.HttpResponse
4141
import java.time.Duration
42+
import java.time.Instant
43+
import java.time.ZoneOffset
4244

4345
@OptIn(ExperimentalSerializationApi::class)
4446
class Modrinth : IModProvider, IModUpdateProvider {
@@ -211,6 +213,10 @@ class Modrinth : IModProvider, IModUpdateProvider {
211213
Version(
212214
modVersion.version,
213215
modVersion.changelog,
216+
// 2021-09-03T10:56:59.402790Z
217+
Instant.parse(modVersion.releaseDate).atOffset(
218+
ZoneOffset.UTC
219+
).toLocalDate(),
214220
getVersionType(modVersion.type),
215221
modVersion.gameVersions,
216222
assets

src/main/kotlin/xyz/deathsgun/modmanager/providers/modrinth/models/ModrinthVersion.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ data class ModrinthVersion(
2424
@SerialName("version_number")
2525
val version: String,
2626
val changelog: String,
27+
@SerialName("date_published")
28+
val releaseDate: String,
2729
@SerialName("version_type")
2830
val type: String,
2931
@SerialName("game_versions")

src/main/kotlin/xyz/deathsgun/modmanager/update/UpdateManager.kt

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ class UpdateManager {
136136
result = updateProvider.getVersionsForMod(mod.id)
137137
val versions = when (result) {
138138
is VersionResult.Error -> {
139-
logger.error("Error while getting versions for mod {}", metadata.id)
139+
logger.error("Error while getting versions for mod {}", metadata.id, result.cause)
140140
ModManager.modManager.setModState(metadata.id, mod.id, ModState.INSTALLED)
141141
return
142142
}
@@ -177,7 +177,7 @@ class UpdateManager {
177177
}
178178
val versions = when (val result = provider.getVersionsForMod(id)) {
179179
is VersionResult.Error -> {
180-
logger.error("Error while getting versions for mod {}", metadata.id)
180+
logger.error("Error while getting versions for mod {}", metadata.id, result.cause)
181181
ModManager.modManager.setModState(metadata.id, id, ModState.INSTALLED)
182182
return
183183
}
@@ -261,25 +261,38 @@ class UpdateManager {
261261
private fun findLatestCompatible(installedVersion: String, versions: List<Version>): Version? {
262262
var latest: Version? = null
263263
var latestVersion: SemanticVersion? = null
264+
var installed: Version? = null
264265
val installVersion =
265-
VersionDeserializer.deserializeSemantic(installedVersion.split("+")[0]) // Remove additional info from version
266+
VersionDeserializer.deserializeSemantic(installedVersion)
266267
for (version in versions) {
268+
if (version.version == installedVersion) {
269+
installed = version
270+
}
267271
if (!version.gameVersions.contains(ModManager.getMinecraftVersion()) ||
268272
!ModManager.modManager.config.isReleaseAllowed(version.type)
269273
) {
270274
continue
271275
}
272276
val ver = try {
273-
VersionDeserializer.deserializeSemantic(version.version.split("+")[0]) // Remove additional info from version
277+
VersionDeserializer.deserializeSemantic(version.version) // Remove additional info from version
274278
} catch (e: Exception) {
279+
if (latestVersion == null || version.releaseDate > latest?.releaseDate) {
280+
logger.info("Setting version {} via release date", version.version)
281+
latest = version
282+
latestVersion = null
283+
continue
284+
}
275285
logger.warn("Skipping error producing version {}", version.version)
276286
continue
277287
}
278-
if (latestVersion == null || ver > latestVersion) {
288+
if (latestVersion == null || ver > latestVersion || version.releaseDate > latest?.releaseDate) {
279289
latest = version
280290
latestVersion = ver
281291
}
282292
}
293+
if (installed != null && installed.releaseDate > latest?.releaseDate) {
294+
return null
295+
}
283296
if (latestVersion?.compareTo(installVersion) == 0) {
284297
return null
285298
}

0 commit comments

Comments
 (0)