From b206041146d715fec68f68c5bcf3b255489d2e45 Mon Sep 17 00:00:00 2001 From: rushiiMachine <33725716+rushiiMachine@users.noreply.github.com> Date: Sun, 9 Feb 2025 13:08:44 -0800 Subject: [PATCH] feat: transition aliuhook versioning to semver --- .../domain/repository/AliucordMavenRepository.kt | 12 +++++++----- .../com/aliucord/manager/manager/PathManager.kt | 2 +- .../aliucord/manager/network/service/MavenService.kt | 9 --------- .../com/aliucord/manager/patcher/InstallMetadata.kt | 2 +- .../patcher/steps/download/DownloadAliuhookStep.kt | 5 +++-- 5 files changed, 12 insertions(+), 18 deletions(-) diff --git a/app/src/main/kotlin/com/aliucord/manager/domain/repository/AliucordMavenRepository.kt b/app/src/main/kotlin/com/aliucord/manager/domain/repository/AliucordMavenRepository.kt index 71f84a7..ac144f4 100644 --- a/app/src/main/kotlin/com/aliucord/manager/domain/repository/AliucordMavenRepository.kt +++ b/app/src/main/kotlin/com/aliucord/manager/domain/repository/AliucordMavenRepository.kt @@ -7,12 +7,15 @@ import io.ktor.http.HttpStatusCode class AliucordMavenRepository( private val maven: MavenService, ) { - suspend fun getAliuhookVersion(): ApiResponse { + suspend fun getAliuhookVersion(): ApiResponse { return maven.getArtifactMetadata(BASE_URL, ALIUHOOK).transform { - "(.+?)".toRegex() + val versionString = "(.+?)".toRegex() .find(it) ?.groupValues?.get(1) ?: return ApiResponse.Error(ApiError(HttpStatusCode.OK, "No version in the aliuhook artifact metadata")) + + SemVer.parseOrNull(versionString) + ?: return ApiResponse.Error(ApiError(HttpStatusCode.OK, "Invalid latest aliuhook version!")) } } @@ -20,8 +23,7 @@ class AliucordMavenRepository( private const val BASE_URL = "https://maven.aliucord.com/snapshots" private const val ALIUHOOK = "com.aliucord:Aliuhook" - fun getAliuhookUrl(version: String): String { - return MavenService.getAARUrl(BASE_URL, "$ALIUHOOK:$version") - } + fun getAliuhookUrl(version: String): String = + "$BASE_URL/com/aliucord/Aliuhook/$version/Aliuhook-$version.aar" } } diff --git a/app/src/main/kotlin/com/aliucord/manager/manager/PathManager.kt b/app/src/main/kotlin/com/aliucord/manager/manager/PathManager.kt index aca9ed7..82494af 100644 --- a/app/src/main/kotlin/com/aliucord/manager/manager/PathManager.kt +++ b/app/src/main/kotlin/com/aliucord/manager/manager/PathManager.kt @@ -71,7 +71,7 @@ class PathManager(context: Context) { /** * Resolve a specific path for a versioned cached Aliuhook build */ - fun cachedAliuhookAAR(version: String) = externalCacheDir + fun cachedAliuhookAAR(version: SemVer) = externalCacheDir .resolve("aliuhook").apply { mkdirs() } .resolve("$version.aar") diff --git a/app/src/main/kotlin/com/aliucord/manager/network/service/MavenService.kt b/app/src/main/kotlin/com/aliucord/manager/network/service/MavenService.kt index 6ed3714..3df944b 100644 --- a/app/src/main/kotlin/com/aliucord/manager/network/service/MavenService.kt +++ b/app/src/main/kotlin/com/aliucord/manager/network/service/MavenService.kt @@ -14,13 +14,4 @@ class MavenService( url("$baseUrl/${coords}/maven-metadata.xml") } } - - companion object { - fun getAARUrl(baseUrl: String, coords: String): String { - val parts = coords.split("[:.]".toRegex()) - val artifact = parts[parts.lastIndex - 1] - val version = parts.last() - return "$baseUrl/${parts.joinToString("/")}/$artifact-$version.aar" - } - } } diff --git a/app/src/main/kotlin/com/aliucord/manager/patcher/InstallMetadata.kt b/app/src/main/kotlin/com/aliucord/manager/patcher/InstallMetadata.kt index 40806fe..46df4cc 100644 --- a/app/src/main/kotlin/com/aliucord/manager/patcher/InstallMetadata.kt +++ b/app/src/main/kotlin/com/aliucord/manager/patcher/InstallMetadata.kt @@ -27,7 +27,7 @@ data class InstallMetadata( /** * Version (commit hash) of the Aliuhook build that was injected into the APK. */ - val aliuhookVersion: String, + val aliuhookVersion: SemVer, /** * Version of the injector build that was injected into the APK. diff --git a/app/src/main/kotlin/com/aliucord/manager/patcher/steps/download/DownloadAliuhookStep.kt b/app/src/main/kotlin/com/aliucord/manager/patcher/steps/download/DownloadAliuhookStep.kt index 12ab8a7..2086c4c 100644 --- a/app/src/main/kotlin/com/aliucord/manager/patcher/steps/download/DownloadAliuhookStep.kt +++ b/app/src/main/kotlin/com/aliucord/manager/patcher/steps/download/DownloadAliuhookStep.kt @@ -4,6 +4,7 @@ import androidx.compose.runtime.Stable import com.aliucord.manager.R import com.aliucord.manager.domain.repository.AliucordMavenRepository import com.aliucord.manager.manager.PathManager +import com.aliucord.manager.network.utils.SemVer import com.aliucord.manager.network.utils.getOrThrow import com.aliucord.manager.patcher.StepRunner import com.aliucord.manager.patcher.steps.base.DownloadStep @@ -25,11 +26,11 @@ class DownloadAliuhookStep : DownloadStep(), IDexProvider, KoinComponent { /** * This is populated right before the download starts (ref: [execute]) */ - lateinit var targetVersion: String + lateinit var targetVersion: SemVer private set override val localizedName = R.string.patch_step_dl_aliuhook - override val targetUrl get() = AliucordMavenRepository.getAliuhookUrl(targetVersion) + override val targetUrl get() = AliucordMavenRepository.getAliuhookUrl(targetVersion.toString()) override val targetFile get() = paths.cachedAliuhookAAR(targetVersion) override suspend fun execute(container: StepRunner) {