Skip to content

Commit df23aa6

Browse files
committed
fix: Correct release page URL format for GitLab
1 parent 968f73c commit df23aa6

5 files changed

Lines changed: 26 additions & 20 deletions

File tree

app/src/main/java/app/morphe/manager/domain/bundles/RemotePatchBundle.kt

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import app.morphe.manager.network.service.HttpService
88
import app.morphe.manager.network.utils.getOrThrow
99
import app.morphe.manager.util.ChangelogEntry
1010
import app.morphe.manager.util.compareVersions
11+
import app.morphe.manager.util.releasePageUrl
1112
import io.ktor.client.request.header
1213
import io.ktor.client.request.prepareGet
1314
import io.ktor.client.request.url
@@ -361,14 +362,7 @@ class JsonPatchBundle(
361362
if (asset.pageUrl == null) {
362363
val repoUrl = inferPageUrlFromEndpoint(endpoint)
363364
val inferredPageUrl = if (repoUrl != null && asset.version.isNotBlank()) {
364-
// Normalize version to ensure it starts with 'v'
365-
val normalizedVersion = if (asset.version.startsWith("v")) asset.version else "v${asset.version}"
366-
// Create proper release page URL:
367-
// GitHub: https://github.com/owner/repo/releases/tag/v1.0.0-dev.1
368-
// GitLab: https://gitlab.com/owner/repo/-/releases/v1.0.0-dev.1
369-
val isGitLab = endpoint.contains("gitlab.com", ignoreCase = true)
370-
if (isGitLab) "$repoUrl/-/releases/$normalizedVersion"
371-
else "$repoUrl/releases/tag/$normalizedVersion"
365+
releasePageUrl(repoUrl, asset.version)
372366
} else {
373367
// Fallback to repository URL if version is missing
374368
repoUrl

app/src/main/java/app/morphe/manager/network/api/MorpheAPI.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ class MorpheAPI(
156156
downloadUrl = asset.downloadUrl,
157157
createdAt = parseTimestamp(timestamp),
158158
signatureDownloadUrl = findSignatureUrl(release, asset),
159-
pageUrl = "${config.htmlUrl}/releases/tag/${release.tagName}",
159+
pageUrl = releasePageUrl(config.htmlUrl, release.tagName),
160160
description = release.body?.ifBlank { release.name.orEmpty() } ?: release.name.orEmpty(),
161161
version = release.tagName
162162
)
@@ -171,7 +171,7 @@ class MorpheAPI(
171171
downloadUrl = releaseInfo.downloadUrl,
172172
createdAt = parseTimestamp(releaseInfo.createdAt),
173173
signatureDownloadUrl = releaseInfo.signatureDownloadUrl,
174-
pageUrl = "${config.htmlUrl}/releases/tag/$version",
174+
pageUrl = releasePageUrl(config.htmlUrl, version),
175175
description = releaseInfo.description,
176176
version = version
177177
)
@@ -187,7 +187,7 @@ class MorpheAPI(
187187
createdAt = parseTimestamp(releaseInfo.createdAt),
188188
// Treat empty string the same as absent — some JSON files emit ""
189189
signatureDownloadUrl = releaseInfo.signatureDownloadUrl?.ifBlank { null },
190-
pageUrl = "${config.htmlUrl}/releases/tag/$version",
190+
pageUrl = releasePageUrl(config.htmlUrl, version),
191191
description = releaseInfo.description,
192192
version = version
193193
)

app/src/main/java/app/morphe/manager/ui/screen/home/SourceManagementDialogs.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ import android.annotation.SuppressLint
99
import android.graphics.Color.argb
1010
import android.graphics.Color.colorToHSV
1111
import android.net.Uri
12-
import androidx.compose.animation.*
12+
import androidx.compose.animation.AnimatedContent
13+
import androidx.compose.animation.AnimatedVisibility
14+
import androidx.compose.animation.ExperimentalAnimationApi
1315
import androidx.compose.animation.core.animateFloatAsState
1416
import androidx.compose.animation.core.spring
1517
import androidx.compose.animation.core.tween
@@ -1175,9 +1177,7 @@ fun BundleChangelogDialog(
11751177
else -> RemotePatchBundle.inferPageUrlFromEndpoint(src.endpoint)
11761178
}
11771179
val latestPageUrl = entries.firstOrNull()?.version?.let { version ->
1178-
val tag = if (version.startsWith("v")) version else "v$version"
1179-
val url = repoUrl?.let { "$it/releases/tag/$tag" }
1180-
url
1180+
repoUrl?.let { releasePageUrl(it, version) }
11811181
}
11821182

11831183
if (entries.isNotEmpty()) {

app/src/main/java/app/morphe/manager/ui/screen/settings/system/ChangelogDialog.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@ import androidx.compose.runtime.LaunchedEffect
1313
import androidx.compose.ui.Modifier
1414
import androidx.compose.ui.res.stringResource
1515
import app.morphe.manager.R
16-
import app.morphe.manager.util.MANAGER_REPO_URL
1716
import app.morphe.manager.ui.screen.shared.*
1817
import app.morphe.manager.ui.viewmodel.UpdateViewModel
18+
import app.morphe.manager.util.MANAGER_REPO_URL
19+
import app.morphe.manager.util.releasePageUrl
1920

2021
/**
2122
* Changelog dialog.
@@ -40,10 +41,7 @@ fun ChangelogDialog(
4041
footer = {
4142
MorpheDialogButtonColumn {
4243
ChangelogButton(
43-
pageUrl = entry?.version?.let {
44-
val tag = if (it.startsWith("v")) it else "v$it"
45-
"$MANAGER_REPO_URL/releases/tag/$tag"
46-
},
44+
pageUrl = entry?.version?.let { releasePageUrl(MANAGER_REPO_URL, it) },
4745
modifier = Modifier.fillMaxWidth()
4846
)
4947
MorpheDialogButton(

app/src/main/java/app/morphe/manager/util/VersionUtils.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,3 +82,17 @@ fun compareVersions(v1: String?, v2: String?): Int {
8282
fun isNewerVersion(oldVersion: String?, newVersion: String?): Boolean {
8383
return compareVersions(oldVersion, newVersion) < 0
8484
}
85+
86+
/**
87+
* Builds a release page URL for [version] in [repoUrl].
88+
*
89+
* GitHub uses `/releases/tag/<version>`, GitLab uses `/-/releases/<version>`.
90+
* [version] is normalized to include a `v` prefix if absent.
91+
*/
92+
fun releasePageUrl(repoUrl: String, version: String): String {
93+
val normalized = if (version.startsWith("v")) version else "v$version"
94+
return if (repoUrl.contains("gitlab.com", ignoreCase = true))
95+
"$repoUrl/-/releases/$normalized"
96+
else
97+
"$repoUrl/releases/tag/$normalized"
98+
}

0 commit comments

Comments
 (0)