From 17ff402de0e808df02516ec9ed7f04412917417b Mon Sep 17 00:00:00 2001 From: benjamin Date: Wed, 26 Aug 2026 01:16:38 +0200 Subject: [PATCH] Move update source to Gitea (git.beckm4nn.net) Releases API for the version check; the APK itself is served from the orphan 'apk' branch of the public repo (asset uploads need a token, raw files do not). Transitional GitHub release carries this change so existing installs hop over. Co-Authored-By: Claude Fable 5 --- README.md | 2 +- app/build.gradle.kts | 4 ++-- .../dev/castarr/tv/data/DispatcharrRepository.kt | 14 ++++++-------- .../java/dev/castarr/tv/update/UpdateChecker.kt | 11 +++++++++-- 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 88c28b9..ecfb362 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ resolved automatically (foojay) if the host only has a JRE. ``` APK output: `app/build/outputs/apk//`. Releases on the -[releases page](https://github.com/be-nj/castarr/releases) are signed; install +[releases page](https://git.beckm4nn.net/benjamin/castarr/releases) are signed; install over an existing debug build requires uninstalling first (signature change). ## Backend diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 1b6b82d..0bb4173 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -12,8 +12,8 @@ android { applicationId = "dev.castarr.tv" minSdk = 26 targetSdk = 35 - versionCode = 18 - versionName = "0.8.2" + versionCode = 19 + versionName = "0.8.3" } // Release signing from environment (see ~/.keys/castarr-release.env on the diff --git a/app/src/main/java/dev/castarr/tv/data/DispatcharrRepository.kt b/app/src/main/java/dev/castarr/tv/data/DispatcharrRepository.kt index d57f06f..9b95c2f 100644 --- a/app/src/main/java/dev/castarr/tv/data/DispatcharrRepository.kt +++ b/app/src/main/java/dev/castarr/tv/data/DispatcharrRepository.kt @@ -126,14 +126,12 @@ class DispatcharrRepository(context: Context, private val auth: DeviceAuth) { name = obj.optString("effective_name").ifEmpty { obj.optString("name") }, url = streamUrl(uuid), group = groups[obj.optInt("channel_group_id")].orEmpty(), - // logo-cache endpoint is AllowAny — loads without auth. - logo = obj.optJSONObject("logo")?.optString("cache_url").orEmpty().let { - when { - it.isEmpty() || it == "null" -> "" - it.startsWith("http") -> it - else -> auth.serverUrl.trimEnd('/') + it - } - }, + // The list serializer only carries logo ids; the + // cache endpoint serves the image without auth. + logo = (obj.optInt("effective_logo_id").takeIf { it > 0 } + ?: obj.optInt("logo_id").takeIf { it > 0 }) + ?.let { "${auth.serverUrl.trimEnd('/')}/api/channels/logos/$it/cache/" } + .orEmpty(), tvgId = obj.optString("effective_tvg_id").ifEmpty { obj.optString("tvg_id") }, backendId = id, streamKey = uuid, diff --git a/app/src/main/java/dev/castarr/tv/update/UpdateChecker.kt b/app/src/main/java/dev/castarr/tv/update/UpdateChecker.kt index d3bb52c..bbfa03c 100644 --- a/app/src/main/java/dev/castarr/tv/update/UpdateChecker.kt +++ b/app/src/main/java/dev/castarr/tv/update/UpdateChecker.kt @@ -13,11 +13,17 @@ import java.io.File import java.net.HttpURLConnection import java.net.URL -/** In-app updater over GitHub releases (#12). Explicit, never automatic. */ +/** In-app updater over Gitea releases (#12). Explicit, never automatic. */ object UpdateChecker { private const val TAG = "UpdateChecker" - private const val LATEST = "https://api.github.com/repos/be-nj/castarr/releases/latest" + private const val LATEST = + "https://git.beckm4nn.net/api/v1/repos/benjamin/castarr/releases/latest" + + // Release assets need an API token to upload, so the APK is served from + // an orphan branch instead — anonymously fetchable on a public repo. + private const val APK_FALLBACK = + "https://git.beckm4nn.net/benjamin/castarr/raw/branch/apk/castarr.apk" private var apkUrl: String = "" @@ -35,6 +41,7 @@ object UpdateChecker { break } } + if (url.isEmpty() && tag.isNotEmpty()) url = APK_FALLBACK if (url.isNotEmpty() && isNewer(tag, BuildConfig.VERSION_NAME)) { apkUrl = url val version = "v$tag"