From 3b54e5cabaf3efe0c331d56423a59a72a4b19ff3 Mon Sep 17 00:00:00 2001 From: kalzEOS <49320606+kalzEOS@users.noreply.github.com> Date: Sun, 17 May 2026 15:25:10 -0400 Subject: [PATCH 1/2] Fix series parent fallback and release safety validation --- .github/workflows/release-safety.yml | 39 +++++++++++++------ .../example/xtreamplayer/MainActivityUi.kt | 14 +++++-- 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/.github/workflows/release-safety.yml b/.github/workflows/release-safety.yml index b1708c0..9404754 100644 --- a/.github/workflows/release-safety.yml +++ b/.github/workflows/release-safety.yml @@ -7,42 +7,59 @@ on: jobs: validate-release: runs-on: ubuntu-latest + permissions: + contents: read steps: - name: Checkout uses: actions/checkout@v4 + - name: Fetch Release Data + id: release + env: + GITHUB_TOKEN: ${{ github.token }} + TAG_NAME: ${{ github.event.release.tag_name }} + run: | + set -euo pipefail + release_json="$(mktemp)" + curl -fsSL \ + -H "Authorization: Bearer ${GITHUB_TOKEN}" \ + -H "Accept: application/vnd.github+json" \ + "https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/tags/${TAG_NAME}" \ + -o "${release_json}" + echo "release_json=${release_json}" >> "${GITHUB_OUTPUT}" + - name: Validate Metadata env: TAG_NAME: ${{ github.event.release.tag_name }} - RELEASE_TITLE: ${{ github.event.release.name }} - RELEASE_NOTES: ${{ github.event.release.body }} - IS_PRERELEASE: ${{ github.event.release.prerelease }} - TARGET_BRANCH: ${{ github.event.release.target_commitish }} + RELEASE_JSON: ${{ steps.release.outputs.release_json }} run: | set -euo pipefail - title="${RELEASE_TITLE:-${TAG_NAME}}" notes_file="$(mktemp)" - printf '%s\n' "${RELEASE_NOTES}" > "${notes_file}" + title="$(jq -r '.name // empty' "${RELEASE_JSON}")" + jq -r '.body // empty' "${RELEASE_JSON}" > "${notes_file}" + prerelease="$(jq -r '.prerelease' "${RELEASE_JSON}")" + target_branch="$(jq -r '.target_commitish // empty' "${RELEASE_JSON}")" + title="${title:-${TAG_NAME}}" ./scripts/validate_release_metadata.sh \ "${TAG_NAME}" \ "${title}" \ "${notes_file}" \ - "${IS_PRERELEASE}" \ - "${TARGET_BRANCH}" + "${prerelease}" \ + "${target_branch}" - name: Validate Release Assets env: TAG_NAME: ${{ github.event.release.tag_name }} - IS_PRERELEASE: ${{ github.event.release.prerelease }} + RELEASE_JSON: ${{ steps.release.outputs.release_json }} run: | set -euo pipefail version="${TAG_NAME#XtreamPlayerv}" - apk_count="$(jq '[.release.assets[] | select(.name | endswith(".apk"))] | length' "${GITHUB_EVENT_PATH}")" + apk_count="$(jq '[.assets[] | select(.name | endswith(".apk"))] | length' "${RELEASE_JSON}")" if [[ "${apk_count}" -lt 1 ]]; then echo "Release must include at least one APK asset." exit 1 fi - bad_assets="$(jq -r '.release.assets[] | .name' "${GITHUB_EVENT_PATH}" | awk -v v="${version}" 'index($0, v)==0')" + bad_assets="$(jq -r '.assets[] | .name' "${RELEASE_JSON}" | awk -v v="${version}" 'index($0, v)==0')" if [[ -n "${bad_assets}" ]]; then echo "Every release asset name must include version ${version}." echo "${bad_assets}" diff --git a/app/src/main/java/com/example/xtreamplayer/MainActivityUi.kt b/app/src/main/java/com/example/xtreamplayer/MainActivityUi.kt index f49c316..ad64f1f 100644 --- a/app/src/main/java/com/example/xtreamplayer/MainActivityUi.kt +++ b/app/src/main/java/com/example/xtreamplayer/MainActivityUi.kt @@ -8844,19 +8844,25 @@ fun ContinueWatchingScreen( val stableParentId = resumeItem.parentSeriesId?.takeUnless { it.isBlank() } if (!stableParentId.isNullOrBlank()) { contentRepository.findSeriesItemById(stableParentId, authConfig) + ?: resolveSeriesParentByTitle(contentRepository, authConfig, resumeItem) } else { resolveSeriesParentByTitle(contentRepository, authConfig, resumeItem) } } - LaunchedEffect(displayEntries, authConfig) { - displayEntries + LaunchedEffect(continueWatchingItems, authConfig) { + val currentKeys = continueWatchingItems.asSequence().map { it.key }.toSet() + resolvedParents.keys + .filterNot { it in currentKeys } + .toList() + .forEach { resolvedParents.remove(it) } + continueWatchingItems .filter { entry -> - entry.resumeItem.contentType == ContentType.SERIES && entry.parentItem == null && + entry.item.contentType == ContentType.SERIES && entry.parentItem == null && !resolvedParents.containsKey(entry.key) } .forEach { entry -> - val resolved = resolveSeriesParent(entry.resumeItem) + val resolved = resolveSeriesParent(entry.item) if (resolved != null) { resolvedParents[entry.key] = resolved } From cbb453d3a2f6858c3df481388cd42206bcca3058 Mon Sep 17 00:00:00 2001 From: kalzEOS <49320606+kalzEOS@users.noreply.github.com> Date: Sun, 17 May 2026 15:38:35 -0400 Subject: [PATCH 2/2] Bump release version to 3.4.7 --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 6b4392f..b91a03d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -3,8 +3,8 @@ import java.util.Properties import org.gradle.api.provider.Property import org.jetbrains.kotlin.gradle.dsl.JvmTarget -val appVersionCode = 142 -val appVersionName = "3.4.6" +val appVersionCode = 143 +val appVersionName = "3.4.7" plugins { alias(libs.plugins.android.application)