From 3d6f8bae1a8237bb4f67eceea6d1e3ef4f7bdef8 Mon Sep 17 00:00:00 2001 From: justinzeus Date: Thu, 22 Oct 2026 12:45:29 +0200 Subject: [PATCH 01/26] Add pinned container builds and Wolfskin release signing --- Makefile | 21 +++++++ docker/Dockerfile | 17 ++++++ docker/README.md | 93 +++++++++++++++++++++++++++++++ docker/gradle.sh | 33 +++++++++++ docker/release-signing.properties | 1 + docker/release-tag.sh | 18 ++++++ docker/signing.init.gradle | 17 ++++++ 7 files changed, 200 insertions(+) create mode 100644 Makefile create mode 100644 docker/Dockerfile create mode 100644 docker/README.md create mode 100755 docker/gradle.sh create mode 100644 docker/release-signing.properties create mode 100755 docker/release-tag.sh create mode 100644 docker/signing.init.gradle diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..0f2d2017 --- /dev/null +++ b/Makefile @@ -0,0 +1,21 @@ +.DEFAULT_GOAL := apk +WOLFSKIN_BUILD_IMAGE ?= wolfskin-build:sdk37-jdk21 +WOLFSKIN_GRADLE_VOLUME ?= wolfskin-gradle +WOLFSKIN_SECRETS_DIR ?= /opt/stacks/ventoy/machine-parity/manifest-tank/secrets/wolfskin +export WOLFSKIN_BUILD_IMAGE WOLFSKIN_GRADLE_VOLUME WOLFSKIN_SECRETS_DIR + +.PHONY: build-image apk apk-debug test release-tag +build-image: + docker build --platform linux/amd64 --tag "$(WOLFSKIN_BUILD_IMAGE)" docker + +apk: build-image + @bash docker/gradle.sh release clean assembleDefaultRelease + +apk-debug: build-image + @bash docker/gradle.sh debug assembleDefaultDebug + +test: build-image + @bash docker/gradle.sh release testDefaultReleaseUnitTest + +release-tag: + @bash docker/release-tag.sh diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 00000000..bae48a77 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,17 @@ +FROM eclipse-temurin:21.0.11_10-jdk-jammy@sha256:dbfd085220ae632a0830166e443747d1ee89e9038d92e3b48c3e5e9d8292b9a7 + +RUN apt-get update && apt-get install -y --no-install-recommends git unzip \ + && rm -rf /var/lib/apt/lists/* +ENV ANDROID_HOME=/opt/android-sdk ANDROID_SDK_ROOT=/opt/android-sdk +ENV PATH="/opt/android-sdk/cmdline-tools/23.0/bin:/opt/android-sdk/build-tools/36.0.0:${PATH}" +RUN curl -fsSL https://dl.google.com/android/repository/commandlinetools-linux-16111833_latest.zip -o /tmp/tools.zip \ + && echo 'e025545c62a8e64c7559119566a569fb1dec5f60 /tmp/tools.zip' | sha1sum -c - \ + && mkdir -p "$ANDROID_HOME/cmdline-tools" \ + && unzip -q /tmp/tools.zip -d /tmp/android-tools \ + && mv /tmp/android-tools/cmdline-tools "$ANDROID_HOME/cmdline-tools/23.0" \ + && rm -rf /tmp/tools.zip /tmp/android-tools \ + && yes | sdkmanager --licenses >/dev/null \ + && sdkmanager 'platforms;android-37.0' 'build-tools;36.0.0' \ + && mkdir -m 1777 /gradle +ENV GRADLE_USER_HOME=/gradle HOME=/tmp +COPY signing.init.gradle /opt/wolfskin/signing.init.gradle diff --git a/docker/README.md b/docker/README.md new file mode 100644 index 00000000..5b56071c --- /dev/null +++ b/docker/README.md @@ -0,0 +1,93 @@ +# Wolfskin TV container builds + +Run from a full Git checkout with the upstream `v*` and `p*` tags available. The +host needs Docker, GNU Make, Bash, and Git, not Java or the Android SDK. + +```sh +git fetch origin --tags +make apk # clean, signed default release: three ABI splits + universal +make test # upstream testDefaultReleaseUnitTest in the same image +make apk-debug # default debug, no secrets; MPV stub and no extra codec decoders +``` + +APKs remain under `app/build/outputs/apk/default/{release,debug}/`. Debug builds +are not playback-complete and must not be distributed as releases. Upstream's +`.github/workflows` and dependency version catalog are unchanged; release builds +use the catalog's exact Wholphin extension version (currently `0.2.4`). Do not +place local extension AARs in `app/libs`: upstream prefers them over the pinned +GitHub Packages dependencies. + +## Toolchain and disk use + +`Dockerfile` pins Temurin JDK `21.0.11+10` by image digest, Android command-line +tools `23.0` by archive and checksum, SDK platform `37.0`, and build-tools +`36.0.0`. Gradle comes from the committed wrapper. The image is built for +`linux/amd64`; the default local image tag is `wolfskin-build:sdk37-jdk21`. +Upstream's build timestamp means APKs are not byte-for-byte reproducible. + +Gradle downloads and caches live in the named volume `wolfskin-gradle`, not +`/tmp`. Module outputs stay in the checkout. Builds run with the host UID/GID, +`--no-daemon`, and at most four workers. The repository's Git metadata is mounted +read-only, including when the checkout is a linked worktree. + +Override `WOLFSKIN_BUILD_IMAGE` to change the locally built image tag and +`WOLFSKIN_GRADLE_VOLUME` to isolate a cache. `make build-image` builds only the +image. Do not delete shared caches during another build. + +## Release credentials + +The default escrow is +`/opt/stacks/ventoy/machine-parity/manifest-tank/secrets/wolfskin/`. Check +`mountpoint -q /mnt/ventoy` before using that path. Set `WOLFSKIN_SECRETS_DIR` +to use another existing directory. Its required files are: + +| File | Contents | +| --- | --- | +| `release.jks` | Separate Wolfskin PKCS12 keystore, RSA 4096, alias `wolfskin` | +| `release.properties` | Java properties `storePassword` and `keyPassword` | +| `github-packages-token` | GitHub token with `read:packages`, username `JustinZeus` | + +The directory must be mode `0700`, each file mode `0600`, owned by the building +user. Never commit them or put their contents in logs. Back up the keystore and +passwords together: losing the release key forces a reinstall. Do not reuse +wolfskin-android's key or the gh CLI login token. + +Release builds mount escrow read-only. The token is loaded inside the container +into upstream's `ORG_GRADLE_PROJECT_WholphinExtensionsUsername` and +`ORG_GRADLE_PROJECT_WholphinExtensionsPassword` environment hooks, never a Docker +command argument. The signing init script registers `wolfskin`; the nonsecret +`release-signing.properties` is mounted as `local.properties` so upstream's +`release.signing.config` hook selects it. Any host `local.properties` is hidden +only for the duration of this container. Keystore and passwords stay outside the +checkout and image. Missing credentials fail the release rather than silently +shipping the MPV stub. + +## Versioning and local release markers + +Upstream computes `versionName` from +`git describe --tags --long --match='v*'`, dropping the leading `v`, and computes +`versionCode` from the count of all local `v*` and `p*` tags. Preserve and fetch +those tags; a shallow or incomplete checkout can give an incorrect version. +Use the full `git describe` output as the human release name. + +After committing the intended release, with a clean checkout and fetched tags: + +```sh +make release-tag +make apk +``` + +The helper creates one lightweight `pwolfskin-YYYY_MM_DD` tag in UTC, appending +`_1`, `_2`, etc. on collision. Each marker adds one to `versionCode` without +changing upstream's `v*`-based version name. It never pushes tags, publishes a +release, or installs an APK. Do not delete published release markers. Tag +creation and publication must be serialized between release operators. + +## Inspecting release artifacts + +Use `apksigner verify --verbose --print-certs APK` and +`aapt2 dump badging APK` inside the build image. Compare the signer SHA-256 with +`keytool -list -v -alias wolfskin -keystore /path/to/release.jks` (enter its +password privately). Inspect APK ZIP entries for real native MPV and ffmpeg +libraries for each shipped ABI; a successful Java compilation alone does not +prove that codec extensions are included. diff --git a/docker/gradle.sh b/docker/gradle.sh new file mode 100755 index 00000000..76950dc6 --- /dev/null +++ b/docker/gradle.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash +# Run the upstream wrapper with a persistent cache and read-only build credentials. +set -euo pipefail +mode=$1 +shift +root=$(git rev-parse --show-toplevel) +git_common=$(git rev-parse --path-format=absolute --git-common-dir) +image=${WOLFSKIN_BUILD_IMAGE:-wolfskin-build:sdk37-jdk21} +cache=${WOLFSKIN_GRADLE_VOLUME:-wolfskin-gradle} +secrets=${WOLFSKIN_SECRETS_DIR:-/opt/stacks/ventoy/machine-parity/manifest-tank/secrets/wolfskin} +arguments=(--rm --platform linux/amd64 --user "$(id -u):$(id -g)" + --mount "type=bind,src=$root,dst=$root" --workdir "$root" + --mount "type=volume,src=$cache,dst=/gradle" + --mount "type=bind,src=$git_common,dst=$git_common,readonly") +gradle_arguments=(--no-daemon --console=plain --max-workers=4) +if [[ $mode == release ]]; then + for name in release.jks release.properties github-packages-token; do + if [[ ! -s $secrets/$name ]]; then + printf 'Missing build credential: %s/%s\n' "$secrets" "$name" >&2 + exit 1 + fi + done + arguments+=(--mount "type=bind,src=$secrets,dst=/run/wolfskin,readonly" + --mount "type=bind,src=$root/docker/release-signing.properties,dst=$root/local.properties,readonly") + gradle_arguments+=(--init-script /opt/wolfskin/signing.init.gradle) + docker run "${arguments[@]}" "$image" bash -euc ' + export ORG_GRADLE_PROJECT_WholphinExtensionsUsername=JustinZeus + export ORG_GRADLE_PROJECT_WholphinExtensionsPassword=$(cat /run/wolfskin/github-packages-token) + exec ./gradlew "$@" + ' bash "${gradle_arguments[@]}" "$@" +else + docker run "${arguments[@]}" "$image" ./gradlew "${gradle_arguments[@]}" "$@" +fi diff --git a/docker/release-signing.properties b/docker/release-signing.properties new file mode 100644 index 00000000..7e15afe4 --- /dev/null +++ b/docker/release-signing.properties @@ -0,0 +1 @@ +release.signing.config=wolfskin diff --git a/docker/release-tag.sh b/docker/release-tag.sh new file mode 100755 index 00000000..14b2637c --- /dev/null +++ b/docker/release-tag.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +# Add one lightweight release marker without publishing it. +set -euo pipefail +if [[ -n $(git status --porcelain) ]]; then + printf 'Commit or discard checkout changes before tagging a release.\n' >&2 + exit 1 +fi +base="pwolfskin-$(date -u +%Y_%m_%d)" +tag=$base +sequence=1 +while git show-ref --verify --quiet "refs/tags/$tag"; do + tag="${base}_${sequence}" + sequence=$((sequence + 1)) +done +git tag "$tag" +printf 'Created %s locally; no tag was pushed.\n' "$tag" +printf 'versionName: %s\n' "$(git describe --tags --long --match='v*' | cut -c 2-)" +printf 'versionCode: %s\n' "$(git tag --list 'v*' 'p*' | wc -l)" diff --git a/docker/signing.init.gradle b/docker/signing.init.gradle new file mode 100644 index 00000000..b07a4770 --- /dev/null +++ b/docker/signing.init.gradle @@ -0,0 +1,17 @@ +// Keep signing material outside the checkout; upstream selects this configuration via local.properties. +allprojects { + pluginManager.withPlugin('com.android.application') { + def passwords = new Properties() + file('/run/wolfskin/release.properties').withInputStream { passwords.load(it) } + android.signingConfigs.create('wolfskin') { + storeFile = file('/run/wolfskin/release.jks') + storePassword = passwords.getProperty('storePassword') + keyPassword = passwords.getProperty('keyPassword') + keyAlias = 'wolfskin' + enableV1Signing = true + enableV2Signing = true + enableV3Signing = true + enableV4Signing = true + } + } +} From 1db83e98d407ea7d57dc868bbd832eff01f4ea4c Mon Sep 17 00:00:00 2001 From: justinzeus Date: Thu, 22 Oct 2026 14:42:47 +0200 Subject: [PATCH 02/26] Add Wolfskin fork header to README --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index ed82692f..23dfb0b5 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,13 @@ +# Wolfskin + +Wolfskin is a personal fork of [Wholphin](https://github.com/damontecres/Wholphin) by damontecres. + +Licensed under GPL-2.0, the same licence as upstream (see [LICENSE](LICENSE)). + +Wolfskin is an Android TV client for one household. It is released through Forgejo releases on this repo, and it tracks upstream by merging each upstream release tag. + +--- + # Wholphin - an OSS Android TV client for Jellyfin > "Never half-phin two jellies. Always wholphin one jelly." From 19adf54c234cd8eb7a2909c6c77aa1b9dc97d214 Mon Sep 17 00:00:00 2001 From: justinzeus Date: Thu, 22 Oct 2026 14:43:07 +0200 Subject: [PATCH 03/26] Pin platform tools and use the upstream debug unit task --- Makefile | 2 +- docker/Dockerfile | 7 +++++++ docker/README.md | 17 ++++++++++++----- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 0f2d2017..df6bd824 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ apk-debug: build-image @bash docker/gradle.sh debug assembleDefaultDebug test: build-image - @bash docker/gradle.sh release testDefaultReleaseUnitTest + @bash docker/gradle.sh debug testDefaultDebugUnitTest release-tag: @bash docker/release-tag.sh diff --git a/docker/Dockerfile b/docker/Dockerfile index bae48a77..ce7d039f 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -12,6 +12,13 @@ RUN curl -fsSL https://dl.google.com/android/repository/commandlinetools-linux-1 && rm -rf /tmp/tools.zip /tmp/android-tools \ && yes | sdkmanager --licenses >/dev/null \ && sdkmanager 'platforms;android-37.0' 'build-tools;36.0.0' \ + && while IFS='=' read -r name value; do \ + if [ "$name" = Pkg.Revision ]; then test "$value" = 2 || exit 1; fi; \ + done < "$ANDROID_HOME/platforms/android-37.0/source.properties" \ + && curl -fsSL https://dl.google.com/android/repository/platform-tools_r37.0.1-linux.zip -o /tmp/platform-tools.zip \ + && echo '477254aa5f903c15cf51001717bdf347fb6b53e0 /tmp/platform-tools.zip' | sha1sum -c - \ + && unzip -q /tmp/platform-tools.zip -d "$ANDROID_HOME" \ + && rm /tmp/platform-tools.zip \ && mkdir -m 1777 /gradle ENV GRADLE_USER_HOME=/gradle HOME=/tmp COPY signing.init.gradle /opt/wolfskin/signing.init.gradle diff --git a/docker/README.md b/docker/README.md index 5b56071c..353a716f 100644 --- a/docker/README.md +++ b/docker/README.md @@ -6,7 +6,7 @@ host needs Docker, GNU Make, Bash, and Git, not Java or the Android SDK. ```sh git fetch origin --tags make apk # clean, signed default release: three ABI splits + universal -make test # upstream testDefaultReleaseUnitTest in the same image +make test # upstream testDefaultDebugUnitTest in the same image, no secrets make apk-debug # default debug, no secrets; MPV stub and no extra codec decoders ``` @@ -17,12 +17,19 @@ use the catalog's exact Wholphin extension version (currently `0.2.4`). Do not place local extension AARs in `app/libs`: upstream prefers them over the pinned GitHub Packages dependencies. +Upstream enables JVM unit tests only for debug variants; there is no +`testDefaultReleaseUnitTest` task. `make test` uses the closest default-flavor +task without changing upstream's test configuration. + ## Toolchain and disk use -`Dockerfile` pins Temurin JDK `21.0.11+10` by image digest, Android command-line -tools `23.0` by archive and checksum, SDK platform `37.0`, and build-tools -`36.0.0`. Gradle comes from the committed wrapper. The image is built for -`linux/amd64`; the default local image tag is `wolfskin-build:sdk37-jdk21`. +`Dockerfile` pins Temurin JDK `21.0.11+10` by image digest, command-line tools +`23.0` and platform-tools `37.0.1` by archive and checksum, and build-tools +`36.0.0` by SDK package version. The SDK manager registers platform `37.0` and +its licenses; the build rejects any platform revision other than 2. An SDK +revision upgrade therefore requires a deliberate Dockerfile update. +Gradle comes from the committed wrapper. The image is built for `linux/amd64`; +the default local image tag is `wolfskin-build:sdk37-jdk21`. Upstream's build timestamp means APKs are not byte-for-byte reproducible. Gradle downloads and caches live in the named volume `wolfskin-gradle`, not From 344aa9990d8248bece237feaf9bb60a9f087dc54 Mon Sep 17 00:00:00 2001 From: justinzeus Date: Thu, 24 Sep 2026 22:00:49 +0200 Subject: [PATCH 04/26] Focus the active profile in the user selector --- .../damontecres/wholphin/ui/setup/UserList.kt | 20 +++-- .../wholphin/ui/setup/UserListFocusTest.kt | 87 +++++++++++++++++++ 2 files changed, 100 insertions(+), 7 deletions(-) create mode 100644 app/src/test/java/com/github/damontecres/wholphin/ui/setup/UserListFocusTest.kt diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/setup/UserList.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/setup/UserList.kt index ddc171c9..4d3ff8d3 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/setup/UserList.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/setup/UserList.kt @@ -16,6 +16,7 @@ import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.wrapContentWidth import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.itemsIndexed +import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Add @@ -88,19 +89,24 @@ fun UserList( modifier = Modifier.fillMaxWidth(), contentAlignment = Alignment.Center, ) { - val focusRequester = remember { FocusRequester() } - val firstFocusRequester = remember { FocusRequester() } - if (users.isNotEmpty()) { - LaunchedEffect(Unit) { focusRequester.tryRequestFocus() } + val listState = rememberLazyListState() + val initialFocusRequester = remember { FocusRequester() } + val initialIndex = + users.indexOfFirst { it.user.id == currentUser?.id }.takeIf { it >= 0 } ?: 0 + LaunchedEffect(users, currentUser?.id) { + if (users.isNotEmpty()) { + listState.scrollToItem(initialIndex) + initialFocusRequester.tryRequestFocus() + } } LazyRow( + state = listState, horizontalArrangement = Arrangement.spacedBy(24.dp), // Spacing to accommodate 20% scale contentPadding = PaddingValues(horizontal = 48.dp, vertical = 16.dp), // Increased padding to accommodate 20% scale modifier = Modifier .wrapContentWidth() - .focusRestorer(firstFocusRequester) - .focusRequester(focusRequester), + .focusRestorer(initialFocusRequester), ) { itemsIndexed(users) { index, user -> UserIconCard( @@ -108,7 +114,7 @@ fun UserList( isCurrentUser = user.user.id == currentUser?.id, onClick = { onSwitchUser.invoke(user.user) }, onLongClick = { showDeleteDialog = user }, - modifier = if (index == 0) Modifier.focusRequester(firstFocusRequester) else Modifier, + modifier = if (index == initialIndex) Modifier.focusRequester(initialFocusRequester) else Modifier, ) } // Add User card - always rightmost diff --git a/app/src/test/java/com/github/damontecres/wholphin/ui/setup/UserListFocusTest.kt b/app/src/test/java/com/github/damontecres/wholphin/ui/setup/UserListFocusTest.kt new file mode 100644 index 00000000..a6a23244 --- /dev/null +++ b/app/src/test/java/com/github/damontecres/wholphin/ui/setup/UserListFocusTest.kt @@ -0,0 +1,87 @@ +package com.github.damontecres.wholphin.ui.setup + +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.key.Key +import androidx.compose.ui.test.assertIsFocused +import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performKeyInput +import androidx.compose.ui.test.pressKey +import com.github.damontecres.wholphin.data.model.JellyfinUser +import com.github.damontecres.wholphin.ui.theme.WholphinTheme +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import java.util.UUID + +@Config(sdk = [34]) +@RunWith(RobolectricTestRunner::class) +class UserListFocusTest { + @get:Rule val composeTestRule = createComposeRule() + + private val serverId = UUID.fromString("00000000-0000-0000-0000-000000000010") + private val users = + listOf("Ada", "Bert", "Cleo").mapIndexed { index, name -> + JellyfinUserAndImage( + user = + JellyfinUser( + id = UUID(0, (index + 1).toLong()), + name = name, + serverId = serverId, + accessToken = "token", + ), + imageUrl = null, + known = true, + ) + } + + private fun showUsers(currentUser: JellyfinUser?) { + composeTestRule.setContent { + WholphinTheme { + UserList( + users = users, + currentUser = currentUser, + onSwitchUser = {}, + onAddUser = {}, + onRemoveUser = {}, + onSwitchServer = {}, + modifier = Modifier.fillMaxSize(), + ) + } + } + } + + @Test + fun `opening selector focuses active profile and supports D-pad navigation`() { + showUsers(users[1].user) + + composeTestRule.onNodeWithText("B").assertIsFocused().performKeyInput { + pressKey(Key.DirectionRight) + } + composeTestRule.onNodeWithText("C").assertIsFocused() + } + + @Test + fun `opening selector scrolls to an active profile outside the initial viewport`() { + showUsers(users[2].user) + + composeTestRule.onNodeWithText("C").assertIsFocused() + } + + @Test + fun `opening selector without a listed active profile focuses first profile`() { + showUsers(null) + + composeTestRule.onNodeWithText("A").assertIsFocused() + } + + @Test + fun `opening selector with a removed active profile focuses first profile`() { + showUsers(users[1].user.copy(id = UUID(0, 99))) + + composeTestRule.onNodeWithText("A").assertIsFocused() + } +} From 06c783a44abb543235d116732eabb077a34269e7 Mon Sep 17 00:00:00 2001 From: justinzeus Date: Thu, 22 Oct 2026 14:46:18 +0200 Subject: [PATCH 05/26] Change application id to org.justinvisser.wolfskin.tv --- Intents.md | 18 +++++++++--------- app/build.gradle.kts | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Intents.md b/Intents.md index 7f01a501..7e358955 100644 --- a/Intents.md +++ b/Intents.md @@ -33,7 +33,7 @@ Full format ```bash adb shell am start \ -a android.intent.action.SEARCH \ - -n 'com.github.damontecres.wholphin/.MainActivity' \ + -n 'org.justinvisser.wolfskin.tv/com.github.damontecres.wholphin.MainActivity' \ --es query "Avengers" ``` @@ -47,7 +47,7 @@ Multi-word query: # Whole shell command is wrapped in double quotes adb shell "am start \ -a android.intent.action.SEARCH \ - -n 'com.github.damontecres.wholphin/.MainActivity' \ + -n 'org.justinvisser.wolfskin.tv/com.github.damontecres.wholphin.MainActivity' \ --es query 'Avengers Endgame'" adb shell am start -d 'wholphin://search?query=Avengers+Endgame' @@ -72,7 +72,7 @@ Full format ```bash adb shell am start \ -a android.intent.action.VIEW \ - -n 'com.github.damontecres.wholphin/.MainActivity' \ + -n 'org.justinvisser.wolfskin.tv/com.github.damontecres.wholphin.MainActivity' \ --es itemId "5cf8f8e7-2a5f-4aa9-8c12-ddf63d42ee6d" ``` @@ -98,7 +98,7 @@ Full format ```bash adb shell am start \ -a com.github.damontecres.wholphin.PLAYBACK \ - -n 'com.github.damontecres.wholphin/.MainActivity' \ + -n 'org.justinvisser.wolfskin.tv/com.github.damontecres.wholphin.MainActivity' \ --es itemId "5cf8f8e7-2a5f-4aa9-8c12-ddf63d42ee6d" ``` @@ -111,7 +111,7 @@ Start at 4m30s: ```bash adb shell am start \ -a com.github.damontecres.wholphin.PLAYBACK \ - -n 'com.github.damontecres.wholphin/.MainActivity' \ + -n 'org.justinvisser.wolfskin.tv/com.github.damontecres.wholphin.MainActivity' \ --es itemId "5cf8f8e7-2a5f-4aa9-8c12-ddf63d42ee6d" \ --el position 270000 @@ -122,7 +122,7 @@ Shuffle a series (`itemId` is the Series ID): ```bash adb shell am start \ -a com.github.damontecres.wholphin.PLAYBACK \ - -n 'com.github.damontecres.wholphin/.MainActivity' \ + -n 'org.justinvisser.wolfskin.tv/com.github.damontecres.wholphin.MainActivity' \ --es itemId "5cf8f8e7-2a5f-4aa9-8c12-ddf63d42ee6d" \ --ez shuffle true @@ -138,7 +138,7 @@ Full format # Switch user, go to item adb shell am start \ -a android.intent.action.VIEW \ - -n 'com.github.damontecres.wholphin/.MainActivity' \ + -n 'org.justinvisser.wolfskin.tv/com.github.damontecres.wholphin.MainActivity' \ --es itemId "5cf8f8e7-2a5f-4aa9-8c12-ddf63d42ee6d" \ --es serverId "341880f9-ca88-4038-8718-f6b2407950b1" \ --es userId "5c8575e0-468d-44fb-8c70-00aa79160587" @@ -146,7 +146,7 @@ adb shell am start \ # Switch user, go to home screen adb shell am start \ -a android.intent.action.VIEW \ - -n 'com.github.damontecres.wholphin/.MainActivity' \ + -n 'org.justinvisser.wolfskin.tv/com.github.damontecres.wholphin.MainActivity' \ --es serverId "341880f9-ca88-4038-8718-f6b2407950b1" \ --es userId "5c8575e0-468d-44fb-8c70-00aa79160587" ``` @@ -163,6 +163,6 @@ Debug builds have a different package, so you must specify the component by its ```bash adb shell am start \ -a android.intent.action.VIEW \ - -n 'com.github.damontecres.wholphin.debug/com.github.damontecres.wholphin.MainActivity' \ + -n 'org.justinvisser.wolfskin.tv.debug/com.github.damontecres.wholphin.MainActivity' \ --es itemId "5cf8f8e7-2a5f-4aa9-8c12-ddf63d42ee6d" ``` diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e9fc3516..6178f8ea 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -72,7 +72,7 @@ configure { compileSdk = libs.versions.compileSdk.getInt() defaultConfig { - applicationId = "com.github.damontecres.wholphin" + applicationId = "org.justinvisser.wolfskin.tv" minSdk = libs.versions.minSdk.getInt() targetSdk = libs.versions.targetSdk.getInt() versionCode = gitTags.trim().lines().size From af885eae58463501fb8e511390063a6de5a714b3 Mon Sep 17 00:00:00 2001 From: justinzeus Date: Thu, 22 Oct 2026 14:46:41 +0200 Subject: [PATCH 06/26] Default Seerr login to Jellyfin and prefill Wolfskin Seerr URL --- .../damontecres/wholphin/WolfskinDefaults.kt | 9 +++++++++ .../wholphin/ui/setup/seerr/AddSeerrServer.kt | 5 +++-- .../ui/setup/seerr/AddSeerrServerDialog.kt | 8 ++++---- .../wholphin/WolfskinDefaultsTest.kt | 17 +++++++++++++++++ 4 files changed, 33 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/com/github/damontecres/wholphin/WolfskinDefaults.kt create mode 100644 app/src/test/java/com/github/damontecres/wholphin/WolfskinDefaultsTest.kt diff --git a/app/src/main/java/com/github/damontecres/wholphin/WolfskinDefaults.kt b/app/src/main/java/com/github/damontecres/wholphin/WolfskinDefaults.kt new file mode 100644 index 00000000..aa023e97 --- /dev/null +++ b/app/src/main/java/com/github/damontecres/wholphin/WolfskinDefaults.kt @@ -0,0 +1,9 @@ +package com.github.damontecres.wholphin + +/** Wolfskin-specific defaults kept in one place to keep upstream diffs small. */ +object WolfskinDefaults { + const val SEERR_URL = "https://seerr.justinvisser.org" +} + +/** Returns [url] when it has content, otherwise the Wolfskin Seerr URL so the user can still edit it. */ +fun seerrUrlPrefill(url: String = ""): String = if (url.isBlank()) WolfskinDefaults.SEERR_URL else url diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/setup/seerr/AddSeerrServer.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/setup/seerr/AddSeerrServer.kt index 5fa8c667..59c9b2ae 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/setup/seerr/AddSeerrServer.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/setup/seerr/AddSeerrServer.kt @@ -30,6 +30,7 @@ import androidx.compose.ui.unit.dp import androidx.tv.material3.MaterialTheme import androidx.tv.material3.Text import com.github.damontecres.wholphin.R +import com.github.damontecres.wholphin.seerrUrlPrefill import com.github.damontecres.wholphin.ui.PreviewTvSpec import com.github.damontecres.wholphin.ui.components.Button import com.github.damontecres.wholphin.ui.components.EditTextBox @@ -54,7 +55,7 @@ fun AddSeerrServerApiKey( .padding(16.dp) .wrapContentSize(), ) { - var url by remember { mutableStateOf("") } + var url by remember { mutableStateOf(seerrUrlPrefill()) } var apiKey by remember { mutableStateOf("") } val focusRequester = remember { FocusRequester() } @@ -166,7 +167,7 @@ fun AddSeerrServerUsername( .padding(16.dp) .wrapContentSize(), ) { - var url by remember { mutableStateOf("") } + var url by remember { mutableStateOf(seerrUrlPrefill()) } var username by remember { mutableStateOf(username) } var password by remember { mutableStateOf("") } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/setup/seerr/AddSeerrServerDialog.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/setup/seerr/AddSeerrServerDialog.kt index d84b98db..bb38aabb 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/setup/seerr/AddSeerrServerDialog.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/setup/seerr/AddSeerrServerDialog.kt @@ -89,10 +89,6 @@ fun ChooseSeerrLoginType( title = stringResource(R.string.seerr_login), items = listOf( - DialogItem( - text = stringResource(R.string.api_key), - onClick = { onChoose.invoke(SeerrAuthMethod.API_KEY) }, - ), DialogItem( text = stringResource(R.string.seerr_jellyfin_user), onClick = { onChoose.invoke(SeerrAuthMethod.JELLYFIN) }, @@ -101,6 +97,10 @@ fun ChooseSeerrLoginType( text = stringResource(R.string.seerr_local_user), onClick = { onChoose.invoke(SeerrAuthMethod.LOCAL) }, ), + DialogItem( + text = stringResource(R.string.api_key), + onClick = { onChoose.invoke(SeerrAuthMethod.API_KEY) }, + ), ), ) diff --git a/app/src/test/java/com/github/damontecres/wholphin/WolfskinDefaultsTest.kt b/app/src/test/java/com/github/damontecres/wholphin/WolfskinDefaultsTest.kt new file mode 100644 index 00000000..14d59cf2 --- /dev/null +++ b/app/src/test/java/com/github/damontecres/wholphin/WolfskinDefaultsTest.kt @@ -0,0 +1,17 @@ +package com.github.damontecres.wholphin + +import org.junit.Assert.assertEquals +import org.junit.Test + +class WolfskinDefaultsTest { + @Test + fun emptyUrlIsPrefilledWithWolfskinSeerrUrl() { + assertEquals(WolfskinDefaults.SEERR_URL, seerrUrlPrefill()) + assertEquals(WolfskinDefaults.SEERR_URL, seerrUrlPrefill(" ")) + } + + @Test + fun enteredUrlIsKept() { + assertEquals("https://seerr.example.org", seerrUrlPrefill("https://seerr.example.org")) + } +} From 0f7a23faa8c52d53759170e2aed1f7e9adb4da5e Mon Sep 17 00:00:00 2001 From: justinzeus Date: Thu, 22 Oct 2026 14:47:50 +0200 Subject: [PATCH 07/26] Point updater at Forgejo releases and Wolfskin assets --- .../wholphin/preferences/AppPreference.kt | 2 +- .../wholphin/services/UpdateChecker.kt | 107 ++++++++++++------ .../wholphin/test/TestUpdateChecker.kt | 105 +++++++++++------ .../resources/forgejo_release_latest.json | 44 +++++++ app/src/test/resources/forgejo_releases.json | 52 +++++++++ 5 files changed, 238 insertions(+), 72 deletions(-) create mode 100644 app/src/test/resources/forgejo_release_latest.json create mode 100644 app/src/test/resources/forgejo_releases.json diff --git a/app/src/main/java/com/github/damontecres/wholphin/preferences/AppPreference.kt b/app/src/main/java/com/github/damontecres/wholphin/preferences/AppPreference.kt index 4213fe94..09de8f2e 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/preferences/AppPreference.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/preferences/AppPreference.kt @@ -576,7 +576,7 @@ sealed interface AppPreference { val UpdateUrl = AppStringPreference( title = R.string.update_url, - defaultValue = "https://api.github.com/repos/damontecres/Wholphin/releases/latest", + defaultValue = "https://git.justinvisser.org/api/v1/repos/justinzeus/wolfskin/releases/latest", getter = { it.updateUrl }, setter = { prefs, value -> prefs.update { updateUrl = value } diff --git a/app/src/main/java/com/github/damontecres/wholphin/services/UpdateChecker.kt b/app/src/main/java/com/github/damontecres/wholphin/services/UpdateChecker.kt index a00de8e4..3b53138d 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/services/UpdateChecker.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/services/UpdateChecker.kt @@ -57,7 +57,7 @@ class UpdateChecker @param:StandardOkHttpClient private val okHttpClient: OkHttpClient, ) { companion object { - const val ASSET_NAME = "Wholphin" + const val ASSET_NAME = "Wolfskin" const val APK_NAME = "$ASSET_NAME.apk" private const val APK_MIME_TYPE = "application/vnd.android.package-archive" @@ -65,6 +65,52 @@ class UpdateChecker private val NOTE_REGEX = Regex("") val ACTIVE = BuildConfig.UPDATING_ENABLED + + private const val RELEASES_URL = "https://git.justinvisser.org/api/v1/repos/justinzeus/wolfskin/releases?limit=50" + + /** + * Find the release in a Forgejo release list whose name parses to the given version + */ + fun findReleaseByVersion( + releases: JsonArray, + version: Version, + ): JsonObject? = + releases + .firstOrNull { release -> + Version.tryFromString(release.jsonObject["name"]?.jsonPrimitive?.contentOrNull) == version + }?.jsonObject + + /** + * Parse a single release object (Forgejo or GitHub shape) into a [Release], or null if its name is not a version + */ + fun parseRelease( + json: JsonObject, + debug: Boolean, + supportedABIs: List = Build.SUPPORTED_ABIS.toList(), + ): Release? { + val name = json["name"]?.jsonPrimitive?.contentOrNull + val version = Version.tryFromString(name) + if (version == null) { + Timber.w("Update version parsing failed. name=$name") + return null + } + val publishedAt = json["published_at"]?.jsonPrimitive?.contentOrNull + val body = json["body"]?.jsonPrimitive?.contentOrNull + val downloadUrl = + json["assets"]?.jsonArray?.let { assets -> getDownloadUrl(assets, debug, supportedABIs) } + Timber.v("version=$version, downloadUrl=$downloadUrl") + val notes = + if (body.isNotNullOrBlank()) { + NOTE_REGEX + .findAll(body) + .map { m -> + m.groupValues[1] + }.toList() + } else { + emptyList() + } + return Release(version, downloadUrl, publishedAt, body, notes) + } } /** @@ -127,17 +173,29 @@ class UpdateChecker return Version.fromString(pkgInfo.versionName!!) } + /** + * Get the release whose name parses to the given version. + * + * Wolfskin releases are named by `git describe` (e.g. `v1.0.9-2-g3094fc8c`) rather than tagged `vX.Y.Z`, + * so this searches the release list instead of fetching a tag. + */ suspend fun getRelease(version: Version): Release? { - val url = - "https://api.github.com/repos/damontecres/Wholphin/releases/tags/v${version.major}.${version.minor}.${version.patch}" + val request = + Request + .Builder() + .url(RELEASES_URL) + .get() + .build() return withContext(WholphinDispatchers.IO) { - val request = - Request - .Builder() - .url(url) - .get() - .build() - getRelease(request) + okHttpClient.newCall(request).execute().use { + if (it.isSuccessful) { + val releases = Json.parseToJsonElement(it.body.string()).jsonArray + findReleaseByVersion(releases, version)?.let { json -> parseRelease(json, BuildConfig.DEBUG) } + } else { + Timber.w("Release lookup failed ${it.code}: ${it.message}") + null + } + } } } @@ -158,36 +216,11 @@ class UpdateChecker private fun getRelease(request: Request): Release? { return okHttpClient.newCall(request).execute().use { if (it.isSuccessful) { - val result = Json.parseToJsonElement(it.body.string()) - val name = result.jsonObject["name"]?.jsonPrimitive?.contentOrNull - val version = Version.tryFromString(name) - val publishedAt = - result.jsonObject["published_at"]?.jsonPrimitive?.contentOrNull - val body = result.jsonObject["body"]?.jsonPrimitive?.contentOrNull - val downloadUrl = - result.jsonObject["assets"] - ?.jsonArray - ?.let { assets -> getDownloadUrl(assets, BuildConfig.DEBUG) } - Timber.v("version=$version, downloadUrl=$downloadUrl") - if (version != null) { - val notes = - if (body.isNotNullOrBlank()) { - NOTE_REGEX - .findAll(body) - .map { m -> - m.groupValues[1] - }.toList() - } else { - emptyList() - } - return@use Release(version, downloadUrl, publishedAt, body, notes) - } else { - Timber.w("Update version parsing failed. name=$name") - } + parseRelease(Json.parseToJsonElement(it.body.string()).jsonObject, BuildConfig.DEBUG) } else { Timber.w("Update check failed ${it.code}: ${it.message}") + null } - return@use null } } diff --git a/app/src/test/java/com/github/damontecres/wholphin/test/TestUpdateChecker.kt b/app/src/test/java/com/github/damontecres/wholphin/test/TestUpdateChecker.kt index 4cae61ba..f0f51931 100644 --- a/app/src/test/java/com/github/damontecres/wholphin/test/TestUpdateChecker.kt +++ b/app/src/test/java/com/github/damontecres/wholphin/test/TestUpdateChecker.kt @@ -1,11 +1,15 @@ package com.github.damontecres.wholphin.test +import com.github.damontecres.wholphin.services.UpdateChecker import com.github.damontecres.wholphin.services.getDownloadUrl +import com.github.damontecres.wholphin.util.Version import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.JsonElement import kotlinx.serialization.json.JsonObject import kotlinx.serialization.json.jsonArray import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive import org.junit.Assert import org.junit.Before import org.junit.Test @@ -19,71 +23,104 @@ class TestUpdateChecker { lateinit var releaseV108Json: JsonObject val assetsV108Json: JsonArray by lazy { releaseV108Json["assets"]!!.jsonArray } - private fun read(filename: String): JsonObject { + private val forgejoLatest: JsonObject by lazy { read("forgejo_release_latest.json") } + private val forgejoAssets: JsonArray by lazy { forgejoLatest["assets"]!!.jsonArray } + private val forgejoReleases: JsonArray by lazy { readElement("forgejo_releases.json").jsonArray } + + private fun readElement(filename: String): JsonElement { val resource = javaClass.classLoader?.getResource(filename) Assert.assertNotNull(resource) val fileContents = Paths.get(resource!!.toURI()).readText() - return Json.parseToJsonElement(fileContents).jsonObject + return Json.parseToJsonElement(fileContents) } + private fun read(filename: String): JsonObject = readElement(filename).jsonObject + + private fun forgejoDownload(name: String) = + "https://git.justinvisser.org/justinzeus/wolfskin/releases/download/pwolfskin-v1.0.9-2-g3094fc8c/$name" + @Before fun setup() { releaseJson = read("release_develop.json") } + // The GitHub fixtures are upstream Wholphin releases: their assets are named Wholphin*.apk, which + // the Wolfskin updater must not select. + @Test - fun `Release chooses release`() { + fun `Release does not choose upstream Wholphin assets`() { val url = getDownloadUrl(assetsJson, false, listOf()) - Assert.assertEquals("https://github.com/damontecres/Wholphin/releases/download/develop/Wholphin-release.apk", url) + Assert.assertNull(url) } @Test - fun `Choose abi`() { + fun `Choose abi does not choose upstream Wholphin assets`() { val url = getDownloadUrl(assetsJson, false, listOf("arm64-v8a")) - Assert.assertEquals("https://github.com/damontecres/Wholphin/releases/download/develop/Wholphin-release-arm64-v8a.apk", url) + Assert.assertNull(url) } @Test - fun `Choose unknown abi`() { + fun `Choose unknown abi does not choose upstream Wholphin assets`() { val url = getDownloadUrl(assetsJson, false, listOf("unknown")) - Assert.assertEquals("https://github.com/damontecres/Wholphin/releases/download/develop/Wholphin-release.apk", url) + Assert.assertNull(url) } @Test - fun `Debug chooses debug`() { + fun `Debug does not choose upstream Wholphin assets`() { val url = getDownloadUrl(assetsJson, true, listOf()) - Assert.assertEquals("https://github.com/damontecres/Wholphin/releases/download/develop/Wholphin-debug.apk", url) + Assert.assertNull(url) } @Test - fun `Choose debug abi`() { + fun `Choose debug abi does not choose upstream Wholphin assets`() { val url = getDownloadUrl(assetsJson, true, listOf("arm64-v8a")) - Assert.assertEquals("https://github.com/damontecres/Wholphin/releases/download/develop/Wholphin-debug-arm64-v8a.apk", url) + Assert.assertNull(url) } @Test - fun `Test regular release`() { + fun `Test regular release does not choose upstream Wholphin assets`() { releaseV108Json = read("release_v108.json") - getDownloadUrl(assetsV108Json, false, listOf("arm64-v8a")).let { url -> - Assert.assertEquals( - "https://github.com/damontecres/Wholphin/releases/download/v1.0.8/Wholphin-arm64-v8a.apk", - url, - ) - } - getDownloadUrl(assetsV108Json, false, listOf("armeabi-v7a")).let { url -> - Assert.assertEquals( - "https://github.com/damontecres/Wholphin/releases/download/v1.0.8/Wholphin-armeabi-v7a.apk", - url, - ) - } - getDownloadUrl(assetsV108Json, false, emptyList()).let { url -> - Assert.assertEquals( - "https://github.com/damontecres/Wholphin/releases/download/v1.0.8/Wholphin.apk", - url, - ) - } - getDownloadUrl(assetsV108Json, true, listOf("arm64-v8a")).let { url -> - Assert.assertNull(url) - } + Assert.assertNull(getDownloadUrl(assetsV108Json, false, listOf("arm64-v8a"))) + Assert.assertNull(getDownloadUrl(assetsV108Json, false, listOf("armeabi-v7a"))) + Assert.assertNull(getDownloadUrl(assetsV108Json, false, emptyList())) + Assert.assertNull(getDownloadUrl(assetsV108Json, true, listOf("arm64-v8a"))) + } + + @Test + fun `Parse Forgejo latest release`() { + val release = UpdateChecker.parseRelease(forgejoLatest, debug = false, supportedABIs = listOf("arm64-v8a")) + checkNotNull(release) + Assert.assertEquals(Version.fromString("v1.0.9-2-g3094fc8c"), release.version) + Assert.assertEquals(forgejoDownload("Wolfskin-arm64-v8a.apk"), release.downloadUrl) + Assert.assertEquals("2026-10-20T09:05:00Z", release.publishedAt) + Assert.assertEquals(listOf("Subtitle preference fix"), release.notes) + } + + @Test + fun `Choose Wolfskin asset for abi`() { + Assert.assertEquals(forgejoDownload("Wolfskin-arm64-v8a.apk"), getDownloadUrl(forgejoAssets, false, listOf("arm64-v8a"))) + Assert.assertEquals(forgejoDownload("Wolfskin-armeabi-v7a.apk"), getDownloadUrl(forgejoAssets, false, listOf("armeabi-v7a"))) + } + + @Test + fun `Choose universal Wolfskin asset for unknown abi`() { + Assert.assertEquals(forgejoDownload("Wolfskin.apk"), getDownloadUrl(forgejoAssets, false, listOf("unknown"))) + Assert.assertEquals(forgejoDownload("Wolfskin.apk"), getDownloadUrl(forgejoAssets, false, emptyList())) + } + + @Test + fun `Debug asset is not offered when release has none`() { + Assert.assertNull(getDownloadUrl(forgejoAssets, true, listOf("arm64-v8a"))) + } + + @Test + fun `Find installed version in release list`() { + val release = UpdateChecker.findReleaseByVersion(forgejoReleases, Version.fromString("1.0.9-2-g3094fc8c")) + Assert.assertEquals("v1.0.9-2-g3094fc8c", release?.get("name")?.jsonPrimitive?.content) + } + + @Test + fun `Find no release for version missing from list`() { + Assert.assertNull(UpdateChecker.findReleaseByVersion(forgejoReleases, Version.fromString("1.0.9-3-gffffff"))) } } diff --git a/app/src/test/resources/forgejo_release_latest.json b/app/src/test/resources/forgejo_release_latest.json new file mode 100644 index 00000000..f99734b9 --- /dev/null +++ b/app/src/test/resources/forgejo_release_latest.json @@ -0,0 +1,44 @@ +{ + "id": 42, + "name": "v1.0.9-2-g3094fc8c", + "tag_name": "pwolfskin-v1.0.9-2-g3094fc8c", + "body": "Wolfskin build\n\n**Full Changelog**: https://git.justinvisser.org/justinzeus/wolfskin/compare/v1.0.8...v1.0.9", + "draft": false, + "prerelease": false, + "created_at": "2026-10-20T09:00:00Z", + "published_at": "2026-10-20T09:05:00Z", + "target_commitish": "3094fc8c", + "html_url": "https://git.justinvisser.org/justinzeus/wolfskin/releases/tag/pwolfskin-v1.0.9-2-g3094fc8c", + "assets": [ + { + "id": 101, + "name": "Wolfskin.apk", + "size": 12345678, + "download_count": 3, + "created_at": "2026-10-20T09:05:00Z", + "uuid": "11111111-1111-1111-1111-111111111111", + "type": "attachment", + "browser_download_url": "https://git.justinvisser.org/justinzeus/wolfskin/releases/download/pwolfskin-v1.0.9-2-g3094fc8c/Wolfskin.apk" + }, + { + "id": 102, + "name": "Wolfskin-arm64-v8a.apk", + "size": 7654321, + "download_count": 1, + "created_at": "2026-10-20T09:05:00Z", + "uuid": "22222222-2222-2222-2222-222222222222", + "type": "attachment", + "browser_download_url": "https://git.justinvisser.org/justinzeus/wolfskin/releases/download/pwolfskin-v1.0.9-2-g3094fc8c/Wolfskin-arm64-v8a.apk" + }, + { + "id": 103, + "name": "Wolfskin-armeabi-v7a.apk", + "size": 6543210, + "download_count": 0, + "created_at": "2026-10-20T09:05:00Z", + "uuid": "33333333-3333-3333-3333-333333333333", + "type": "attachment", + "browser_download_url": "https://git.justinvisser.org/justinzeus/wolfskin/releases/download/pwolfskin-v1.0.9-2-g3094fc8c/Wolfskin-armeabi-v7a.apk" + } + ] +} diff --git a/app/src/test/resources/forgejo_releases.json b/app/src/test/resources/forgejo_releases.json new file mode 100644 index 00000000..ab84e411 --- /dev/null +++ b/app/src/test/resources/forgejo_releases.json @@ -0,0 +1,52 @@ +[ + { + "id": 44, + "name": "v1.0.10-0-gfeedbee", + "tag_name": "pwolfskin-v1.0.10-0-gfeedbee", + "body": "", + "draft": false, + "prerelease": false, + "created_at": "2026-10-22T08:00:00Z", + "published_at": "2026-10-22T08:05:00Z", + "target_commitish": "feedbee", + "html_url": "https://git.justinvisser.org/justinzeus/wolfskin/releases/tag/pwolfskin-v1.0.10-0-gfeedbee", + "assets": [ + { + "id": 104, + "name": "Wolfskin.apk", + "size": 12345679, + "download_count": 0, + "created_at": "2026-10-22T08:05:00Z", + "uuid": "44444444-4444-4444-4444-444444444444", + "type": "attachment", + "browser_download_url": "https://git.justinvisser.org/justinzeus/wolfskin/releases/download/pwolfskin-v1.0.10-0-gfeedbee/Wolfskin.apk" + } + ] + }, + { + "id": 42, + "name": "v1.0.9-2-g3094fc8c", + "tag_name": "pwolfskin-v1.0.9-2-g3094fc8c", + "body": "Wolfskin build", + "draft": false, + "prerelease": false, + "created_at": "2026-10-20T09:00:00Z", + "published_at": "2026-10-20T09:05:00Z", + "target_commitish": "3094fc8c", + "html_url": "https://git.justinvisser.org/justinzeus/wolfskin/releases/tag/pwolfskin-v1.0.9-2-g3094fc8c", + "assets": [] + }, + { + "id": 40, + "name": "nightly", + "tag_name": "nightly", + "body": "", + "draft": false, + "prerelease": true, + "created_at": "2026-10-10T09:00:00Z", + "published_at": "2026-10-10T09:05:00Z", + "target_commitish": "main", + "html_url": "https://git.justinvisser.org/justinzeus/wolfskin/releases/tag/nightly", + "assets": [] + } +] From e499c3f11879aeafa338e9d48b5100ec3585b90f Mon Sep 17 00:00:00 2001 From: justinzeus Date: Thu, 22 Oct 2026 15:05:37 +0200 Subject: [PATCH 08/26] Rebrand the TV app as Wolfskin --- README.md | 2 + app/src/debug/res/values/strings.xml | 2 +- app/src/main/ic_launcher-playstore.png | Bin 132528 -> 214476 bytes .../damontecres/wholphin/MainActivity.kt | 4 +- .../wholphin/preferences/AppPreference.kt | 2 +- .../ui/preferences/PreferencesContent.kt | 3 + .../wholphin/ui/preferences/WolfskinAbout.kt | 28 +++++++++ .../damontecres/wholphin/ui/theme/Theme.kt | 8 ++- .../ui/theme/colors/WolfskinThemeColors.kt | 59 ++++++++++++++++++ app/src/main/proto/WholphinDataStore.proto | 1 + .../main/res/mipmap-anydpi-v26/ic_banner.xml | 11 +--- app/src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 2422 -> 5668 bytes .../mipmap-hdpi/ic_launcher_foreground.webp | Bin 4716 -> 8272 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 4366 -> 5588 bytes app/src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 1582 -> 3092 bytes .../mipmap-mdpi/ic_launcher_foreground.webp | Bin 2706 -> 4456 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 2688 -> 3252 bytes app/src/main/res/mipmap-xhdpi/ic_banner.png | Bin 18117 -> 34032 bytes .../res/mipmap-xhdpi/ic_banner_foreground.png | Bin 18584 -> 34032 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 3398 -> 8708 bytes .../mipmap-xhdpi/ic_launcher_foreground.webp | Bin 7176 -> 12750 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 6174 -> 8112 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 5602 -> 16426 bytes .../mipmap-xxhdpi/ic_launcher_foreground.webp | Bin 13360 -> 23846 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 9896 -> 14662 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 8462 -> 25246 bytes .../ic_launcher_foreground.webp | Bin 21426 -> 38506 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 14814 -> 22538 bytes app/src/main/res/values-cs/strings.xml | 4 +- app/src/main/res/values-da/strings.xml | 6 +- app/src/main/res/values-de/strings.xml | 6 +- app/src/main/res/values-es/strings.xml | 2 +- app/src/main/res/values-et/strings.xml | 6 +- app/src/main/res/values-fr/strings.xml | 6 +- app/src/main/res/values-hr/strings.xml | 6 +- app/src/main/res/values-in/strings.xml | 6 +- app/src/main/res/values-it/strings.xml | 6 +- app/src/main/res/values-iw/strings.xml | 6 +- app/src/main/res/values-nb-rNO/strings.xml | 6 +- app/src/main/res/values-nl/strings.xml | 6 +- app/src/main/res/values-nn/strings.xml | 4 +- app/src/main/res/values-pl/strings.xml | 6 +- app/src/main/res/values-pt-rBR/strings.xml | 6 +- app/src/main/res/values-pt/strings.xml | 6 +- app/src/main/res/values-ru/strings.xml | 6 +- app/src/main/res/values-sk/strings.xml | 6 +- app/src/main/res/values-sl/strings.xml | 2 +- app/src/main/res/values-sv/strings.xml | 6 +- app/src/main/res/values-th/strings.xml | 4 +- app/src/main/res/values-tr/strings.xml | 6 +- app/src/main/res/values-uk/strings.xml | 6 +- app/src/main/res/values-zh-rCN/strings.xml | 6 +- app/src/main/res/values-zh-rTW/strings.xml | 6 +- .../main/res/values/ic_banner_background.xml | 4 -- .../res/values/ic_launcher_background.xml | 2 +- app/src/main/res/values/strings.xml | 11 ++-- app/src/main/res/values/wolfskin.xml | 6 ++ .../wholphin/ui/WolfskinThemeColorsTest.kt | 44 +++++++++++++ 58 files changed, 230 insertions(+), 93 deletions(-) create mode 100644 app/src/main/java/com/github/damontecres/wholphin/ui/preferences/WolfskinAbout.kt create mode 100644 app/src/main/java/com/github/damontecres/wholphin/ui/theme/colors/WolfskinThemeColors.kt delete mode 100644 app/src/main/res/values/ic_banner_background.xml create mode 100644 app/src/main/res/values/wolfskin.xml create mode 100644 app/src/test/java/com/github/damontecres/wholphin/ui/WolfskinThemeColorsTest.kt diff --git a/README.md b/README.md index 23dfb0b5..b8f04e12 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,8 @@ Licensed under GPL-2.0, the same licence as upstream (see [LICENSE](LICENSE)). Wolfskin is an Android TV client for one household. It is released through Forgejo releases on this repo, and it tracks upstream by merging each upstream release tag. +The app uses Wolfskin launcher artwork and a lilac-on-`#07070a` theme by default on a fresh install. Existing theme choices and all upstream colour themes remain available under Settings → App theme. Settings → About credits and links to Wholphin by damontecres. + --- # Wholphin - an OSS Android TV client for Jellyfin diff --git a/app/src/debug/res/values/strings.xml b/app/src/debug/res/values/strings.xml index 606329c9..cb6c15c6 100644 --- a/app/src/debug/res/values/strings.xml +++ b/app/src/debug/res/values/strings.xml @@ -1,4 +1,4 @@ - Wholphin (Debug) + Wolfskin (Debug) diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png index 87623e5ea52f9704a711e10032364f8289b990e0..dfc380e19bcf37751113fac7e13d60d2a85e181a 100644 GIT binary patch literal 214476 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%0Dy`B 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 literal 132528 zcmeEt`9D6g7kFWUDAKV=YS&TBM>Rw2ewdmNTdbp~#X#%2r8>(jqez z*(yRRl|f@oFN|$woH^%vdjIzQA3l$V<#@~(=6>GyeO>o;U+0q7)=jd~%cTJTvaXw* zya6EKmjpnPz`xB#b_)Su0#_${-^hIvuNMMtj9g=30-O4R)7x^%uiu%mndB|vtDGiR z_-1s>tf4)W#0zT zfpfpwso(wgy?XKB)PItE8piR7;)Yvm$R!0GpN17#{r|iE-O?n^d^dn!pCYRQxg`AZ zgZ&=x?`iMMB~L*AdsdT1!~Z?$|3dKpXF-$3?|{Nj<&ztI=$`FHx1wZP$10;5dHJkD z{@E3BOkOl+S}&$E2^ z9kf5;)`c7YWuB+C@ob3Zd}-Ubew3@xkTJ(CIBX+c;y52mx#9Hg8ayjdJ-N+axZ?1ZS8kUp;o>hXw6eS13zci;mIM!Qu4H#R$*5F2`7V7y#@{*lfA1V{ zqOJ#w889UYGwPiNm;<1|#MSE(sdI_$Y9dp<5-s5$*+s5VT0%uZH!O9#DEZ27JS zvpOf1m}Q-u*YR{C&F255%a6W471Dd`uq(^yk0re2sUKzAiQceQ*Y7R{EjMdIPgKQN zL6XU-P}1)o7w~NO?eAEBpI>xc)pyLas{DR-oT1x~Ek@p+KC$DHdGoML3#WMCPV}0( ziFyUv4E-UG5-8Bya(6a2>BLrhRB1UdSXfKwBtv0J-C1_7d&8(f3B4AKZ9&63Yu5c4 z@x3BY5${a*67rzkb>4q^503|;B4rsWxN16fg}H&gd9`T zQWR~RAH&OdK!fJbQc_FBGDGsMEda3(}!$}d+w{(XpR`&ZCe!I zJ{*&gVv*rr)tzmriT_E;uGirFuevy9yRtn$8kID<-!oWWdBx(Yuwu;+ zsB(=>-Q9&=KIe_m#aec1F8)~a5?Q&`Q87rYzfg)PdEy&TJI`Mx3v%jZp=8% zmr*S4Zun~ldw?(TudMhI)Xt_mAG*-D&R?=~x?OaZMOUnwalY#rozd$9+lvfx&4%vH zZqnpmc0G5OFXGicoYfobSB18tK5s!arUSAeBAr%-p}zHmJmUUaR=+kKB0}V{!U@;$ z7H1-NaJ`jQ$j+4xR7OHCZ_?`&s(iP7G2t$+@AhLPSKsQ0o{mm!N1e0LH0?;o;&;Mo zl14f#w;JGImk*cPHHW_`aclJ$EB?vdZ|M4c(-F&krO#$5KCqAyYCX5%vIC-?%PHN` zHW@ug+4Ay_f(%pA5DSjkN;1S;_j`E>^d#6!DJJBBio%pqHfj@`P%?Zj`Ro*8AUHVkHuk<}Tc=ulZDQV?8m-WkD8JL_VnRhtNs64n+ zK9c*AvW6RuD23xSj3n;=Y-_^cRTn$U9MM1KXCv-&#%piSpY9t1sndbI6puyiV;(Q; z3pCM>Eyi)F`AC!uv;B74WF%xJJ)PlzXh7Qgz(c;sAE<+u;$CCw-b=5ccg%obp>3R^ zkg1>`m@(K)WFAHQ435u zAAV&Q+R;;Ut8Ry=?#QFiCY}-GnrH-^STxayH|GU%F`8wf?mN2DcNn+GWumoX)n3uP zBbk$wu%%t7u68Vxz?o>lRv+U6vOxVl|AJ(~ap(Y)*-Rz`hOSpCvrpz&WLg+>Vf4eh z8ccb)0O*1Pyb%-7O!%$=S)VGaw6eMjWj5jG|KD2!rX`b1(jum4cW+Bj(|_%$o?_b7 zJ7`+*k}qc1YUAkV=N~rRImi2Z9$6uO+z1b6?7u=qR_u>|G%Hw~S2f+|+~U5x!ur^a z9l?dAJrfy~HnLrD=q49^^Xyt)@eyuIN&IXmgYC^y7K6l7IKk7t>$XhGvH{^ zv_v4&8YZ|p=bQKJlA%RL$KCEH-B+f?mbdav@Eq{)_hvXCwV{7_Kh`|^Nu-~Q0nN(v zlShTB(=x`eEc5eFngml7+6U-J-n_VtNY5zIKm%mPO1BkVpqOIu5n^qa0@RWF(P{R> zB{wjtO!pl%a3T`bHmYv%@icSzl?k7fN+gqx|?(r`W zt}fRJ7@1U(yOfGsZ`zLr`&amqu(m|s!z6d zs9Y9HivL22&#YAr-$|5f!ZiM6IY#iCrrlVx$1Y$`x%pK^-|172Svi1rE*Lg^XXGd?i>($ewGCRVn-7Yfep0I9!Zk` zo+4wB>kVoP5fpC9`2mvYXi73=Ni;EcvcV)SSmt=NVz7g ztBct+v)WrJ|6oUK8$&obFh?U4t9QX?^$)BA+r}$8NTa)?49hESA5Q7L_m*l{vpuQu z#qi26JL8b88spu#IMb!gE#073nOMe+L*Km3l#Z=0lzL z?wX1e@2usO)Tq3>of+Ql^U>Y80!EFw$Y{AI%k75`qf;(9Mz7)ZijyJlr=!#vV9Hp5 ztqx)i31l<~$oD$QV*E#@4c#%&r!`gyGK67pbg3Xohu}hmO~Jw55P?zOc+rsjAeWK6 z1v89`Z)6M=sev7+E;#Sd2b^?3q%arg@2A2NP{-bjq<&ep^o=_4elnZOF;HNtRit~_ za5?Eus&qZ7)@F6@USuvm!uZ^K7b|W}$*6qJ-55M_tb8bJMNMFfA>K9C+pewtR%bnW z0B5oq|7s4C6sAU|3@y$Jj??r?3tBDCboPEY)qO>vDO-+Re^$2d){4qnDq>UP_`Iqe zhmR*vf0j1&f;O`j(jZW;wZGzj_^EJEo9Yj}R_w>yb@@j6Qs%)!1jx+b=+ZJkpx>d1 zfB$`cbd$H%TQgnJfUlkQW1gy@+}v(jUC>kp8)0GbVu4ikc4IsofKW_>mqW};tiWCw zrd=VLs>S0KB^T+z@k5k(La{r6>afD-wsczn0d(X1!erN4=VMRzGu3uAdTi?&kFGiX zMQ8W+IT=IK=mMThhS#D0b~Mm!J_hWm;y9aCHy;z%NZ<6o!GJiQ^m$5t!tZ&g&d{B+ zUVc5+Uk+;A8vZcpkU%T_n9pjefiIk~M_y6Kf02;~2esqgow-u~n$Rx`B$-+~)%(a~ z>x>$#3eLBi632D>S3Wll2b+mgvqcGDbN(7SnrZu6oY~AF((hW_ct7|RsBvYPbyHSb z635bDQAT?{`E?_ad5tB@gqmS0V>e!@K$F>y@B*&vgJ!kBIk#oWG-7K$AM`H(Vsij~ z*6}SYF^FALEiJR+;9)o|6eV0Fk+>-~>;|${uKerFkJo|7HJ6Gtt@Y*N-p_Z+zJ{e*ev- z7M70#yBVHab=pDr_XrLa>)fhND=-e(9@FnJing&SJ zf*n^jOJ>HgO2c!6geQ4ONQJ4jHq_z&0V0>~Qv$Y{>R`VtxWbATE52S1BYvkFh|JDM zh7N!4z3Z+&B+V--e)d!YD&7}%uc)L)NP2p|plo<<+u`F&e1d+j*zLdIZx|q0t-SL_ z>5Y=AnpH3M)e_pLsts4ijAFVP=`WZvph@FGz^Kfq>7d^(`^q*eudq)lyLX0P-2H@8 zcIAFi*QW{E=an9U=&s3*m4!S_k*y1=LD0f{?bb^i4AMJBuX+Yy{;N^31&g9I|p*inlITw(2`EmhB&qiQF18bt4{-ck#O}ew(G} z!G%H{aA*zKh3r80fe$IjqPb{6{E!Er5>ux4yoCT?n!XS1nuBYj1ns8S149+oR%Gwf zC0tV@SRE)F_E)-yK)UGsOR4b+7?7bqx|PRb&+k?*>Fy-o8op?jSCS)})!iLg)Wdl0 zvi(S$i;l9X&kj^gr}U|&#Q12XKu0nD-+(l%h!@PMbU5~9X5n5hx3RFx*#$jYg7be= znonxYjl{SG`LS;O^4l3oX<(WDR{5Jav5>-NNWX-q9KmFU?G2uRjmej;bCwqA6miu&&zio8m$kUP=zb3Krz4@0c5;V z9MBaHrZ;@)!LAzah;_Pk zH#IxQ#;NT|Z`d~8;d6)M7cV8Izlg_^;s%{{Ap;KdG$=K$E-#tg*6S6163n`s3$iWr`+ z)Ds(v-WLE_aEZB84$3?ePz#+AdM;tsB#8xPB~$J+5(0y+TS$Ml+=0Yhw4@(O(@gxi z5PcSvFoK_;3)~{BRFLNkK8#B+#i(qk_$;;#2&q`T_xs}jAIN>u@uB207C7|DEZITEF$b__OT6ph z!-aR=4@(_B8b$w8Q0?>aWq?=kFTJG|)?31&9Ba(Nlx=NU-}cH|7lz_OLSZPsw7z^q zxr;Y+q(VO=*<7~}Y&iQe^D?kwxDzL`?*TbxwA;(V-(htM58KZOM@AMEp))cMbuLGN7znH@ zw?`blk+V=24`JUEDWK`N6OHpltwmY1YSesMen`Jgm^;VvK+pVTG!%sl$xAD%1Ca)3 zj9h(595BE+KQwro2et!M(1vBfcaUcUjIak^QkronO$bPRvYPNVL4y8`2okH;_MZ~t zvNVk$oKEjZW>pEGr!`c!meQ1M{SVtW-PrR=-WGr#eNfe9-~ z#rWPCj@xLY7Ct~l4nCx16_tyE-H#aLt#_FFuBZ7(KFt49b?DBXoe|WTkT-t~c_H`EJo8f)W-G>J zs0B@zs|#d|YpnDobNiuK!RFU!m0f?LLx3grOS22B1l6~j2?+tT@ zdr#zje1^q)vlo~BZ4=q9_)zbVL`5C_tVT&~w8SA;%sjj+h-Nq0l+B{eT-=H|7z3^$ zTNP-*a$-_I8QYq?k3c`qs1}=j4Wg{*51?IW%6;^W^?BCEhsuyyj-4h{tWZ3-pri`M z4hcO&B1Mb`z~Vmgm&>o*mV-K;s&r8EY`_|A9!0f$O~9I_YH(r7o6v>Cjd`8n7fe2kQvm`41w!w zLGSgqir|i^Wd}mZ?&HKR-u(@arU8o|(%tNf~=hIpP%HyuF6ji|v zL}DM-B*{+Oir7tXC%0f^8Xi>_RBTBDjoHG&M=;Zy7m&ZRG!x$BoH$*+3@gN?u^f=R z8ITkKDSoX__lq-EH+-C}RtMK$Nl&D&4R({{az2L=nC0*jh&)}}pFKwDWQ@py(Y!l{ zoamNZQz}^g%D!E!w<9*A=j^YNrz_x+l+#7t+vcKLmmI$xoNuxQ_EWZ9OB;2-V};Y4 z-~LHxXrJQlXZJ5!WT_kEt#g`N-&8?c*xOsU;NDxbsJtR!Hsj#l+uGm1j)mvEX{7|v zn){zfuuq?pQ+QZ3&_bDLEc&a&7wA4O{kDa9Rwvv)bF3)1T_N+$LuAsG*sROOy9Zkj zn~qRnwQ^)YGQ6ad(nbdd>F6>a{>ES}>V#vX=|QtYV(juOScTt=Wk>?^rDT;x-M9%~Iak$3gfIR(P-UT8t)k_JZ+@9y==-vS!m z(XQvhyFBf8n|>LdxSd{?8@g&itT%s=5n;9VQ& zmo`58Ps`6(o}YX(xX=PuF!M`qIRt0!7c7e59J#og2t2W1LpXjCwLdHV=~}U3^DM1O z9S53TvpG6ydvCf<0%G$57V|*nQ&v72i%V(jS^Z?*urmuRONYV@27Qv7`#qkrm6^@h;cCxMD@CNNL5#7lg5Z+d+B5;&LD+ z$AoE*Gn)37S`fQ^9bpyNHT%8x{A)jEdlG?Z1+63SclW0|u~)yB0q-T)wo1Sd+eNHE z)`B#|Qjh!7kWZkVa`Q|MXbw~)fB>Iqqcg%>S-Q$QAJ$~P9(F@t7q2gTR2^$i;Zv@{ zXpID2Gl)PnyS)@Lf?uIlU3ezFDL@6{Z2h_S;!IdXy8uY;V0JSAa(J3aF}D)w<&3#@ zQ$%V9qC%u^deVp0*6QPb1eo1}rI?@ic-EDn!~f+W1)6bE%(!4jY}MK&9vv^yMc=Q{ zS%+=nHW?Mr$~%R%WU(aus&HJ@rMIt^enGLF;Jf_mbC=(uiiPEcvK=KlMh2$$vRY3y zg&v#N9B+xe{ERDNo*6-;37F+7_*(kNp4-1OZG+0uphG;G;SZn$VtDJAjqw?$V82YfbqT6mF|7&7T z#Lco;$wk`KqWra4EPDbwnUh7+KNKk(vBH9QlSSTkpt)opF& zs-E}8Z0(Y*pM~*~z8pBWXMXSP?R#0}tv&4q&*zm}rT^Xu_A{BC7*xg~_mx(7j3cg; z^Ih0jeDfcXxXjLu$2x1Xi+Wt|otodqc=M;`X}@J}7AC&p!{XKS;k_llUwj=qI4`?F zDy*p4TR^co0_U*U5LGjLZ=V?XQOZ5%0u;iksY$U{X6^QA=ZWHJ`aPn&=T1ZB2pPOX- zhrS+zt6DjojS!WWH1V6j9AXgIPIO6bk+rC{ZI-43bqvchwG<`?|2SRUix;6D;HK*S%LszR%f-(t*KpaIEC(oey8*CpR7LR)mf zDgqU|c*QKaL%7Y%!g)?xK6I|*^xc*Gt2-jF?3A9@Zr_dOJ32q8?9QvZSU98>`99X> z)^AD%P5^03jYQ>Ck+Zv@!P>ADL%Ow}?|yjQowaCqc?3(I9}%U<4aK=O&1j-^_adZu zhqek^dS=eEzXD^CQA8R?oV*KN4vgWUi&8*>*ZxB1AGPDbp)%B+1Y^wR5n#{sO}t8w z0I8f-tUk$wy_em-pa6XkyTVchiqIipJ5QXhVyTlBMMwP<_Pc9j!s{$eBB4wrQ}nV6 za&o!A9dO&1Pwgq*C6HHL?t~O?R+y$a;Ji-wk16j61+&}x{kR$JnJ`1SqHu>mM!`?C z;DEk9VhyyG<4j0ik_q!_A@UA9q{R^YZ}rRD3q?8-!~_y2ZZjlL*6xv%tZ)P}!BA6`3^n~%vv zZJgEyQ%Be5zvFW=s#~G~KiXIn6q9iK#YREEyP4D9fj$X@>nDkUkky;mroeG zI38TtU8u3>JZOHQH_=kR>6PrO$4X*&{%!pI$0pDCCVEY3zsBPbYml9Xm-sFuCsM$8 zwi!5WN7qkpCUFhXF?bbYw|N$e23+p*FC!O9{FX~w7{p z>0vub1KMf3b=ewVy=2y{|9SY$bZwRN_}fd`0-mpi!i^U$ZnWGq6=R*N4Y>Bmi+Vsl zz6`I&IdSmmb($er;Z#AoC;@YtG9a_O0*S>%XKeF;@nzznAl^ubI^ewxNI)DVa^UY1j`!d~bUhFr1$kpMyzjms zB#YB$2LKa!)uV%ptXL3%u0j-|AmIzJ zviR?5FC%k*tRj@C5Oa*f=6xN(^X(}eePIkMffpLk4m1Pb zD(}NlD5g%ucnjH<)>Xs6mUFUKD>Nt>JBBu@Kqs}O1LT_taBa7{g=f)Y#t z6?^nk|CssFi$6t24^S5`ue5Zlhe{|Wd5!ChMnd;5xrweP+(+zj`rSkb^y)!f&@;j$ zWO1kd$q~~9{HKkgCUH;!J?$z)UW3dr3gp$as+ndEmahj|-CveYm!Vs8V54`ukvZBO z&VxZ!GeNB%ZXKYPAWDSde6c{UAydfgsM`JyHaKkmc9CNmXk*D857#Gv`vHKVoWd#g@YIL@&SWqD>6GgIM}eR@(^>pO+8RCk9E2ko z+s6L14+cDbp3;f$>%D~3FC!DT>l0MNqWgn3oDahy-V}|-yxIN|e76`m^`J}eQ!ONR zV^K)+7ZdifbSTE|GW=h}>LO6I9z@De`;X}Hkf}p#mV#G0_t(;CcVfT5tIuSh_>By6 zqdNX?7e3CICV(z@B^MtfqXVX$*{k1BK&zbm<@mpW8&$cuEOq0@$$SG%JMh+y3|^?< z-J&s2V6?3_n`Ux!=>Z(&fOOEVX__&7VTg8cpYS(Oo2^16Tgwzc;DtB;P+e9LT;dhY zx6qcq!c+x`!X_f~3Y>d|)p4H(>w{hR>Fz>NFvVs3hbawB%HSj+m{+7YFc#cd(&@Vs-9wbn| zCIGXv5qtE7L{tx$a-dpGB=!KL3^fnm{{e0i- zfYkUn{QMi3mcO=~ioUTB)5Rc(ER24k6IY~nS|rCCK0&K@Y!q1D!#nhAWJDe$|1yO; zE`U)75V1C)Ol`W07Ftjum&|(Ycx4XO3nG9)Ml@GQO9LcFbl|xvc5u!#i$(|}(b2Sj zqKZlp-n5>nS%YU53R29|Kh}WrCoVIEe>I@MP1!yFC42pS_R4oXPttG<$>#kr^*-}a z(@jdQYcNgXdXcZmP9pCCQwC}ZxP;TIfJS^#eRgrZ1_yMqfS-lWhn2JSJ{gsa)_cr>vWMTdBic(*muilyi& z_Wxl9@uQohk4tTuVFwzna# z#I9DH1|Wk)3}J0Jh^TfX@`tdmM0x@41i;DvDgvU;+$6zl#UanlNRnM#0u}RAS1N;o zC3*N7C5Fc^k=;{AO3p;gIu(-%t7s4d3%M=lL7{hvf0TvNro| zUkr=dZ)&pHZ;Pji@d;De4X7cmfuQaa?Z4qeappQEm8JCER#hK=Io=es2fd6*l~X~} zwyMUtj?9>*P6Zet>1-zfk639_E>N$M*xN|hQART$51H_LoZ1XH@0 z)AWenG>4r21Q*!qf&TL?n|OX`?I3s3nK^)OQ#XbT6~U_QXNP{~!t$Ez!Hf(b1qR~T z&_f$fy!-WEqHx2&1akr}0VQpAbCD+hp zO!`yXh>M8L@QOQ>EV$t)zKD8N7WVP@dG>$Hc3&9jy}AExUtF$X(*tk8l&Wtxx;nUe zgM+L1>ostciRcefycq11j^P4hy7k1JcE&WVjdk*Dm~60))wUD6DOGKKn{JC&e?E1A zR?-#E=@7iFrXofWkES;4H3np)k&wa1RttI+`@mG*i9?AY4au$tG~e zw4Lq3R@vM)*uv@<%%ZJg85EZj!NJL2Sg>{jQj z{qEdXMG|7BU6BI|njeZj3)s1{CkKMhiI>2o{mWkyq*zM?^}aZd1J6SV^nqi{U!=S( z%qy56VHY5Ye^}cXb6LCJBOb5#Q5g_(dHui}d~}y#NGk%wm{+UL^d~X>Gi_yXxwYLm zZV1%B=iw%^89(%56Or8)Q-~-44Kd_KHAGd&Z1*79ypenF#7w4ih6ot#@?DYfmzXii zEH8G0L*NH7JT1)>yeg9UVjpUXI~T<13T+%!U^f=6Hhm8XS*nfg*N%gD6boFxp&b_% zsR-{usR3NtiY(SYZnqYk`%{u}h4n@TaAr9gD)`Z_^1x0kU>R5O$8+jEaVJ}UE{h?P zsfJH|Tk2Z^0tJf%W&k=P393b3XSni$Kfh?--h2ZcBf^_qzO`9mKr_$^iq7-9`^(00 zZL|U*`nK=uMX2hVaFgLOR}h07JKnE|H>YHGYHR~;JTN}iJXWEjujfb!=bYFZ-U%zL1kr)Q$>ZM0J?z1b zMpH~KdVwSLQgL)0e+PCfR^jlUjEY$kEiBpM4v(=cosI@(U&_VaLF6l6@LEd_;6R~F zWLXY=e1)jEN2;B%?`xWa(b-?Oc#ljC*31S; zKVxn6`x32hz)Bo8vDEB;KpI}N8Vpl+2$3HPDkgV}gHw;_(_UQL5q#|SKuK;WJe3qt zHcA^k@VRL03p@B+)s*3DiRpTY{VZueqpz#LzWG~F@mI+71iASddo2+(1T-rI)@uV^ zy%$@v_=f32sCXx|oM1I(OhjV_WCxa5|2^UJ&(@Yjwv}XG!ret)0*Wl3K!2WC@!}W` z#n2!=hD#pLDkkgzc+YuD^4)yRj=_i5c?vL98mFPj71ro zw90~SAdn}9V|O`RzZfDYXrXOGf7Q)1;y&OSdf>D_(rGnVTQj#czokfweRhPg>;SGL zWwvlyX^OQ%&urG~g^XXKAF2TIM0Ekbk!BPpQ;m-hJ@$C3Gsb>NB*Pz9o(Ei3uNGux z)cxNk;zld?FYTJd!c^}s^{x%h(`+Fe zGD~{Msbz&vOYg3~lXLQFLFI<%v~>q3%LkCu2|DF3rwr2OwoVw5&C*K^<4*~@=4G?`^YP}AS*2BGC znT~-D?GBqMdQVnB?BrRQaw`AZm_ncjn38%Xq4ieHr-4dLNCxk4HNd#B>#a+wo+!-L zU6zc6-r(c<(K}-}Ie^Jex_jun{pNrQbGpzN-hZu=b?%}tc5w2ZWw+%HbiW_AfNwf* zW~q%m$7R0XxPSRV3#+S{bKCt=0s0#Bf1yb-U6>05Y6E9O=#(z}55*&qU+~d6Mmao{ z*8+>q2FG9O^;ac~_Z1g?7@*8nPP&5V30bdpA1S?kDK-$#qO7oH(0 z(y#hTCSC?*`@KlaIb`*@F8JDPH=$NJ&;2>b6Z>W*P&GCz?;bksyVuO6>cXZ_eT-nc zbJn0iIGH({n>TN2Kc71`_tt3E<;`|{cwt=vMzKS8r`$AIGR2{!J>|KY;pt3O89#Ko zj+#d{D>5Znks&K5JZ<8ei1ck~K3Z`_NU9=%iW?Da=lmK?c~*Sfk_5e!wPt!Hi?eNi zfk-Hv;{>=FA&nC3SY>>tY|wqGmdH#A@cbq55D^@)v6i4>e_fD`b3c48Ft`i@?`ICe zoJUk83h+f4hW{YT@<*h=X#OueNxe`%K0c`By6U6;Ae)mTJp&k;X$^bN|79UWtJwY}kdR?nN~ zEZI|PrOBI2up;anohva?gsM;A7Qj5fZV6qgUro3KZkSr)8v&tv{GSMgI<@Eas!`fh z`|!klq);{f5WWbh|8zs?c!Iw!INl)6&es}N!A*8I3C1u^FfqqKUQ^h5?}G%;o;3YI zV~|7&C2B0m10>w-Al6UsUui2jAN^BxUhqw3e(7VrU^bOQX7WvpW23KcVQ+1YlN5Ww zFiqf}IH&d92MHY>w@S7BlDa_zWW{_D_ zC0ZM8yai^K7Fpv!Ux80!_xb82nQ(U&JSZ#@D}HsYJWh;2ZbeSR-^kWP*`D#J+fBvN7AVSDc+u6eyA@xUNd5FnB;rcRjLo(~Q zd>gzQXX+14FXEm;`0uF=f**KEB?Bh^o*cZzC|^6ko#eanI;5~Ws(TK;^sdH5SD1YQ&wIe`9+e||?LUc>UK1aO0(x1PYQ+oG2s zv5_*;?tGSe5En)HG2N+5n}}7Bk_yEd7MqEimoT-6bOl0jaw&xZP|_5E{m_PuJKS`g z(44)zC~t?r5N2chlmxRJbM0LjDDb>AD|$Hfn*4B3-Y|&J5ODwKw2$JgkEOU`9 z9>onAvWRgw(IXYvq$&EW{De#kYNXxs{Y1*hW?iXI;k@N#w02kXGTcBjx4kph220LI zrlV}PCbLurCy)6~a4C9mSKz#tQA3(eyesb%e+cs2K0~`dGZe0q7$iK2W8}Vw=jthEAQ;uNjgt9FIxt z+>!RVBu(Pnp%!VJ{#{Cq*IS|rJi(dXBKfg$V}Hl^Zn?W2lw1G3&8jituXf@Gos;cC z{o~zdZ8zVHQm+&5J4lUOzh0WH?wq?sgRoNpdW0{}34nmxRdvBWxqV90EZ>NsTOjh1 z6=aNQ4Zpl$%9L^5fl~Q+mF+$rhWm6OBVLTX7418v02ki*<&4ADR;Y_*zYYWzNV-!(GNq!An(TPL zkqmSUW96^F#IAZ5wytgimC%~^t()~IrZ*@;ToP2!L13?H8a^GL`71vy|3&SvvJ~@+ zCHp?2q>G^&h;-Yn+AzlDB(<=rq5bTC4K`@t3w&zLah~cyUdFG*MLn2>bM_eC0)f60 zdkJ-b{(tnNPb9Mr)KzluDq~%PyHwsE#d+TQP0es3?m`BPp-Cm&WiJ8Dy5O7l(Jden z7tpvA8D`k#qJcS<1YMRJa4NFrC?SoXahT*g_~L3U!TQ=VLt1!}+xs|IL6xb`;YMp6 z@pEC@&e_^NdH(YPTPZbykR=+R{6wMjN$^u)7ypC; z8^Xa*4s4{z_Bn%!S!d);^jl3AE~D^`{YG37#|1&*n*@9-L=^?F^{_cp=g-71O?)rrva~@YH;L47jOi?4FA}{?Cr#S%6 zY1}fTjHMB#Esf)@(A+tXdx-SCY4xY=dOUqhle1W`7?me!vW+uKS<74a{AMR8&U!SM zq5oJIGCiXLW-XQj!oT4u79#%u{TdP^<_;yWLGb4$u5Je5DrM7K`6_HJnE1tdAo@Dl zF@{@j)FCb0yO7ba4xhnZLj9!wQLTH01wHtl8It?ds!W${2>3Wyi}!2Fc0o0FMxOx= zaibbPv%Cc6M98lC8=T};E6Q^&RrR07$e4Hp=xI)MBUDi;l5#**jN`Hg#I*HO z`rpt>GhhWz-s9cUhax)e-v8L0ADuTZ$+>gw%o7g_|0<|L?cu6H7>i zCF#Tx^X8xWkCJH2(b2!@f0imhTrqFObQ@-FX0v3M|g;& znkda`d>Y~2NEXK>m3^dG&l5}V$6w#HK07e8H7>{J`?e3ABTCsG_I!^zev|vPV|LFh zZmDTu7Qya*YE#Q@eH>D8VoPr>il4y8=rMM10Hq$`!u3BQ5aTObnM0k{4>dFU> z;A~~_tNL9N zJ(4$RW{Q0W9gDEp!FBlkiFI?VeB|{PI03=U8uuPx>VAlX5hlUl;d)F0KjDLRmM~5TDl=3)olSOOmVR*LCSoxRhE}rsJs`U-Ty$Me(iI>mk0_NFR)@|=NRvE zy)bsH`zogKSGrDo8+xP97`4?E(H!`>RDRp69pCP}$nGE(2Win8;AK#FexK|Vx1Be# zfbSw=#^=~S>~pZS=aiaNm_r#M>G+wc4Sza#1qIpy8&45J&A8;z7wYWPOARAtz@0yII1@lqtV_p6|)qM za|#r2woT8>wufB$4wlY@Js_k^Mt89;vVRl6(jT%+XR*MYkN&xrsOMx-Ia#nl78T3X zarm*sFwRcd2s3YvOAWqoOUv-+#R;ow-*x8KVm@`a+*p~3hMrEla$W7+(=-Y8L&o?5 zd3uxi+)P9DAf;lbFQTB0h2bB;Vr`T)2Cs8e8gWdYHT}1|$H)4xsVdQhm5z)hF9;7I zFnyL!D30BHsS5ooLB;R;Q-n@HOW7moW>0iMy~;{CW_9p*E&R!!nW7Ys$m)>Jq3PR*Z=G46 z+P=Smy+!)Cz+kAhu)Mny!q**Pag$7$c*X|2i1#yXp7@^)- z7`;4bI{L0(N2qocBl)0`7JnTPa-9e2yqrLwIsTkfeuS8|JY~PK$0tE-Yo<2dbvY6n zMW=|NOG1ftela*n{=k!LbV2jx^S>_nw>MJ+I#y(0HTp$S4vMRHH9dv@iZ6~BS|Fsf!pSsM;C-b8)F7tbd- zzXMyuoY?1ap94;2$Xr~ZuFDt-Ak>Y)4pu-XtL9#}h4ZVas1O6op-1lsl?-`Jz@6QK z-Xc47q$-o02Tr;i%waUV{^GFDOZ&Ds|JLR9; z70aWTby5PS9rb@f_f_Sl_;yS5~Bha_@I9hz>5#~PhD5mmaH_85DZ*ek<%+Vj(Siw{y?@KW)fkwoj(-SnrD-*4qYic1>Q6{aefY zzilK*K*>8Qyfx;!r`Z!!xw1y}@yE7xD6g41>k){ikQyl5NWt%cPX3v;%`a@R+f&~( zvS^P_gYXHq>b=b|+mA`?*YpR0tSPZ$D6t}0pKD)uLu6l6C!%Meg>3{7F@HiSX)v`3 zDot4}#{Ccb*X<65vZSZ;>I{M6iM2y|6|UeMf5orwB#3cA+xuy`M#V+e{d^Eo21CmY@-s4iR~f7gBh( zRCZgdLgMTr>Kmk8%|iF8+`icVzUv{Ug}kY=4qcDVAqbTV?mVBA=&MtMXsz59U2(v6 z;f#WpV<+!_Dg}Kw+f;8C)(_~KR-g^XwTckSL7w775`0nTaD`Na%Wmgo(E>Nl)^}`% z0AGwWGfs%O04Pul$^MC)N7liSl|q+Y-U|YeXU=~uJD}ss6yRcMV4e7K3PQnAl4MJ! zQn2`&!}&CsW8OvN{Svu~NMSUlxYK_tR3UAY4V@)`H;yjcaaWrq;m3!mH$`38^=)YK z#QBDGka_D6953(LlN7ObtEF9VlsUWN<1@?g*DdonRQ2<+Mqsz85#Ph}x-NM3?qYrM zQLSgIM}iO^dL|=)TqHa1c|t_ZXryM0QU|<^jd*7RZFW0bYkc=d zC|^G&R7jyrdyrgNMslftbgI*%P2%FSYNW^Rplul?X#J9*;FebQfV!|YcH2OtIAE9K zHTrqr0Dt)a0)FV#e<3yf{3IPxva@oaCtm)ib`d*^Hb}42WUFJ_q3V%xP&l@~?ZZa2 z31nqcw@RFay2oHyi5=p(l9ZSqpRo(s$zu9K>jHKMb$UN?^e;9(RZEw(eZ#)I;srxq z)xbgQT!*U2{-yF}a?qJpAI_{Qm=%)eRCH_LdyY+B#_oX|k0L=Hk@<0o>Z?sc#H)51 z2m=UZ0|J^l1Wi)y28u&ClSmZ_U#W!)Kly;59)4)gr89Yb*ROcc*2Yf8U;J{s;=-BP z-6s@rGOJSuY{t25@QuakV2$(4FP47_v=PeRG(mLt+b|SQN|-U$GOK5iLU+jxLa%4* ztX1o*qQ#LplG4*^AcPYqA#TG+12Tsj>fTJa>-uU9!7K2#}`MOq;S|Y zZ-QQ*JY9bwSPccf$Bk-FeSnjwNfvwAX?X~vbsFIg^<62Z{K;`C)t#_arz8Moc(81w zYtSBAnWf2U~#?1E_Agc68H{2#lC+?I9IC?sL#g5z6IlO9zv~=l|y-lH|`$Ngs|drT$-myM;&OfLWSC=`&?L~h5f#MtuXK-kS{vVbN=SQZ2 zI(F7soP*{$(mJD>;jMwX%I|zF;mLFEbYRIkR12v8pG-BcG{lYV0mugY8E)6w@f{^+ zRHLt+w4+wvDVn^v>EGP7C!al}JlWKD@Q}$k_c?s$iD^}}`4t%=$DaRsZ=tUr-Wyy| zZabSEqbhY@h^9zxOoipk%q1p+s9Z3g%0v;pMt`b<5L;G40;C24lZxL5ykuj#SQMT= zTO#7w_Y)s0iye!{yVMib4`Qkn?8q}<(fi5YYc+8s>~hsl4ID4c4>YO@*s4$13!Ylx zD!;xX@--XrG1GA7J+KGH$#mt2BsnH3%t;MUKX{Qyya#_O32m8U2H*YNIo^s-1D{CZ9LAHfY+}KP3 zoX2^vA>U-JXCtfY6K|gAd`I3Mv3`Z2I?hMs`2g!&h_qxpAX2~I@N{Ir%4xH`g zKt2kcz6fF`0t!`v(LuUgC9Ke#R$ly^6#BRc1gIoXZ zeE`|%CX>Mi-Q6^4HcYqMaq`r|#8ujbJ7&VSH^+S5G-Yb>jXNs6&+Ae1L9UR!AG3NS7Mw(Tgy{8@vpVbMFBnPXzba8Prf<-QP)$c#M zOp^a2x~!Y#IP_-#I$kxM1gc8V8Q+0fPTx{Z5T{&WGX2dTZRk)TNg+EIC9-AIJxkRX zV6CN0O$5}bY^&cFXI;32N4Gfxc}Wek@xQPB9gRD ztz6c8Jg(0B?JHQ5CjP$TAI=RRKYLRn8skN_aLZ$wkpu$i9!MRt>AE z!*I-cyqapg1PV$q$36hQ$&2tnh!HMekNw0%AB>brp%7Nv+ku$CQ^=RDmniNmRCB!gW zx!-pz#3xk5okbxe(FLdWWXT5*OG#5w@M?$b?&1P!M75C>dt@HRL=(Ce`%jSS75Tu6 zm7l5-SL;(zZ*RNtZxu$dks8{bq+(9#;0M-C!sHMY>tzjU9 zl2_0M+6NxK$wFs8$5W7(@}RDOO_vlCM=Lfo{tJ=N=-HGcOm1~%I}euoemzs<@C;9W zLWu$I^^!?85x{_&Ce)HAi-!g)7_2Z*4b6fj0@~o19IkG92`;t<%XEUT4BiO;U}X3j zu?WdDwG*}uB)3jntSSGit+wNc9nDa7Wec#U;A6btPqRWPVVIS(w)x)Aiw(bPF7^pm z*x3kb#IOF9>`&)DrUjuhu8Ah57Gjg4&-zeOUmB7ikX{HJli>tGzasp!}F5YT)Df2oA$ntW=5&ecj+$`M$YuWeeHkz7@$5H%}f zDZwrudgrkCF%Rs1*Zou}_C1Nw`_0j#_x*Zn`ICC#>n?2bTBmgw;LH`4j2L-ez;!*j z616V8xvZm%sc>rqCI3wQuqlN%!&q>$!t-77tDK(?=q>NMa>VbB-2HbfQ-VuXTYUDu zIun4A@xPxozRYH>>DZmnQ6@nH)x}g?p2x&tg3+nbymQI&4&uBu6FKOF$8eqbA6MgT z6v-)h9fWkyKI7@*e2}%Bg7jyEYmbCsvnGF}2WxL=tZO|8#;3>zptjJ(4=@6fLmHH! z?5RJu&Ul~PX1ncOKd7Ofw6G0uG$ZAKtdU;4SkBcXIU85@Q{|_!1~_Pqy|=}V#hF88 zMv<>@C>zo+S!wzNwleR7rZDqe=LHI*Y_a+FQu_rjx?CzmX)DB*hA$sX9T}Km{+cuv z?iipK+~f`9@B*pt=Ls{XioK>?Pa1+Ic*3f0!!H|U0{H+*Y00!>yj-wkgQNn@73sc? z*oZ2P)GH~K%sXo@6Q9k3Lxy(*`yW|GH*94Zpg$&dh~BNjOcvL6w-rK~4YndNpZ$9~ z$M?lZel7-6+Zn?{Y;AcRcC)OXe4cRwg(*4zWfGWAW|M}-7E0%uVR#1d??)+>TQL(b{nk*7Bt=?PCBo^(F*^6M= zaBTNa!I$$&g4(UGrs&w)*+_Ye)(e#b=@@yU7BLRF+A`eRGiv-W?xXsx>}OtMg(1w!4q z3S^^V?VWaP>zPRyqQ4k>#V*%* z9lwvj?7j)bK)w?e&?V|rE_pD%uXU^g2@U=70nV(H85q_e9HuVX(NrP({S1rjMWPI^ z+wE0~lGeXnSJdP#{ZcIJ>fqIsTYPzi3XC*1i74 zD%LJRTOFO=*550g8cS>INWo(?IuWH-IfLWGFicKX;iGiLY3-4&l}{ani=}#pGa2W0 zSLc{r8eQEIy{9ad_2)I>&7H8%%ltGZc=<43DyYZ!X&IB0h4>Y_;{7Ld_*R2l6V7Eo z1x;-;3@@!fg5F}UuOl7{dR-HW&Z_`Zz^$2Z?6g7;hvse&v(m@I_^ek(&#BHXV4chd zJ-jC?UhHU3L6ibGN>D$or~-75=oN27#c+x+Az?P_HxFE_#ZzS3zcpiKO+a?0KT{Wo zo<+k*&GJSZv$ei$FKm43y$3fp>pUMOKsDgJcJ^ipBZmM2nW)O%47G>ycS51E8*1W` zce-{`t+d*y*+bZxYjmq26|Z~<$){Lzh@DvWvHDQgZb_dNp2K#(FK(@7gvrof@?NkP@8A_cy3pGa zv-g)Z@5P=3k>tD!kjod^44F=s3VFkw@L*BqFa~w;X7oMOYQS$T1(78EK_eff*dS_j zVUj6Fj#>ct?AftS){8NSOjUa963)=@`;uCrWmzzVrQrC{xDvph#lppHb2dLcao&wq zMR6P7sENu1MCcK}_QTl#FK~Pto1lURe*dATTJ|!ows#zz&zn3af8c3=G>5x}wfpDj z<&xy7;xUaux?;L4J2B-qy=U9Wd{$Kn$m%7!yy2Ig2U+nIoymR< z>fpR%X2!^&1!u-AzyJ)$y8_ECXD_0NW1QySCPB_~7xlS1^MPsqzw%5?IRijX6{id! z+nMOWrAEL2M>jzX0iA-ZbOMS-zzIL~Nt>N9#P%d=g6vSR(E4_>b?{WzYWbx!T(f=s z*%yOquNrI(6)2)gBJ-;q4BCW@;f!8wAPC;2Io~cn&6~7;9W(>fEJ{B8_0{|^sn4zE z4&;_v4vjgUv5Wv5qhD2QO{kGoz9O4AT)sDuBv%>TUe<==2l4)a`KCJQ!Pp@lFH~vi z=OdD&A=Xfs%o=e9pLYmZX2KB_PQ0V|wrFHf@G1#AgwZ$;^~J~%A$G+EF~juDS9i;E z=CYVZ`gjdkrl`gT?MuV<6gD~kb?nPQ4nXrfYz(LpO%31;wa3t7cyDv6*fJZoKG;4f ztImumAiK<9LVTqq!svx(ZX-J9b`OVykCMZ~4nL-=LL?@K8|U$n?_##qag45Y!a*;* z*MDo_*rI)hl`^y|s>Z7KU&9QX@?=vpqCWOwk;147bAhlJ(_3{_Vt-}*^K-pbqdVQ4 zL<`D|{#zX%;K?E65%r$WNbgP^-sdQFxpJOyhJGzblfI_6OyS+7zh##kD|-KR%^Mxi zLPLcf5-VK%S6|6WA5JUGx}jiW%^9LL4ZQBl1i~UG{F@UGM4$9qTXy@Kauk^^n!v@* z2;bJW!WXQ#x*cjQp_K^Y2_`sPtjjNoI)CDV>cT}aVEph&74U3kWR9bu<6_nvX{kM_ z3r?>lc&%)_Vgh@dl!5i=8Es@2XuNK$*l`qR0uIujPj0B2M{_g+mo-BOu7Y|e$^kA5Gzi_jn` zBiAv=LeXB=Y3H~Mo|A|W&PP%kpfz;)fPAek^7MdXE zou1bqE|KW|eO@$6T(bE3*BVya$#jLRjLfI%{3JXlFMn2T!T_%!cVC@2yu~Ph6EWwX ztp3FNh@ zp+!w8+7$KiGq*I#0BlQ=aQT($bqe_SqrQC&37d}2XF#?Lo)lPcDC+9@H=u%_kDD;O z1K;qzUdh6Y7xXCiq7$g`24CTAWt+A=V39S{XB|oa7cG(MxYJA9zpdS~=-yen=9zgk zRL4f<6Fi$ypjFhAd7eFItyr@1Rr%+w{P=Xvvdm@VFeofn5x7CV>X^DiCk)h+$;S)1 zWk0V%uQ<1aw|HEe(=yK`S7i4Os;ehPv_apy+JTvkSL&ulhOH0V+G45E&}YH#;6d&T zRfz!?9|@kZZIGtPq}JNe9OTaz+0CWWFDjr`rn2Jq<#?LRc&XTNnmX&g_0%>wFPh}= z25f~mg+8YqJ2i&xCzj+%Z=x`m>frDsc6^3sCB#_Joy$4Teuj+{gR8D!hqRWvW_h_* zRL)KIFgc6KTU2(P_THcOTN=nakm8Hb)Wo&NeXyv$)!6x@Qd!ZX0-1rUucsABGBz3` zi=VrH0)cXSrS_7xn@0m3js3wgzemiJ#KiGvH_ySvi+8k3D4*SqI)E`_vD6)Vz%1s^jyq$FoxrrkOx*GM{lK#gF=udV$Cf z;Uru1XE&!BW9e^v{&eZDU^ORyPUxTvgvD0$9_%m0;rJ92=9uFFLY7FAcH9WBV63Y5 zKbXjleFok8Yj^9|e%wC7LI~OI!-=dpb;U#Wkd-@w+BNJWdi`=YIkYptG>64aih+_+ zhgI|pyHytWgaaCViiRqN1X!Ls+%o_D?n&Is*`wCZtJ64Ce%_ zaMAn6b(4$f;VVw;j-bq%D%i+cv>?!ahDt3QQmb~@fU5SUZV@Q;x-;z=D=m>1&@l`; zkw+TV4CIGea~5^`iTlKlH>p|58PIoCxAER>gwY>18j4m4x!XU#9;_W;#r-GqF{#D8 z&uc71;^Ecm@U2M{d0=RaGlRVufl>#Ep;{wqBN^<(*%vU@je)DGkVbmJdr1!$J)I z_}GA>g3JKNd5p{7B?lumEiZwCVEDo9yzP*{F&W@ENq%GQ*c>w8y|}P8a;9b@JqyrRb>`RB7%G z`34;JVyk|p4sJ&bneFW7Pi8)V@jp_1GptsQ; zqnO?&DbB-OA;iPi#YjMX_KQ_2&vO13S&`&Gs(0FdE2`;{UXnPwspwTof35aZF<#ic z(@o6*qpTw*n~eW0kxjAg(WLHAi?Px^FlwR!+ILa zd6{wKIhXmwz_mwxrdLRzRqyBTbE1rU9UGqO)P3RzdCOFV;02|q!ZbZqh*Xur z+uQ*BzDQjuE*_+M=v7FD%9?Q;n3}e02Es57ooWE;n_78`2Xu#%vVM7VJtSL0rx{Ia zAtM+)TZ+ze24%0P(334$@Y@u7l57B${@pAT-^HLwrW^*YoWfVy?fP3wo^`~*w=ke@fYykOrI77_s5Rq#>p=V}`g%f6~y&4cO*{*c3ll}2q4kZzIgrD;s=3AQ}VtBNq&G`i)^OO9IBN%FQ$0-vsEH>$=GCh4)$ zU&U{i#5TuPe(0&_wJ$J{O^DK9waGpfdd!b!xra~|)cQ^>yHf{@d|H@AUB!h2)45Z< zB+<=oZa{XlBS!wv2>4iVEnS|oIFOME#J&Sxmi$ZCOcgia_$xUsh3pLY zlygCEl&B~h7aTu}HdI>xKe(ohNEx_NUx)4ow%aGdwtY@tn|Cx%BXe7OUyC8I!F-4` z<}W4N{In($`X+}byH_U(BPYHuvq8$?sR@O|({cdwKJK7*MI%SLx3wb^CsofgELci~ z%FS~C$^~^J;P&_Slm~^elkrFq1jr^~&fXm~P28{-L%e11J6I~NhdBKm%vd~&@OVvA z5R>Nz^5A6_Gn1Lc>zg%%_Qn%WCSm=6n3yiM5u&q?2Y6L;%IN=O7Qje6i-UL7+!Q6^ zO3$D(hT;Yr#Bn0vfhcZ(e$_k0bK3wC!n=$3^Zq#=$lE$Fb}E}4W|dAmuKTsh)BH7& zxif8e>>$uu-dp*r_g#FVlT^Tl4T$Ajmpb7D%nWZ>OWfYC{C4fsd1pbw4m0C(kL}(C z7?@rn;p?02+?I-*jI*0os`y?S{aELocxZ=Gx$$4-;{=!BX zcNrlVHhs+6D70vMOOPeJP(FfiRaasCM~DMCm~=znfn$=?5fOpCl%Hk64X zyBl@BnyNk zf~3M!CUDe0lhbm4P-Lgni!LV;-=*9@f2u16xDc+W&tsbLN4s~rEjXMRn%kI3dTehp zE|#b`HQbn@FY0i4!8=`PXY+I zyEt#~<=<)LI4Yj(UFBKx(m*`9+XZ(nF9SWeAZXh%s1PuE!9C}2tcb{&+}d8@x&!tM zKcV|1_Scw#SD_}DH9=Q%aN)Rnk!RC_W{su|8bg3zlM>C*z4_d|MqJ%yz`=n>@)I#b ztgc2~rzPJ{eIhzB{~nn0UR_co&pS_jvwnd!R;X#hcz(#&wP`E}D=39*=-51tZaeFs zS!Kuz>Zi;X_SbHqIX;6lD8>CF$0^1lA^y#J<0b2xyCh}?)h6P(C(sdtVXJSe$-V3q z?h)7rA$_)dmZ14ICUl6#Et;bEKrbWXZlf)5X@w z8f6ML$~M|6&^8Axodt+OI=%lrn=MNkqP{(k!EW;IFr108KC*Oo4M7pmAm^Ei+1KcT z<0E7(&?s?cVM#;ui5Q9FK>Us&Hv3e|Ojpph2_V=3U7U+f6`28Rb8w*h z#JIm3=(owuf~I7b0r_3mB!R>7KET^SR0KDz$n7wzG)cglB)C1wc$3$2`-GAix#!9G z89^5@-RoDh#Peq1;*hkHq+{M6hMT;IE3VRd7WArFsR__ygy$}0+sS6~6?{Uz)U_S6 zr4vdHaz~f(fy;8J&D6EPmqFm{`2bbEihRTcZ{X$8%Fq+x#&2_7UMRsRi{(y0M0mfQ zX5$22E~TfhCYEg#XUcnp6NqEMghlt~>D53LzZ@r*Y4>V%I7n|tG#9cD;_={)^PTPD zFz5x<0P-*$0bULOz$&Av?6)ze$xpKqQ}>if*og%-mHLfXYo7Mkp~Z3+*BSPk?s z7(SKWU^PhW>s*A;i`yN9ycw(&))!Da$rtN?!pPrvA2}wRT}Vs+&f>cJ6_{DPJF?dS zvXg^j^Sr!Zpc% zf7wl=x|Pk^zqOu>XsUdLJ>~vXZ{FQx<%#+pUh%i<^r%69Ng74kl;M1n)^A7fGQ)cf zkzaZ-Eb@K%x3A>D^|F5}8&t@FueB`p1Wemc^6a-YJoqv~QsGO1L=C}(K#@*wafXpjwg8UbP?*Prw}CNJrs!Y`e^-o<6^`oy$=r2(AHpH&xv3x#)W5hA1W zm?rQST{aPgC?j^nR+8PHwpsWg<|nDK(Ge1Rta zq*#BWXtB32?8qQ>rPZa+!|m*lR;&<`Y8isneN(C(m-`DYA1Dz#hvGnmU9a|;XO?a+ zxg7`|3t8NPrqb#CAkleZvmi&*px$K0$RkZ49&;THd%Wg0c2s4U6accj1DWGGj1 z8GQWn727=F9zmtrloOeu?d*b=zcz@IlE&yX^Z|M1J9SDk`mMiugJ(C>uJ#5`68|p# zy`1DxV_}osP_g9LN&3>3NQsWqNkbB1mZ4~b2kH(02Or(=^hyf9RgDSlBVcnZ*_rSZ z9XaKT8Gq}nd!!S%Ot8sV+5=7S(ybi~c*&6vX1 zE55Mx2-m7`C0ubKh|a+0FEIm_E}msPwa0S(yz7Urj+x*$#Th0zo%XFnM#fw!?h{X2?1|X(u=2MKcHq_tuC0J1R+#5?Q<1sU5rSOiz-`g~^&8Opw_XXli_yaKh0&%Ebw>i@6jb_VGE9#$Do?;wUdzL7aL*{bi~r>DBcdfD z#c>DEPb#EGV5xzgm|KSS*Gh*l^w{G63Wlg&gWP3nunQIj;T_8&Hbyz76{l4+t+Kt! zp3)D(esZ57s*nHIvWh!t%=R*66 zYAr?Mbr-9(=3A%bbnw)e;jqGRdbs7ey_Ld|h^WUwOlK>xAy)r~VKu25f{Z zU1E1)yfExR0lScWcw{U@x^%846(F~wW^>Tjtz#jwpK>j&Dkm!0QWXHa8f4t7XphN$;_UO-k*<@RXh=ra;_Zbs`-|Gcz% zVHG1?t(U7q@(3l;1 z4py)F?kDHf(jPP`>h+nLaFBhYJAN5U7z1ffmtf1ky-5xGa8PzZc9Kzc29!)?y$Ow7 zCjZ8CerOoq4o2}bI(Szaf}!jD19)2v+B#O!L=?zo!o-O$^dM;$Fcts1e}cH4fS2 zc4X3z04&fD7w6C&6E=pFl%N}MP9|Cz;mN1uK!nU%5u|el!)Wt3huWLI#=aQ4I$(df zBax8l6$mcsiFH#3=rfDT4lqYc@k%>bV{plgb7uuEi#0J+i;FG!S@1oJwy|qY{U$WnSq@dunZ=~x82VOsYr8n11&6v9D^1Uu#U z9f*JF6_yX1owHCUU=)(@faLr`>5$)`gn-VCf!TW=HegkKpTB|28sjG>q6G113H&rh1 z<{08+tzL38HRWf%Z2@1eM%qKv=okQO~Ig68u_6za0G7FB-##k<(?KYa{ zB~+>G`@YzJ#F;Sq!C*wm4wnEhBkc6=H#gltj;!s8yHc*7B`)pI>^_ zv8Uhh?xj11%)*=b?5(bjLpkB9MXx@cb6f~)EeNYicdyPq@q$)X{qYqIAM18)>}}sO zH2!ou&sPq{d6@gjf`+YJO@!RjzaEsVl)Vztlm+oSDS(pN96Vd~F`JhI)$i_SQSmS0 zCG^w~d8ssW4$GNm#;}LDPEewh{B*ir$hrp=D*s5`*P*7EDkP|wmawxT!^m(6HP{rr)}abI!dJo(xIsZd?o2K!_5;eT zgH+CUClxO+W#15zwlr)?oZEfHHqY%d=!w0d8%$W}XaF)T69^8q>iAmDUN?t+mG>tNe3!R!g|#hy zO-Re;TVq~1;MV1+@QZBvja7V0e>C**!J2kQ+Vow%F7!c3i6@M&-!OnAXF zU%*C4xE|_0YFDk_D7&5T&oU@dSW{%!QIpye0tRa-glcPRhC}W>;fI^NwPicK30~8- zj6D4_^|-*9IT5A9z|0@%?|0OIgCAr;Bc{s3^C%1l+N&u3bGVoleE_Z7@bd>PT(p_` zl*a?b?~zA&+Uz>NtrPaj=h(@`A%b^xK_oUjKlW4$u97^{tKzlvLFtktn36D-h5R~t8f&GGmqT@p zHF6lEzhG~^$CbbqJV^$%LR@=q4h2XFeIc7d@TNU7w#C_byJ6c_|^6xv5EmIFbwK@+8ulM)SuO_G$)Rv`BjCfNfd`m7C%}(z~Gd$-B11oju#181P9hIe@R{;-NlQ#}c-gwo)e| z-8`EcH6es+ioh5~!_dvTFroS`Fvzec>={Jw#JITR*fVp}_ zBylV~&E!|1CJs#NZA5k8BD2tkE^sp=ayb^ysl<)1sR#KhwnM)gCm7mgzy)2(#J?oe zAoKlABLJ?@1eJ5^5B)gn&cQbShi)MIH3W-cIDsbEy;{-n8-#$m;AQJ4gHv2{Fhm^U zh4B+9T_;9ic1=){kk&q+1{I4?6=&lcRd#d7PE)*&Es?#qY7##FspPqmzI3}(5~M7=km+=&N$_Pw2M4ioNPsAI=^S+9vykk7a@Ct&z;s?{DQ zO49bfS$-xO1__B^r#&M(3#F8kEapwx9~s2mH>Y0sEgyS%X_2~kR^8!f0DOsW%Gu&9 zR_q_KlsbLY2JR?}LYFj9WOie_xb3Zz6NVX02fSo`NHLl&NmjH!MYr_0rdn2iHClBSH+jp-SExOY+#N&a)#EtBMOS<;>kOk+(= zV>J{Y(#ZT?5YuySRlX-n1K(wHg6-*c-i)&kKkiY@z=z55Wv$MM#0%7}aYvVSNH&~; zDbaf<(mn79Rakq!SQr??aYR(6^`}p-7%ROoFvn)70 z>JwmV#ZEQAd+pLq71wvpp*~4-dfQfeJ%N%x+G3kA#8Ue-@*3{+XgUL_io+u}$MwfP zK>(^;aw?tdpa=OSC4U(MZn=f{_dn=iJby1VaJOgi=7L+l{=GcQFq1vW_XwJcY=G@Z z)Jo2s+4yWxT2GL1hgKMbzaBz=b0J&1$$8@TRL1h)%(A)Iqo&ypN7zjQdIry`r(WIR zZHj<9SMrX@F^LYiN=^1w1@^BGCPK0eS4I}Uy~*y?q$=?$whyxZd@!GpnjL+#=G{x@ zWwGxgesu1YU1^vyzQ(g;XG@0rdmhehQPMI5 z5Haw6p=t!K=lVmC|I}(2yc%cIO~#GC9_<4nvpL%0AhcjSQ~|-#SZaEVdCQ1^6{Z4q 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 { val ThemeColors = AppChoicePreference( title = R.string.app_theme, - defaultValue = AppThemeColors.PURPLE, + defaultValue = AppThemeColors.WOLFSKIN, getter = { it.interfacePreferences.appThemeColors }, setter = { prefs, value -> prefs.updateInterfacePreferences { appThemeColors = value } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/preferences/PreferencesContent.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/preferences/PreferencesContent.kt index d95d5aba..a21405c2 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/preferences/PreferencesContent.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/preferences/PreferencesContent.kt @@ -271,6 +271,9 @@ fun PreferencesContent( .fillMaxWidth() .padding(top = 8.dp, bottom = 4.dp), ) + if (group.title == R.string.about) { + WolfskinAbout() + } } val groupPreferences = group.preferences + diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/preferences/WolfskinAbout.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/preferences/WolfskinAbout.kt new file mode 100644 index 00000000..a0814180 --- /dev/null +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/preferences/WolfskinAbout.kt @@ -0,0 +1,28 @@ +package com.github.damontecres.wholphin.ui.preferences + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalUriHandler +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.tv.material3.MaterialTheme +import androidx.tv.material3.Text +import com.github.damontecres.wholphin.R +import com.github.damontecres.wholphin.ui.components.TextButton + +/** Fork identity and a focusable link to the upstream project. */ +@Composable +fun WolfskinAbout() { + val uriHandler = LocalUriHandler.current + val upstreamUrl = stringResource(R.string.wolfskin_upstream_url) + Column(verticalArrangement = Arrangement.spacedBy(8.dp)) { + Text( + text = stringResource(R.string.app_name_long), + style = MaterialTheme.typography.headlineMedium, + ) + TextButton(onClick = { uriHandler.openUri(upstreamUrl) }) { + Text(stringResource(R.string.wolfskin_upstream_credit)) + } + } +} diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/theme/Theme.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/theme/Theme.kt index 8ae95b25..8cce37e5 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/theme/Theme.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/theme/Theme.kt @@ -13,9 +13,10 @@ import com.github.damontecres.wholphin.ui.theme.colors.OledThemeColors import com.github.damontecres.wholphin.ui.theme.colors.OrangeThemeColors import com.github.damontecres.wholphin.ui.theme.colors.PurpleThemeColors import com.github.damontecres.wholphin.ui.theme.colors.RedThemeColors +import com.github.damontecres.wholphin.ui.theme.colors.WolfskinThemeColors val LocalTheme = - compositionLocalOf { AppThemeColors.PURPLE } + compositionLocalOf { AppThemeColors.WOLFSKIN } fun getThemeColors(appThemeColors: AppThemeColors): ThemeColors = when (appThemeColors) { @@ -27,13 +28,14 @@ fun getThemeColors(appThemeColors: AppThemeColors): ThemeColors = AppThemeColors.BOLD_BLUE -> BoldBlueThemeColors AppThemeColors.RED -> RedThemeColors AppThemeColors.BROWN -> BrownThemeColors - AppThemeColors.UNRECOGNIZED -> PurpleThemeColors + AppThemeColors.WOLFSKIN -> WolfskinThemeColors + AppThemeColors.UNRECOGNIZED -> WolfskinThemeColors } @Composable fun WholphinTheme( darkTheme: Boolean = true, - appThemeColors: AppThemeColors = AppThemeColors.PURPLE, + appThemeColors: AppThemeColors = AppThemeColors.WOLFSKIN, content: @Composable () -> Unit, ) { val themeColors = getThemeColors(appThemeColors) diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/theme/colors/WolfskinThemeColors.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/theme/colors/WolfskinThemeColors.kt new file mode 100644 index 00000000..ee0a77b5 --- /dev/null +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/theme/colors/WolfskinThemeColors.kt @@ -0,0 +1,59 @@ +package com.github.damontecres.wholphin.ui.theme.colors + +import androidx.compose.ui.graphics.Color +import com.github.damontecres.wholphin.ui.theme.ThemeColors + +/** Lilac accents on near-black surfaces, with upstream Purple available separately. */ +val WolfskinThemeColors = + object : ThemeColors { + private val background = Color(0xFF07070A) + private val lilac = Color(0xFFD2BCFF) + private val onLilac = Color(0xFF241334) + private val container = Color(0xFF382A49) + private val onContainer = Color(0xFFEADCFF) + private val surfaceVariant = Color(0xFF24202D) + + override val lightSchemeMaterial = PurpleThemeColors.lightSchemeMaterial + override val lightScheme = PurpleThemeColors.lightScheme + + override val darkSchemeMaterial = + PurpleThemeColors.darkSchemeMaterial.copy( + primary = lilac, + onPrimary = onLilac, + primaryContainer = container, + onPrimaryContainer = onContainer, + secondary = lilac, + onSecondary = onLilac, + secondaryContainer = container, + onSecondaryContainer = onContainer, + tertiary = lilac, + onTertiary = onLilac, + tertiaryContainer = container, + onTertiaryContainer = onContainer, + background = background, + surface = background, + surfaceVariant = surfaceVariant, + inversePrimary = Color(0xFF705090), + ) + + override val darkScheme = + PurpleThemeColors.darkScheme.copy( + primary = lilac, + onPrimary = onLilac, + primaryContainer = container, + onPrimaryContainer = onContainer, + secondary = lilac, + onSecondary = onLilac, + secondaryContainer = container, + onSecondaryContainer = onContainer, + tertiary = lilac, + onTertiary = onLilac, + tertiaryContainer = container, + onTertiaryContainer = onContainer, + background = background, + surface = background, + surfaceVariant = surfaceVariant, + inversePrimary = Color(0xFF705090), + border = lilac.copy(alpha = .75f), + ) + } diff --git a/app/src/main/proto/WholphinDataStore.proto b/app/src/main/proto/WholphinDataStore.proto index 38f6099c..0c3b5cb3 100644 --- a/app/src/main/proto/WholphinDataStore.proto +++ b/app/src/main/proto/WholphinDataStore.proto @@ -123,6 +123,7 @@ enum AppThemeColors { OLED_BLACK = 5; RED = 6; BROWN = 7; + WOLFSKIN = 8; } enum EdgeStyle{ diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_banner.xml b/app/src/main/res/mipmap-anydpi-v26/ic_banner.xml index 4c5f707b..ec3f55e3 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_banner.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_banner.xml @@ -1,9 +1,4 @@ - - - - - - + diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp index 5b7669dcf8a446eb91945357c91e36cfe7038228..4ac23262bb77e9fc45f4f7e02b34811b218a1e89 100644 GIT binary patch literal 5668 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 O+40v?4T`b;A0r^7O#sjU literal 4716 zcmV-y5|iyxNk&Fw5&!^KMM6+kP&iCj5&!@%p+G1Q2}W+)MuLq=gCOevA3XbZkLdpd z=%0N7ppy(XyAK)0=oTCTau(HnEF>|W`0d%bZ zJElb8T!@DJv7nE_v3E8-BjXSN9o82VTB52xs4wEFIai>3=;A;di$g)%Moz*X_Wig8 zAR;D!72Oa>ApU@nH|`D0AxAybmXcR@Q)v!JqXYRSyX98Qk(E}g8;-x zvQ;ZH_u&qa6QKv-@a&(nkRwS_Bt`ZziLm&C zW@a~c7iC-^s+Qyb3Cy9=P_4`^Ln{^L-P?uqFn3irc2|~lE-1O2IE~!;2%>@|E z%ma@GYiU@G^q}-4IkIi5wleoQ|GxL#^N)KEydAWF*j*Yxk^+}O5_l5N{68KqQh z+qUiG+xCxb+fJU&o`3`)e%JqpfLqY$&PVR9@b>?E0B<{EmAkgzVcWas0OAhj;42?x zdijfAThI8;Aq}Rz&}3qOo75orryP6BO;$Mw@Tx<(LqdlE~s9 zreNy_ig_A@UO5WKa`;=@VieF{f;g?a@!E4=1AJ_255D?C&bR)fYb_bJq|_B6qk@!> zm_t}1;{b-(FjoUp;68fGbD}0ANdnPHp8KE#JE~o`Jp0aFmjFVWdg*%8z3{{LHK%h1 z)}Uw07F1bs{1_z2*bk0Ak38p12Vz24OaqB1^Q5)|nwiAF4Nl@}vIoBem34mY=K#rV z=n*%5D*VP=-D}F=2Gj^`qF_b_i6{}Nq9}wS8Oyw7YwJPgB(!D0=_x&Fke-VM+Q7|i zzhi45skAUC^Ajr`L<}xo=_||xJEKcA4EQPVAFFoBCc}zNeluO&-xu3uC~EF08iV& zGwywyb=}uP^ZCMnMd%>ZY#DPT#W*Rl6US@&iwqJ)Q51Lzb|nM%mXE;ezO56AZHn5I zY6CO|7EzpXAw4NKmLm+FV_}0g&&J2!fAQLSxxI9qbT8xMO0TQ*Zj!-uPYEF+$SpGk zbFkF7h>BvIWxpIkBFTi~mtt3PC^1wfaWJM}?;3N@kpu2ZZJy>9Eo(WlF{j)%w4XSB z=?~YOH}8G%1VAja=k(uiy5rLOwQtUuC}~#5T&PB0-{#KXiqWX6=urJdpT0y+#?r0m zIWm6F>kxTO1BW2WEh%m|&*e0<)p|p0HB&P~YtPnC|7BXgPjMOx@VCSoe=ITkCz{$ZwsduLV(xnqtCfcOc?O2|wVp=zXX`vTq1^g

dWc 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 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp index e6a5972a05b090cf68e0f4a238f34f964a104778..df5faba90ae216518f62d51da3ddafa7ea64ec78 100644 GIT binary patch literal 5588 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 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp index f44d10934d3497e452db1db42406a72e20680b33..415cf194d83074efecb4843631d5e19a854af039 100644 GIT binary patch literal 3092 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 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp index 9e9214e8f066205bf77a5f79684048a69f9fb8e8..d9df942abcc53bf777f2fb12591df852df885878 100644 GIT binary patch literal 4456 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 literal 2706 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 M|22f*5(^b diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp index 3766935e960adb93abebffde119b0cbfddcbd262..dea8ff64e9ac5b7c08b8b7bab389915222201c8c 100644 GIT binary patch literal 3252 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 literal 2688 zcmV-`3V-!dNk&F^3IG6CMM6+kP&iC%3IG5vFTe{BO_)vFHiwgJbtC#8Eo?p9;%lNN zo3MJ?hYKL4^dLIFiYp@VHBNs3BmG2|cHnP{9(v--EaCm|vx zKpx;@X=&TGwvC?uH*}bpHZX_U{}OaKJ78wE{%=5r?BFSLt08qzO_`bTa@e+!BhhpB zssCd0kKsm=?OK^V_oB75uyDUg0yl{l2HB9sOX4Jesg`~yxg}p<+qN+?>+Y%vpsnqH+D7{QB?rsx?CudWU&7x1vo}D;!#tCe z4Eis4?%}tf_#kzjJ}E3|*aL2dnMaZ&Ns1(ydv^CMGw+GtF#rG1Vqs>6OSWy>w4E{M zx_Ix!wr$(V2jtUTvs1Kl&YFrENs4NZCm;}i*kmUFpvzvsK$UB%?J}^o19e~>BLi`5 z0ih{iRG&r0L*6oZm7v^v;%iGT@Ki4iYcZhFW_{UbQ~ql_EyF2l36z5@gkM++I0>Jl zJd5FaIr1`i;pUCQ$||VMKI<;yweQ(x!lsDEQps@92wo~zMqh2t?jvr#wHko6fraA( z`@AVetI(1nrC$KT>t2arb-GiV|F+iT!U{0ZWnZx~#Ih}wCXrl-vm}UI^u)~*rmBh6 zwoPtcUrzHkN0S`zL@>!hyL5l|glF@YQCFE7O?xd0Cqb_C^mg}xmSr%CzCB+)3HKTZ zL;BGfdoRGLw@0dL&)n$m*9o0)^3#*Qn)- zU)KC|gWhe1Sulzjq6)bzX*}9t?(U-5NBhL5E$1@B;7nyP!0SGk|^D2p0 z($z+9%{9IphkaE?%+*RFAz4&5<9sBQN%U4Ay`5QiF7t}H@vYe_s!pZzWsa7XUlG_OtHTh0Q9qm z(DWgNv$G55BD{bo7|ZVW>*nt7Yhp5h1L!z=|E!$N98EgR8D`)wkBBO?MEB4Lgthi2 zokiL!TAM^GX8x{$np*Y1y~iWG{QBgqyYd{!>8#yNh%e*af}qzk~CqeYbDEd;7@u&z{lS{}pi(IA|I$ zKw!+9n=A?|4M3N4N4y~pnombluh2}fWd?}~7KswJz<>%p41r1jfTXtN#7RqXYtxs} zgwU*5Nog>pMd1WUwe=r+BwzqyAoII75{;R4QcBDSQgB1kGm;al1Cga;v?GRM3O29> zlb|A{$_5!YeX+&X^e(1bn;@*j16wf~Oz1^ZH2lJ6z18)~NHTRQl?hgaE~q+O*N0AxHtBHkB!|8@n|y z6(LDNrXe^U0`~7zwb&{VgFte-+N2ghQ^H}tuY#?W`%!-j+ps{Jq*=recc~Ip8C1n+ zRil=Q>h`oW0d?7DZAXYo+ANS12o)Wm1Ss)HR0`6>@*3R?I^d=#?g9bfTsTs!MxaKb zXkfoEQSsweGIhg~?6hRI-4=<9AX1Ze1#G_30BLt+gvCtaWuca#vlXMldv`IVIY|_> zKpDwgwtoLmkjURAh(T%wk?fWd+eBnj6B3}~I(Zkws2DNaMZki=V{754ZMrFm?^QA^WKzKFq2&$5S^fe+05%PfB z_;K|!FEN_m+r|`f-(Mc#GnjeC=w8K zk>G-)B2YtNo8;Y(PkSodc4!Ld=XYa!X0v_Pm7FAInMqRqcO_b(1y2Nb#?FC=0T61x zMY76L9FkJ9*q5@81k!`uxMk|O-{LNyFDW2k9z^Nb%wY(E@pW~VsTnig#UMjTI12(fu%WgsArx^;prAn-+ne}_(FxmtJ*bzmeY>=ugo(4bZX{tSb@3!oTH!xg2UjV z7;qRO@-&zr@+<5T!Am|cQ88woZH{k1H*uZE{;1C*bpBPNdQ?_#gy$KY+1BF zk<*nCC8PNP7?+202U6eS-b{HEfC~o;vq?~rczuCBNP_Xs3;#9Mqi=ElC=j?TXNL)Z z_~%Ez*Z9BKgqQ#Qp$J|8M*3e9y__X4eID-iTL8Pt4zmJc;P3mVUHC3}deXW)Zs|^x zod6Kb*%|wmjM9H uNwV?n{eW2C_x+9gfL+r=0MXRzoZc`290|~X1`izq1{16tNv#Ro9&%af+7b5v diff --git a/app/src/main/res/mipmap-xhdpi/ic_banner.png b/app/src/main/res/mipmap-xhdpi/ic_banner.png index 4fa742dbbd68cf11f1ed67f01d717c4c151954ac..ee42b91e52af7ac4909028195673410816f03dbe 100644 GIT binary patch literal 34032 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

bHOd)h0ePnnx#5csfh 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

Ffajt05nDQsA1=L>uzs<#%b1E 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 literal 8462 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 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp index dbe5821e5fdd73263ebc51ec0356f11ea7cb0551..afc41a8b573b54d6885b37b03b338d36a5856cd7 100644 GIT binary patch literal 38506 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 literal 21426 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 R7yp0p{}=y%@&CUDXaK?)N!b7Z diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp index 2ef5c7d0a46d8fdfe5b455321dfe0a5bcd1c12a5..122a33e05f2279872076a7841397db86a6d6b3f2 100644 GIT binary patch literal 22538 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 Vyplnit šířku Vyplnit výšku - Výchozí předvolba Wholphin - Wholphin kompaktní + Výchozí předvolba Wolfskin + Wolfskin kompaktní Obrázky náhledů seriálů Obrázky náhledů epizod Nejnižší diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 870d8c85..a6efeb91 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -538,8 +538,8 @@ Fyld Fyld bredde Fyld højde - Wholphin-standard - Wholphin kompakt + Wolfskin-standard + Wolfskin kompakt Seriens miniaturebilleder Episode-miniaturebilleder Laveste @@ -637,7 +637,7 @@ Vælg alle Adskil typer Foretræk logoer som titler - Wholphin er opdateret til %s + Wolfskin er opdateret til %s Fjern fra Fortsæt med at se Fjern serien fra Næste Vis serier fjernet fra Næste diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 3d745172..f4523d02 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -511,8 +511,8 @@ Animieren Breite ausfüllen Höhe ausfüllen - Wholphin Standard - Wholphin Kompakt + Wolfskin Standard + Wolfskin Kompakt Niedrigste Niedrig Mittel @@ -580,7 +580,7 @@ Fortfahren Verschiedene Arten Bevorzugt Logo statt Titel anzeigen - Wholphin aktualisiert auf %s + Wolfskin aktualisiert auf %s Von \"Weiterschauen\" entfernen Serie aus \"Als Nächstes anschauen\" entfernen Mehr anzeigen diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 0dbe1e87..696ad927 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -599,7 +599,7 @@ Eliminar de la cola Separar por tipos Preferir logotipos para los títulos - Wholphin se ha actualizado a la versión %s + Wolfskin se ha actualizado a la versión %s Ver más Descubrir series Descubrir películas diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 168b914e..8fc29c91 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -535,8 +535,8 @@ Täida Täida laiuses Täida kõrguses - Wholphini vaikeseadistus - Wholphini kompaktne vaade + Wolfskini vaikeseadistus + Wolfskini kompaktne vaade Sarja pisipildid Osa pisipildid Vaikseim @@ -580,7 +580,7 @@ Jätka Eraldi tüübid Pealkirjade puhul eelista logode kuvamist - Wholphin on uuendatud versioonini %s + Wolfskin on uuendatud versioonini %s Eemalda „Jätka vaatamist“ valikust Eemalda sari valikust „Järgmisena esitamisel“ Vaata sarja, mis sai eemaldatud valikust „Järgmisena esitamisel“ diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 4d7506ed..898f8a10 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -507,8 +507,8 @@ Remplir Largeur de remplissage Hauteur de remplissage - Wholphin Par défaut - Wholphin Compact + Wolfskin Par défaut + Wolfskin Compact Images miniatures de la série Images miniatures de l\'épisode Le plus bas @@ -599,7 +599,7 @@ Suivant Séparer par types Préférer les logos pour les titres - Wholphin a été mis à jour vers la version %s + Wolfskin a été mis à jour vers la version %s Voir plus Parcourir les séries Parcourir les films diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index b056a7be..1eb5b58b 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -593,8 +593,8 @@ Ispuni Ispuni širinu Ispuni visinu - Wholphin zadani - Wholphin zbijeni + Wolfskin zadani + Wolfskin zbijeni Slike sličica serije Slike sličica epizoda Najniža @@ -653,7 +653,7 @@ Odaberi sve Odvojene vrste Preferiraj prikaz logotipa za naslove - Wholphin ažuriran na %s + Wolfskin ažuriran na %s Ukloni iz \"Nastavi gledanje\" Ukloni seriju iz \"Slijedi\" Prikaži serije uklonjene iz \"Slijedi\" diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index f3c0a00c..d6f20d4b 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -465,8 +465,8 @@ Foto Sertakan jenis Tampilkan gambar untuk jenis item - Wholphin Bawaan - Wholphin Ringkas + Wolfskin Bawaan + Wolfskin Ringkas Gambar Thumbnail Seri Gambar Thumbnail Episode Terendah @@ -561,7 +561,7 @@ Pisahkan jenis Buka artis Buka album - Wholphin diperbarui ke %s + Wolfskin diperbarui ke %s Hapus dari \"Lanjutkan menonton\" Hapus seri dari \"Berikutnya\" Lihat seri yang dihapus dari \"Berikutnya\" diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 7e347b2d..fb5f37ce 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -489,8 +489,8 @@ Riempi Riempi larghezza Riempi altezza - Wholphin predefinito - Wholphin Compatto + Wolfskin predefinito + Wolfskin Compatto Immagini miniatura serie Immagini miniatura episodio Minimo @@ -599,7 +599,7 @@ Continua Tipi separati Preferisci mostrare i loghi per i titoli - Wholphin aggiornato a %s + Wolfskin aggiornato a %s Rimuovi da Continua a guardare Rimuovi serie da Prossimo Visualizza serie rimosse da Prossimo diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index a4191206..fe4ce431 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -517,8 +517,8 @@ מתיחה לתצוגה מתיחה לרוחב מתיחה לגובה - ברירת המחדל של Wholphin - Wholphin קומפקטי + ברירת המחדל של Wolfskin + Wolfskin קומפקטי תמונות־ממוזערות של סדרה תמונות־ממוזערות של פרק כחול עז @@ -594,7 +594,7 @@ בחר הכול סוגים נפרדים העדף להציג לוגו על פני כותרת - Wholphin עודכן ל־%s + Wolfskin עודכן ל־%s מחק מהמשך צפייה מחק סדרה מ־\"הבא בתור\" הצג סדרות שנמחקו מ־\"הבא בתור\" diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 9e26efcc..c8066cec 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -483,8 +483,8 @@ Fyll Fyll bredde Fyll høyde - Wholphin Standard - Wholphin Kompakt + Wolfskin Standard + Wolfskin Kompakt Serieminiatyrbilder Episodeminiatyrbilder Lavest @@ -573,7 +573,7 @@ Velg alle Seperate typer Foretrekk å vise logoer for titler - Wholphin oppdatert til %s + Wolfskin oppdatert til %s Fjern fra fortsett å se Fjern serier fra neste Vis serier fjernet fra neste diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 2d6bd0c4..1e4891ba 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -480,8 +480,8 @@ Vullen Vulbreedte Vulhoogte - Wholphin standaard - Wholphin compact + Wolfskin standaard + Wolfskin compact Laag Middel Hoog @@ -603,7 +603,7 @@ Experimentele instellingen inschakelen? Experimentele instellingen - Wholphin is geüpdatet naar %s + Wolfskin is geüpdatet naar %s Laatst afgespeeld Direct afspelen met de ingebouwde ExoPlayer Ondertitels inbranden/transcoderen op de server diff --git a/app/src/main/res/values-nn/strings.xml b/app/src/main/res/values-nn/strings.xml index 55e08a8d..eb7a6fe7 100644 --- a/app/src/main/res/values-nn/strings.xml +++ b/app/src/main/res/values-nn/strings.xml @@ -478,8 +478,8 @@ Fyll Fyll breidde Fyll høgde - Wholphin-standard - Wholphin-kompakt + Wolfskin-standard + Wolfskin-kompakt Miniatyrbilete for seriar Miniatyrbilete for episodar Lågast diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index a208aeb6..83247c34 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -386,8 +386,8 @@ Wypełnij Pełna szerokość Pełna wysokość - Domyślny Wholphin - Kompaktowy Wholphin + Domyślny Wolfskin + Kompaktowy Wolfskin Miniatury seriali Zdjęcie odcinków Najniższa @@ -576,7 +576,7 @@ Wybierz wszystkie Oddzielne typy Wyświetlanie logo zamiast tytułu - Wholphin zaktualizowany do %s + Wolfskin zaktualizowany do %s Usuń z Kontynuuj oglądanie Usuń serial z Następnie Zobacz serię usuniętą z Następnie diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index e42abda3..af1e0d9f 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -498,8 +498,8 @@ Preencher Preencher largura Preencher altura - Padrão do Wholphin - Wholphin Compacto + Padrão do Wolfskin + Wolfskin Compacto Prévia das imagens das séries Prévias das imagens do episódio Mais baixo @@ -605,7 +605,7 @@ Selecionar todos Tipos separados Preferir a exibição de logos para títulos - Wholphin atualizado para %s + Wolfskin atualizado para %s Remover de continuar assistindo Remover série de a seguir Ver séries removidas de a seguir diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 02e92e10..d65ac309 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -507,8 +507,8 @@ Preencher Preencher largura Preencher altura - Padrão do Wholphin - Wholphin Compacto + Padrão do Wolfskin + Wolfskin Compacto Imagens em miniatura da série Imagens em miniatura do episódio Mínimo @@ -599,7 +599,7 @@ Continuar Separar por tipos Prefiro mostrar logótipos nos títulos - Wholphin foi atualizado para %s + Wolfskin foi atualizado para %s Remover de «Continuar a ver» Remover série do «Continuar a ver» Ver séries removidas do «Continuar a ver» diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 1c2321e9..f7cc6e4c 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -605,8 +605,8 @@ Растянуть По ширине По высоте - Wholphin по умолчанию - Wholphin компактный + Wolfskin по умолчанию + Wolfskin компактный Миниатюры сериалов Миниатюры эпизодов Самая низкая @@ -683,7 +683,7 @@ Продолжить Разделять по типам Показывать логотипы вместо текстовых названий - Wholphin обновлён до версии %s + Wolfskin обновлён до версии %s Убрать из «Продолжить просмотр» Убрать сериал из «Далее» Показать сериалы, убранные из «Далее» diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 95f777c1..bc78a1f8 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -526,8 +526,8 @@ Vyplniť Vyplniť na šírku Vyplniť na výšku - Wholphin predvolené - Wholphin kompaktné + Wolfskin predvolené + Wolfskin kompaktné Náhľadové obrázky seriálov Náhľadové obrázky epizód Náhľad @@ -662,7 +662,7 @@ Pokračovať Oddeliť typy Uprednostniť zobrazovanie log namiesto názvov - Wholphin bol aktualizovaný na verziu %s + Wolfskin bol aktualizovaný na verziu %s Odstrániť z Pokračovať v pozeraní Odstrániť seriál zo sekcie Nasleduje Zobraziť seriály odstránené zo sekcie Nasleduje diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 46ec0b68..5711dac1 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -600,7 +600,7 @@ Izberi vse Ločene vrste Prikazuj logotipe za naslove - Wholphin posodobljen na %s + Wolfskin posodobljen na %s Odstrani iz nadaljevanja gledanja Odstrani serijo iz nadaljevanja gledanja Ogled serije, odstranjene iz naslednjega gledanja diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 474d685a..3b71517a 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -424,8 +424,8 @@ Välj rader och bilder på startsidan Är du säker på att du vill radera detta objekt? Upptäck - Wholphin Kompakt - Wholphin Standard + Wolfskin Kompakt + Wolfskin Standard Visningsförinställningar Inbyggda förinställningar för att snabbt styla alla rader Avsnittsminiatyrer @@ -595,7 +595,7 @@ Vilka typer av objekt ska bilder visas för Låten har text Visa omslag till album - Wholphin har uppdaterats till %s + Wolfskin har uppdaterats till %s Senast visat Huvudkatalog Populäritet diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index c544add8..2ccccbae 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -465,8 +465,8 @@ ยืดเต็มจอ ยืดตามความกว้าง ยืดตามความสูง - Wholphin ค่าเริ่มต้น - Wholphin คอมแพค + Wolfskin ค่าเริ่มต้น + Wolfskin คอมแพค ภาพขนาดย่อของซีรี่ส์ ภาพขนาดย่อของตอน เบาสุด diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index b05abfd0..f591c3fb 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -480,8 +480,8 @@ Doldur Genişliği Doldur Yüksekliği Doldur - Wholphin Varsayılan - Wholphin Kompakt + Wolfskin Varsayılan + Wolfskin Kompakt Dizi Küçük Resimleri Bölüm Küçük Resimleri En Düşük @@ -589,7 +589,7 @@ Devam et Farklı türler Başlık yerine logo göster - Wholphin %s sürümüne güncellendi + Wolfskin %s sürümüne güncellendi Daha fazla göster Dizileri Keşfet Filmleri Keşfet diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 6b518809..0c0c9727 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -567,7 +567,7 @@ Заповнити Заповнити по ширині Заповнити по висоті - Wholphin за замовчуванням + Wolfskin за замовчуванням Мініатюри серіалів Мініатюри серій Найнижча @@ -655,7 +655,7 @@ Вибрати все Розділяти типи Надавати перевагу логотипам для назв - Wholphin оновлено до %s + Wolfskin оновлено до %s Видалити з «Продовжити перегляд» Видалити серіал з «Далі» Переглянути серіали, видалені з «Далі» @@ -686,5 +686,5 @@ Томати Сортування Розділити на окремі рядки - Wholphin компактний + Wolfskin компактний diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index e36dc507..07b57d8e 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -453,8 +453,8 @@ 填充 填充宽度 填充高度 - Wholphin 默认 - Wholphin 紧凑 + Wolfskin 默认 + Wolfskin 紧凑 剧集缩略图 分集缩略图 紫色 @@ -561,7 +561,7 @@ 继续 分离类型 优先显示标题图标 - Wholphin 已更新至 %s + Wolfskin 已更新至 %s 查看更多 发现电视节目 发现电影 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 622f5463..7c10daab 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -482,8 +482,8 @@ 優先使用 MPV 僅 HDR 使用 ExoPlayer 播放 我的最愛的 %s - Wholphin 預設樣式 - Wholphin 緊湊樣式 + Wolfskin 預設樣式 + Wolfskin 緊湊樣式 劇集縮圖樣式 單集縮圖樣式 海報 (2:3) @@ -561,7 +561,7 @@ 即時混播 依類型分開顯示 優先顯示圖像標題 - Wholphin 已更新至 %s + Wolfskin 已更新至 %s 查看更多 探索電視劇 探索電影 diff --git a/app/src/main/res/values/ic_banner_background.xml b/app/src/main/res/values/ic_banner_background.xml deleted file mode 100644 index e0e3446a..00000000 --- a/app/src/main/res/values/ic_banner_background.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #000B25 - diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml index ffea1b18..933396c0 100644 --- a/app/src/main/res/values/ic_launcher_background.xml +++ b/app/src/main/res/values/ic_launcher_background.xml @@ -1,4 +1,4 @@ - #101010 + #07070a diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index dd87f6da..7b8a3578 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,6 +1,6 @@ - Wholphin - Wholphin + Wolfskin + Wolfskin About Active Recordings @@ -587,8 +587,8 @@ Fill Fill width Fill height - Wholphin Default - Wholphin Compact + Wolfskin Default + Wolfskin Compact Series Thumb images Episode Thumbnail images @@ -620,6 +620,7 @@ @string/black @string/red @string/brown + @string/wolfskin_theme Ignore @@ -808,7 +809,7 @@ Select all Separate types Prefer showing logos for titles - Wholphin updated to %s + Wolfskin updated to %s Remove from continue watching Remove series from next up View series removed from next up diff --git a/app/src/main/res/values/wolfskin.xml b/app/src/main/res/values/wolfskin.xml new file mode 100644 index 00000000..2aca4d36 --- /dev/null +++ b/app/src/main/res/values/wolfskin.xml @@ -0,0 +1,6 @@ + + + Wolfskin + based on Wholphin by damontecres + https://github.com/damontecres/Wholphin + diff --git a/app/src/test/java/com/github/damontecres/wholphin/ui/WolfskinThemeColorsTest.kt b/app/src/test/java/com/github/damontecres/wholphin/ui/WolfskinThemeColorsTest.kt new file mode 100644 index 00000000..3ef4ad20 --- /dev/null +++ b/app/src/test/java/com/github/damontecres/wholphin/ui/WolfskinThemeColorsTest.kt @@ -0,0 +1,44 @@ +package com.github.damontecres.wholphin.ui + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.luminance +import com.github.damontecres.wholphin.ui.theme.colors.WolfskinThemeColors +import org.junit.Assert.assertTrue +import org.junit.Test + +/** Normal and focused TV text must remain readable on the fork's dark palette. */ +class WolfskinThemeColorsTest { + @Test + fun darkPaletteHasReadableNormalAndFocusedText() { + val television = WolfskinThemeColors.darkScheme + val material = WolfskinThemeColors.darkSchemeMaterial + val textAndBackgrounds = + listOf( + television.onBackground to television.background, + television.onSurface to television.surface, + television.onSurfaceVariant to television.surfaceVariant, + television.onPrimary to television.primary, + television.onPrimaryContainer to television.primaryContainer, + television.onSecondary to television.secondary, + television.onSecondaryContainer to television.secondaryContainer, + television.onTertiary to television.tertiary, + television.onTertiaryContainer to television.tertiaryContainer, + material.onBackground to material.background, + material.onSurface to material.surface, + material.onPrimary to material.primary, + material.onPrimaryContainer to material.primaryContainer, + ) + textAndBackgrounds.forEach { (text, background) -> + assertReadable(text, background) + } + } + + private fun assertReadable(text: Color, background: Color) { + val textLuminance = text.luminance() + val backgroundLuminance = background.luminance() + val contrast = + (maxOf(textLuminance, backgroundLuminance) + .05f) / + (minOf(textLuminance, backgroundLuminance) + .05f) + assertTrue("Text contrast $contrast is below 4.5:1", contrast >= 4.5f) + } +} From c98a9756acba41eb033465874de10acd72345c89 Mon Sep 17 00:00:00 2001 From: justinzeus Date: Thu, 22 Oct 2026 15:07:58 +0200 Subject: [PATCH 09/26] Integrate Wolfskin into theme-specific controls --- .../com/github/damontecres/wholphin/ui/cards/WatchedIcon.kt | 3 +++ .../com/github/damontecres/wholphin/ui/components/SliderBar.kt | 2 ++ .../java/com/github/damontecres/wholphin/ui/nav/NavDrawer.kt | 1 + .../damontecres/wholphin/ui/preferences/SwitchPreference.kt | 1 + 4 files changed, 7 insertions(+) diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/cards/WatchedIcon.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/cards/WatchedIcon.kt index ce8952a7..17649be9 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/cards/WatchedIcon.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/cards/WatchedIcon.kt @@ -41,6 +41,7 @@ fun WatchedIconBackground(): Color = when (LocalTheme.current) { AppThemeColors.UNRECOGNIZED, AppThemeColors.PURPLE, + AppThemeColors.WOLFSKIN, AppThemeColors.BLUE, AppThemeColors.GREEN, AppThemeColors.ORANGE, @@ -55,6 +56,8 @@ fun WatchedIconBackground(): Color = @Composable fun WatchedIconColor(): Color = when (LocalTheme.current) { + AppThemeColors.WOLFSKIN -> MaterialTheme.colorScheme.onPrimary + AppThemeColors.UNRECOGNIZED, AppThemeColors.PURPLE, AppThemeColors.BLUE, diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/components/SliderBar.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/components/SliderBar.kt index 9021e213..f2addcd8 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/components/SliderBar.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/components/SliderBar.kt @@ -143,6 +143,7 @@ fun sliderActiveColor(focused: Boolean): Color { return when (theme) { AppThemeColors.UNRECOGNIZED, AppThemeColors.PURPLE, + AppThemeColors.WOLFSKIN, AppThemeColors.BLUE, AppThemeColors.GREEN, AppThemeColors.ORANGE, @@ -179,6 +180,7 @@ fun sliderInactiveColor(focused: Boolean): Color { return when (theme) { AppThemeColors.UNRECOGNIZED, AppThemeColors.PURPLE, + AppThemeColors.WOLFSKIN, -> { MaterialTheme.colorScheme.border .copy(alpha = .25f) diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/nav/NavDrawer.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/nav/NavDrawer.kt index efbf1a4b..17906fe2 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/nav/NavDrawer.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/nav/NavDrawer.kt @@ -769,6 +769,7 @@ fun navItemColor( when (theme) { AppThemeColors.UNRECOGNIZED, AppThemeColors.PURPLE, + AppThemeColors.WOLFSKIN, AppThemeColors.BLUE, AppThemeColors.GREEN, AppThemeColors.ORANGE, diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/preferences/SwitchPreference.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/preferences/SwitchPreference.kt index daf6fa07..43e213ea 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/preferences/SwitchPreference.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/preferences/SwitchPreference.kt @@ -70,6 +70,7 @@ fun SwitchColors(): SwitchColors { return when (theme) { AppThemeColors.UNRECOGNIZED, AppThemeColors.PURPLE, + AppThemeColors.WOLFSKIN, AppThemeColors.BLUE, -> { SwitchDefaults.colors() From 1715041df3d3375df49cd89105afd622eb267f99 Mon Sep 17 00:00:00 2001 From: justinzeus Date: Thu, 22 Oct 2026 16:06:09 +0200 Subject: [PATCH 10/26] Match updater versions by ordering and cover Wolfskin asset selection --- .../wholphin/services/UpdateChecker.kt | 3 +- .../wholphin/test/TestUpdateChecker.kt | 48 +++++++++++++++++++ .../resources/forgejo_release_suffixed.json | 24 ++++++++++ docker/README.md | 5 ++ 4 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 app/src/test/resources/forgejo_release_suffixed.json diff --git a/app/src/main/java/com/github/damontecres/wholphin/services/UpdateChecker.kt b/app/src/main/java/com/github/damontecres/wholphin/services/UpdateChecker.kt index 3b53138d..706285f2 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/services/UpdateChecker.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/services/UpdateChecker.kt @@ -77,7 +77,8 @@ class UpdateChecker ): JsonObject? = releases .firstOrNull { release -> - Version.tryFromString(release.jsonObject["name"]?.jsonPrimitive?.contentOrNull) == version + val candidate = Version.tryFromString(release.jsonObject["name"]?.jsonPrimitive?.contentOrNull) + candidate != null && !candidate.isGreaterThan(version) && !version.isGreaterThan(candidate) }?.jsonObject /** diff --git a/app/src/test/java/com/github/damontecres/wholphin/test/TestUpdateChecker.kt b/app/src/test/java/com/github/damontecres/wholphin/test/TestUpdateChecker.kt index f0f51931..2e84e2ca 100644 --- a/app/src/test/java/com/github/damontecres/wholphin/test/TestUpdateChecker.kt +++ b/app/src/test/java/com/github/damontecres/wholphin/test/TestUpdateChecker.kt @@ -7,6 +7,7 @@ import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonArray import kotlinx.serialization.json.JsonElement import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.JsonPrimitive import kotlinx.serialization.json.jsonArray import kotlinx.serialization.json.jsonObject import kotlinx.serialization.json.jsonPrimitive @@ -26,6 +27,7 @@ class TestUpdateChecker { private val forgejoLatest: JsonObject by lazy { read("forgejo_release_latest.json") } private val forgejoAssets: JsonArray by lazy { forgejoLatest["assets"]!!.jsonArray } private val forgejoReleases: JsonArray by lazy { readElement("forgejo_releases.json").jsonArray } + private val suffixedAssets: JsonArray by lazy { read("forgejo_release_suffixed.json")["assets"]!!.jsonArray } private fun readElement(filename: String): JsonElement { val resource = javaClass.classLoader?.getResource(filename) @@ -113,12 +115,58 @@ class TestUpdateChecker { Assert.assertNull(getDownloadUrl(forgejoAssets, true, listOf("arm64-v8a"))) } + @Test + fun `Choose debug ABI before universal and fall back for missing ABI`() { + for ((abis, name) in listOf( + listOf("arm64-v8a") to "Wolfskin-debug-arm64-v8a.apk", + listOf("unknown") to "Wolfskin-debug.apk", + emptyList() to "Wolfskin-debug.apk", + )) { + Assert.assertEquals(forgejoDownload(name), getDownloadUrl(suffixedAssets, true, abis)) + } + } + + @Test + fun `Choose release suffixed ABI before universal and unsuffixed assets`() { + val assets = JsonArray(forgejoAssets + suffixedAssets) + for ((abis, name) in listOf( + listOf("arm64-v8a") to "Wolfskin-release-arm64-v8a.apk", + listOf("armeabi-v7a") to "Wolfskin-release.apk", + emptyList() to "Wolfskin-release.apk", + )) { + Assert.assertEquals(forgejoDownload(name), getDownloadUrl(assets, false, abis)) + } + } + + @Test + fun `Release and debug assets do not cross build types`() { + val debugAssets = JsonArray(suffixedAssets.filter { it.jsonObject["name"]!!.jsonPrimitive.content.contains("-debug") }) + val releaseAssets = JsonArray(suffixedAssets.filter { it.jsonObject["name"]!!.jsonPrimitive.content.contains("-release") }) + Assert.assertNull(getDownloadUrl(debugAssets, false, listOf("arm64-v8a"))) + Assert.assertNull(getDownloadUrl(releaseAssets, true, listOf("arm64-v8a"))) + } + @Test fun `Find installed version in release list`() { val release = UpdateChecker.findReleaseByVersion(forgejoReleases, Version.fromString("1.0.9-2-g3094fc8c")) Assert.assertEquals("v1.0.9-2-g3094fc8c", release?.get("name")?.jsonPrimitive?.content) } + @Test + fun `Find release with different hash abbreviation length`() { + val release = UpdateChecker.findReleaseByVersion(forgejoReleases, Version.fromString("1.0.9-2-g3094fc8")) + Assert.assertEquals("v1.0.9-2-g3094fc8c", release?.get("name")?.jsonPrimitive?.content) + } + + @Test + fun `Find release with absent or zero commit count`() { + val release = UpdateChecker.findReleaseByVersion(forgejoReleases, Version.fromString("1.0.10")) + Assert.assertEquals("v1.0.10-0-gfeedbee", release?.get("name")?.jsonPrimitive?.content) + val plainRelease = JsonObject(forgejoReleases.first().jsonObject + ("name" to JsonPrimitive("v1.0.10"))) + val plainReleases = JsonArray(listOf(plainRelease)) + Assert.assertEquals(plainReleases.first(), UpdateChecker.findReleaseByVersion(plainReleases, Version.fromString("1.0.10-0-gfeedbee"))) + } + @Test fun `Find no release for version missing from list`() { Assert.assertNull(UpdateChecker.findReleaseByVersion(forgejoReleases, Version.fromString("1.0.9-3-gffffff"))) diff --git a/app/src/test/resources/forgejo_release_suffixed.json b/app/src/test/resources/forgejo_release_suffixed.json new file mode 100644 index 00000000..c2155081 --- /dev/null +++ b/app/src/test/resources/forgejo_release_suffixed.json @@ -0,0 +1,24 @@ +{ + "name": "v1.0.9-2-g3094fc8c", + "tag_name": "pwolfskin-v1.0.9-2-g3094fc8c", + "published_at": "2026-10-20T09:05:00Z", + "body": "Wolfskin release and debug builds", + "assets": [ + { + "name": "Wolfskin-debug.apk", + "browser_download_url": "https://git.justinvisser.org/justinzeus/wolfskin/releases/download/pwolfskin-v1.0.9-2-g3094fc8c/Wolfskin-debug.apk" + }, + { + "name": "Wolfskin-release.apk", + "browser_download_url": "https://git.justinvisser.org/justinzeus/wolfskin/releases/download/pwolfskin-v1.0.9-2-g3094fc8c/Wolfskin-release.apk" + }, + { + "name": "Wolfskin-debug-arm64-v8a.apk", + "browser_download_url": "https://git.justinvisser.org/justinzeus/wolfskin/releases/download/pwolfskin-v1.0.9-2-g3094fc8c/Wolfskin-debug-arm64-v8a.apk" + }, + { + "name": "Wolfskin-release-arm64-v8a.apk", + "browser_download_url": "https://git.justinvisser.org/justinzeus/wolfskin/releases/download/pwolfskin-v1.0.9-2-g3094fc8c/Wolfskin-release-arm64-v8a.apk" + } + ] +} diff --git a/docker/README.md b/docker/README.md index 353a716f..f1a1b7d0 100644 --- a/docker/README.md +++ b/docker/README.md @@ -17,6 +17,11 @@ use the catalog's exact Wholphin extension version (currently `0.2.4`). Do not place local extension AARs in `app/libs`: upstream prefers them over the pinned GitHub Packages dependencies. +Upload release assets renamed to `Wolfskin.apk` / `Wolfskin-.apk` for the +in-app updater. Gradle outputs +`Wholphin-default-release--[-].apk`; strip the +flavor, version, and code as well as replacing the prefix. + Upstream enables JVM unit tests only for debug variants; there is no `testDefaultReleaseUnitTest` task. `make test` uses the closest default-flavor task without changing upstream's test configuration. From 221f623c871bf2a041fe5416a02b00d623864df4 Mon Sep 17 00:00:00 2001 From: justinzeus Date: Tue, 27 Oct 2026 15:30:44 +0100 Subject: [PATCH 11/26] Serialize Gradle containers sharing a cache volume --- docker/README.md | 12 +++++++++++- docker/gradle.sh | 6 ++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/docker/README.md b/docker/README.md index f1a1b7d0..ec4e9d24 100644 --- a/docker/README.md +++ b/docker/README.md @@ -1,7 +1,8 @@ # Wolfskin TV container builds Run from a full Git checkout with the upstream `v*` and `p*` tags available. The -host needs Docker, GNU Make, Bash, and Git, not Java or the Android SDK. +host needs Docker, GNU Make, Bash, Git, and `flock` (util-linux), not Java or the +Android SDK. ```sh git fetch origin --tags @@ -46,6 +47,15 @@ Override `WOLFSKIN_BUILD_IMAGE` to change the locally built image tag and `WOLFSKIN_GRADLE_VOLUME` to isolate a cache. `make build-image` builds only the image. Do not delete shared caches during another build. +Every Gradle container holds a host-side exclusive lock for its entire run. +Concurrent targets sharing a cache queue rather than timing out on Gradle's +cross-container cache journal lock; a waiting invocation prints one line. +The default lock is `/var/tmp/${WOLFSKIN_GRADLE_VOLUME}.gradle.lock` (using +`wolfskin-gradle` when unset). Override `WOLFSKIN_GRADLE_LOCK_FILE` with a path +whose parent directory already exists. All callers sharing a volume must use +the same lock path on the Docker host. Do not delete the file while builds are +running or waiting. The lock releases automatically when the invocation exits. + ## Release credentials The default escrow is diff --git a/docker/gradle.sh b/docker/gradle.sh index 76950dc6..b5624cbf 100755 --- a/docker/gradle.sh +++ b/docker/gradle.sh @@ -8,6 +8,12 @@ git_common=$(git rev-parse --path-format=absolute --git-common-dir) image=${WOLFSKIN_BUILD_IMAGE:-wolfskin-build:sdk37-jdk21} cache=${WOLFSKIN_GRADLE_VOLUME:-wolfskin-gradle} secrets=${WOLFSKIN_SECRETS_DIR:-/opt/stacks/ventoy/machine-parity/manifest-tank/secrets/wolfskin} +lock=${WOLFSKIN_GRADLE_LOCK_FILE:-/var/tmp/${cache}.gradle.lock} +exec {lock_fd}>"$lock" +if ! flock --exclusive --nonblock "$lock_fd"; then + printf 'Waiting for Gradle cache lock: %s\n' "$lock" >&2 + flock --exclusive "$lock_fd" +fi arguments=(--rm --platform linux/amd64 --user "$(id -u):$(id -g)" --mount "type=bind,src=$root,dst=$root" --workdir "$root" --mount "type=volume,src=$cache,dst=/gradle" From e92ade99df54d952bdc375f9ead0df5182350639 Mon Sep 17 00:00:00 2001 From: justinzeus Date: Thu, 29 Oct 2026 20:00:31 +0100 Subject: [PATCH 12/26] Add source ratings model and Seerr ratings service matching the PWA --- .../wholphin/data/model/SourceRatings.kt | 223 +++++++++++++++++ .../wholphin/services/SeerrRatingsService.kt | 222 +++++++++++++++++ .../wholphin/ui/components/QuickDetails.kt | 75 +++--- app/src/main/res/drawable/ic_rating_imdb.xml | 22 ++ app/src/main/res/drawable/ic_rating_tmdb.xml | 16 ++ app/src/main/res/drawable/ic_rt_spilled.xml | 73 ++++++ app/src/main/res/drawable/ic_rt_upright.xml | 52 ++++ app/src/main/seerr/seerr-api.yml | 14 +- .../wholphin/data/model/SourceRatingsTest.kt | 143 +++++++++++ .../services/SeerrRatingsServiceTest.kt | 232 ++++++++++++++++++ 10 files changed, 1032 insertions(+), 40 deletions(-) create mode 100644 app/src/main/java/com/github/damontecres/wholphin/data/model/SourceRatings.kt create mode 100644 app/src/main/java/com/github/damontecres/wholphin/services/SeerrRatingsService.kt create mode 100644 app/src/main/res/drawable/ic_rating_imdb.xml create mode 100644 app/src/main/res/drawable/ic_rating_tmdb.xml create mode 100644 app/src/main/res/drawable/ic_rt_spilled.xml create mode 100644 app/src/main/res/drawable/ic_rt_upright.xml create mode 100644 app/src/test/java/com/github/damontecres/wholphin/data/model/SourceRatingsTest.kt create mode 100644 app/src/test/java/com/github/damontecres/wholphin/services/SeerrRatingsServiceTest.kt diff --git a/app/src/main/java/com/github/damontecres/wholphin/data/model/SourceRatings.kt b/app/src/main/java/com/github/damontecres/wholphin/data/model/SourceRatings.kt new file mode 100644 index 00000000..451ff57d --- /dev/null +++ b/app/src/main/java/com/github/damontecres/wholphin/data/model/SourceRatings.kt @@ -0,0 +1,223 @@ +package com.github.damontecres.wholphin.data.model + +import androidx.compose.foundation.text.appendInlineContent +import androidx.compose.runtime.Immutable +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.buildAnnotatedString +import com.github.damontecres.wholphin.ui.dot +import java.util.Locale + +/** + * Which Rotten Tomatoes mark to draw. Chosen only from the label Seerr reports, never from a percentage. + */ +enum class RtMark { + FRESH, + ROTTEN, + UPRIGHT, + SPILLED, + + /** Seerr sent a score without a recognised label */ + UNKNOWN, + ; + + companion object { + /** + * Certified Fresh/Fresh -> [FRESH], Rotten -> [ROTTEN], Upright -> [UPRIGHT], Spilled -> [SPILLED], anything else null + */ + fun fromLabel(label: String?): RtMark? = + when (label) { + "Certified Fresh", "Fresh" -> FRESH + "Rotten" -> ROTTEN + "Upright" -> UPRIGHT + "Spilled" -> SPILLED + else -> null + } + } +} + +@Immutable +data class RtScore( + /** 0-100 */ + val percent: Int, + val mark: RtMark, +) + +/** + * One displayable rating + */ +@Immutable +sealed interface RatingEntry { + val text: String + + /** + * The id of the inline content (see [com.github.damontecres.wholphin.ui.components.rememberQuickDetailsContentMap]) for this entry's badge + */ + val inlineContentId: String + + data class RottenTomatoes( + val score: RtScore, + /** Critics (Tomatometer) or audience (Popcornmeter) */ + val critics: Boolean, + ) : RatingEntry { + override val text: String get() = "${score.percent}%" + override val inlineContentId: String + get() = + when (score.mark) { + RtMark.FRESH -> INLINE_RT_FRESH + RtMark.ROTTEN -> INLINE_RT_ROTTEN + RtMark.UPRIGHT -> INLINE_RT_UPRIGHT + RtMark.SPILLED -> INLINE_RT_SPILLED + RtMark.UNKNOWN -> INLINE_RT_UNKNOWN + } + } + + data class Imdb( + val score: Double, + ) : RatingEntry { + override val text: String get() = formatScore(score) + override val inlineContentId: String get() = INLINE_IMDB + } + + data class Tmdb( + val score: Double, + ) : RatingEntry { + override val text: String get() = formatScore(score) + override val inlineContentId: String get() = INLINE_TMDB + } +} + +const val INLINE_RT_FRESH = "fresh" +const val INLINE_RT_ROTTEN = "rotten" +const val INLINE_RT_UPRIGHT = "rt_upright" +const val INLINE_RT_SPILLED = "rt_spilled" +const val INLINE_RT_UNKNOWN = "rt_unknown" +const val INLINE_IMDB = "imdb" +const val INLINE_TMDB = "tmdb" + +private fun formatScore(score: Double) = String.format(Locale.getDefault(), "%.1f", score) + +/** + * Ratings for a single title from the same sources as the Wolfskin PWA: Rotten Tomatoes critics & audience, + * IMDb (movies only), and TMDB. + * + * Only scores that were actually observed are present. Use [of] to apply the PWA's rules. + */ +@Immutable +data class SourceRatings( + val rtCritics: RtScore? = null, + val rtAudience: RtScore? = null, + val imdb: Double? = null, + val tmdb: Double? = null, +) { + val isEmpty: Boolean get() = rtCritics == null && rtAudience == null && imdb == null && tmdb == null + + /** + * Rotten Tomatoes entries in PWA order: critics then audience + */ + val criticEntries: List + get() = + listOfNotNull( + rtCritics?.let { RatingEntry.RottenTomatoes(it, true) }, + rtAudience?.let { RatingEntry.RottenTomatoes(it, false) }, + ) + + /** + * IMDb or TMDB + */ + val communityEntries: List + get() = + listOfNotNull( + imdb?.let { RatingEntry.Imdb(it) }, + tmdb?.let { RatingEntry.Tmdb(it) }, + ) + + companion object { + const val MAX_PERCENT = 100.0 + const val MAX_SCORE = 10.0 + + /** + * Builds ratings using the PWA's rules: + * - Only observed scores are kept. A score outside its range (RT 0-100, IMDb/TMDB 0-10) or with a negative vote count is dropped + * - A zero-vote IMDb/TMDB score is unrated, never 0 + * - RT icon comes from the label Seerr reports + * - TMDB is kept only when no other source has a score + * + * @param rtCriticsLabel Seerr's critics status: Certified Fresh, Fresh, or Rotten + * @param rtAudienceLabel Seerr's audience status: Upright or Spilled + */ + fun of( + rtCriticsScore: Number? = null, + rtCriticsLabel: String? = null, + rtAudienceScore: Number? = null, + rtAudienceLabel: String? = null, + imdbScore: Number? = null, + imdbVotes: Long? = null, + tmdbScore: Number? = null, + tmdbVotes: Long? = null, + ): SourceRatings { + val critics = rtScore(rtCriticsScore, rtCriticsLabel, RtMark.UNKNOWN) + val audience = rtScore(rtAudienceScore, rtAudienceLabel, RtMark.UPRIGHT) + val imdb = userScore(imdbScore, imdbVotes) + val tmdb = userScore(tmdbScore, tmdbVotes) + return if (critics != null || audience != null || imdb != null) { + SourceRatings(critics, audience, imdb, null) + } else { + SourceRatings(tmdb = tmdb) + } + } + + private fun rtScore( + score: Number?, + label: String?, + defaultMark: RtMark, + ): RtScore? { + val value = score?.toDouble() ?: return null + if (value.isNaN() || value < 0.0 || value > MAX_PERCENT) return null + return RtScore(value.toInt(), RtMark.fromLabel(label) ?: defaultMark) + } + + private fun userScore( + score: Number?, + votes: Long?, + ): Double? { + val value = score?.toDouble() ?: return null + if (value.isNaN() || value < 0.0 || value > MAX_SCORE) return null + if (votes != null && votes <= 0L) return null + return value + } + } +} + +/** + * Appends each entry as a dot, its badge, and its score + */ +fun AnnotatedString.Builder.appendRatings(entries: List) { + entries.forEach { + dot() + appendInlineContent(it.inlineContentId) + append(" ") + append(it.text) + } +} + +/** + * Replaces the Jellyfin community & critic ratings with these ratings. + * + * IMDb/TMDB are shown with the community rating setting, Rotten Tomatoes with the critic rating setting. + * If there are no ratings, the Jellyfin values are kept. + */ +fun QuickDetailsData.withSourceRatings(ratings: SourceRatings?): QuickDetailsData = + if (ratings == null || ratings.isEmpty) { + this + } else { + copy( + communityRating = + ratings.communityEntries.takeIf { it.isNotEmpty() }?.let { + buildAnnotatedString { appendRatings(it) } + }, + criticRating = + ratings.criticEntries.takeIf { it.isNotEmpty() }?.let { + buildAnnotatedString { appendRatings(it) } + }, + ) + } diff --git a/app/src/main/java/com/github/damontecres/wholphin/services/SeerrRatingsService.kt b/app/src/main/java/com/github/damontecres/wholphin/services/SeerrRatingsService.kt new file mode 100644 index 00000000..9e5287a2 --- /dev/null +++ b/app/src/main/java/com/github/damontecres/wholphin/services/SeerrRatingsService.kt @@ -0,0 +1,222 @@ +package com.github.damontecres.wholphin.services + +import com.github.damontecres.wholphin.api.seerr.infrastructure.ClientException +import com.github.damontecres.wholphin.api.seerr.model.MovieMovieIdRatingscombinedGet200Response +import com.github.damontecres.wholphin.api.seerr.model.TvTvIdRatingsGet200Response +import com.github.damontecres.wholphin.data.model.BaseItem +import com.github.damontecres.wholphin.data.model.SeerrItemType +import com.github.damontecres.wholphin.data.model.SourceRatings +import com.google.common.cache.CacheBuilder +import kotlinx.coroutines.CancellationException +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.mapLatest +import org.jellyfin.sdk.model.api.BaseItemKind +import timber.log.Timber +import javax.inject.Inject +import javax.inject.Singleton + +/** + * The TMDB user vote average & count as reported by Seerr's movie/TV details + */ +data class TmdbVote( + val average: Double?, + val count: Long?, +) + +/** + * Fetches [SourceRatings] for a title from Seerr, the same source the Wolfskin PWA uses + * + * Movies use `ratingscombined` (RT critics, RT audience, IMDb), series use `tv/{id}/ratings` (RT). TMDB comes from + * `voteAverage`/`voteCount` and is only requested when no other source has a score. + * + * Results are cached by media type and TMDB id because movie and TV ids are separate namespaces. Failures are never cached. + */ +@OptIn(ExperimentalCoroutinesApi::class) +@Singleton +class SeerrRatingsService + @Inject + constructor( + private val seerrService: SeerrService, + ) { + private data class Key( + val type: SeerrItemType, + val tmdbId: Int, + ) + + private val cache = + CacheBuilder + .newBuilder() + .maximumSize(CACHE_SIZE) + .build() + + fun cached( + type: SeerrItemType, + tmdbId: Int, + ): SourceRatings? = cache.getIfPresent(Key(type, tmdbId)) + + /** + * Ratings for a Jellyfin movie or series using its TMDB id. Follows whether Seerr is active, since the + * connection is established asynchronously after login. + * + * Emits null while Seerr is not active, the item isn't a movie/series with a TMDB id, or the lookup failed. + * Callers should keep showing the Jellyfin values for null. + */ + fun forItem(item: BaseItem): Flow { + val type = + when (item.type) { + BaseItemKind.MOVIE -> SeerrItemType.MOVIE + BaseItemKind.SERIES -> SeerrItemType.TV + else -> null + } + val tmdbId = + item.data.providerIds + ?.get("Tmdb") + ?.toIntOrNull() + return if (type == null || tmdbId == null) { + flowOf(null) + } else { + seerrService.active + .distinctUntilChanged() + .mapLatest { active -> if (active) get(type, tmdbId) else null } + } + } + + /** + * @param knownTmdb if the caller already has the TMDB vote data (ie from the details response), avoids another request + * @return the ratings (possibly [SourceRatings.isEmpty]) or null if they could not be determined right now + */ + suspend fun get( + type: SeerrItemType, + tmdbId: Int, + knownTmdb: TmdbVote? = null, + ): SourceRatings? { + val key = Key(type, tmdbId) + cache.getIfPresent(key)?.let { return it } + if (type != SeerrItemType.MOVIE && type != SeerrItemType.TV) return null + + val combined = + try { + fetchCombined(type, tmdbId) + } catch (ex: CancellationException) { + throw ex + } catch (ex: Exception) { + Timber.w(ex, "Error fetching ratings for %s %s", type, tmdbId) + return null + } + var ratings = build(combined, null) + if (ratings.isEmpty) { + // Nothing else has a score, so TMDB is the only possible source + val vote = + knownTmdb ?: try { + fetchTmdb(type, tmdbId) + } catch (ex: CancellationException) { + throw ex + } catch (ex: Exception) { + Timber.w(ex, "Error fetching TMDB rating for %s %s", type, tmdbId) + return null + } + ratings = build(combined, vote) + } + cache.put(key, ratings) + return ratings + } + + private suspend fun fetchCombined( + type: SeerrItemType, + tmdbId: Int, + ): Combined = + try { + when (type) { + SeerrItemType.MOVIE -> { + Combined.Movie(seerrService.api.moviesApi.movieMovieIdRatingscombinedGet(movieId = tmdbId)) + } + + else -> { + Combined.Tv(seerrService.api.tvApi.tvTvIdRatingsGet(tvId = tmdbId)) + } + } + } catch (ex: ClientException) { + if (ex.statusCode == 404) { + // Seerr has no RT/IMDb data for this title, that is an answer rather than a failure + Timber.d("No ratings for %s %s", type, tmdbId) + Combined.None + } else { + throw ex + } + } + + private suspend fun fetchTmdb( + type: SeerrItemType, + tmdbId: Int, + ): TmdbVote = + when (type) { + SeerrItemType.MOVIE -> { + seerrService.api.moviesApi + .movieMovieIdGet(movieId = tmdbId) + .let { TmdbVote(it.voteAverage?.toDouble(), it.voteCount?.toLong()) } + } + + else -> { + seerrService.api.tvApi + .tvTvIdGet(tvId = tmdbId) + .let { TmdbVote(it.voteAverage?.toDouble(), it.voteCount?.toLong()) } + } + } + + private fun build( + combined: Combined, + tmdb: TmdbVote?, + ): SourceRatings = + when (combined) { + is Combined.Movie -> buildMovie(combined.response, tmdb) + is Combined.Tv -> { + val rt = combined.response + SourceRatings.of( + rtCriticsScore = rt.criticsScore, + rtCriticsLabel = rt.criticsRating?.value, + rtAudienceScore = rt.audienceScore, + rtAudienceLabel = rt.audienceRating?.value, + tmdbScore = tmdb?.average, + tmdbVotes = tmdb?.count, + ) + } + + Combined.None -> { + SourceRatings.of(tmdbScore = tmdb?.average, tmdbVotes = tmdb?.count) + } + } + + private fun buildMovie( + response: MovieMovieIdRatingscombinedGet200Response, + tmdb: TmdbVote?, + ): SourceRatings = + SourceRatings.of( + rtCriticsScore = response.rt?.criticsScore, + rtCriticsLabel = response.rt?.criticsRating?.value, + rtAudienceScore = response.rt?.audienceScore, + rtAudienceLabel = response.rt?.audienceRating?.value, + imdbScore = response.imdb?.criticsScore, + imdbVotes = response.imdb?.criticsScoreCount, + tmdbScore = tmdb?.average, + tmdbVotes = tmdb?.count, + ) + + private sealed interface Combined { + data class Movie( + val response: MovieMovieIdRatingscombinedGet200Response, + ) : Combined + + data class Tv( + val response: TvTvIdRatingsGet200Response, + ) : Combined + + data object None : Combined + } + + companion object { + private const val CACHE_SIZE = 300L + } + } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/components/QuickDetails.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/components/QuickDetails.kt index 6db89c75..267677e3 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/components/QuickDetails.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/components/QuickDetails.kt @@ -1,5 +1,7 @@ package com.github.damontecres.wholphin.ui.components +import androidx.annotation.DrawableRes +import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.text.InlineTextContent @@ -10,7 +12,9 @@ import androidx.compose.runtime.NonRestartableComposable import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.ColorFilter +import androidx.compose.ui.graphics.ColorMatrix +import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalResources import androidx.compose.ui.res.painterResource @@ -23,6 +27,13 @@ import androidx.tv.material3.Icon import androidx.tv.material3.MaterialTheme import androidx.tv.material3.Text import com.github.damontecres.wholphin.R +import com.github.damontecres.wholphin.data.model.INLINE_IMDB +import com.github.damontecres.wholphin.data.model.INLINE_RT_FRESH +import com.github.damontecres.wholphin.data.model.INLINE_RT_ROTTEN +import com.github.damontecres.wholphin.data.model.INLINE_RT_SPILLED +import com.github.damontecres.wholphin.data.model.INLINE_RT_UNKNOWN +import com.github.damontecres.wholphin.data.model.INLINE_RT_UPRIGHT +import com.github.damontecres.wholphin.data.model.INLINE_TMDB import com.github.damontecres.wholphin.data.model.QuickDetailsData import com.github.damontecres.wholphin.preferences.DisplayToggle import com.github.damontecres.wholphin.ui.dot @@ -84,15 +95,26 @@ fun QuickDetailsText( @Composable fun rememberQuickDetailsContentMap(textStyle: TextStyle = MaterialTheme.typography.titleSmall) = remember(textStyle) { + val square = Placeholder(textStyle.fontSize, textStyle.fontSize, PlaceholderVerticalAlign.TextCenter) + // Wordmark badges are wider than tall, like in the PWA + val wide = Placeholder(textStyle.fontSize * 1.8f, textStyle.fontSize, PlaceholderVerticalAlign.TextCenter) + fun badge( + placeholder: Placeholder, + @DrawableRes resId: Int, + muted: Boolean = false, + ) = InlineTextContent(placeholder) { + Image( + painter = painterResource(resId), + contentDescription = null, + contentScale = ContentScale.Fit, + alpha = if (muted) 0.55f else 1f, + colorFilter = if (muted) ColorFilter.colorMatrix(ColorMatrix().apply { setToSaturation(0f) }) else null, + modifier = Modifier.fillMaxSize(), + ) + } mapOf( "star" to - InlineTextContent( - Placeholder( - textStyle.fontSize, - textStyle.fontSize, - PlaceholderVerticalAlign.TextCenter, - ), - ) { + InlineTextContent(square) { Icon( imageVector = Icons.Filled.Star, tint = FilledStarColor, @@ -100,36 +122,13 @@ fun rememberQuickDetailsContentMap(textStyle: TextStyle = MaterialTheme.typograp modifier = Modifier.fillMaxSize(), ) }, - "rotten" to - InlineTextContent( - Placeholder( - textStyle.fontSize, - textStyle.fontSize, - PlaceholderVerticalAlign.TextCenter, - ), - ) { - Icon( - painter = painterResource(R.drawable.ic_rotten_tomatoes_rotten), - contentDescription = null, - modifier = Modifier.fillMaxSize(), - tint = Color.Unspecified, - ) - }, - "fresh" to - InlineTextContent( - Placeholder( - textStyle.fontSize, - textStyle.fontSize, - PlaceholderVerticalAlign.TextCenter, - ), - ) { - Icon( - painter = painterResource(R.drawable.ic_rotten_tomatoes_fresh), - contentDescription = null, - modifier = Modifier.fillMaxSize(), - tint = Color.Unspecified, - ) - }, + INLINE_RT_ROTTEN to badge(square, R.drawable.ic_rotten_tomatoes_rotten), + INLINE_RT_FRESH to badge(square, R.drawable.ic_rotten_tomatoes_fresh), + INLINE_RT_UPRIGHT to badge(square, R.drawable.ic_rt_upright), + INLINE_RT_SPILLED to badge(square, R.drawable.ic_rt_spilled), + INLINE_RT_UNKNOWN to badge(square, R.drawable.ic_rotten_tomatoes_fresh, muted = true), + INLINE_IMDB to badge(wide, R.drawable.ic_rating_imdb), + INLINE_TMDB to badge(wide, R.drawable.ic_rating_tmdb), ) } diff --git a/app/src/main/res/drawable/ic_rating_imdb.xml b/app/src/main/res/drawable/ic_rating_imdb.xml new file mode 100644 index 00000000..6725d42f --- /dev/null +++ b/app/src/main/res/drawable/ic_rating_imdb.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/app/src/main/res/drawable/ic_rating_tmdb.xml b/app/src/main/res/drawable/ic_rating_tmdb.xml new file mode 100644 index 00000000..31c0be7d --- /dev/null +++ b/app/src/main/res/drawable/ic_rating_tmdb.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_rt_spilled.xml b/app/src/main/res/drawable/ic_rt_spilled.xml new file mode 100644 index 00000000..fea81f97 --- /dev/null +++ b/app/src/main/res/drawable/ic_rt_spilled.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_rt_upright.xml b/app/src/main/res/drawable/ic_rt_upright.xml new file mode 100644 index 00000000..e7166b39 --- /dev/null +++ b/app/src/main/res/drawable/ic_rt_upright.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + diff --git a/app/src/main/seerr/seerr-api.yml b/app/src/main/seerr/seerr-api.yml index 354f3298..665e1e90 100644 --- a/app/src/main/seerr/seerr-api.yml +++ b/app/src/main/seerr/seerr-api.yml @@ -6590,8 +6590,12 @@ paths: type: string example: 'https://www.imdb.com/title/tt0480249' criticsScore: + type: number + example: 8.8 + criticsScoreCount: type: integer - example: 6.5 + format: int64 + example: 2500000 /tv/{tvId}: get: summary: Get TV details @@ -6773,7 +6777,13 @@ paths: example: 85 criticsRating: type: string - enum: ['Rotten', 'Fresh'] + enum: ['Rotten', 'Fresh', 'Certified Fresh'] + audienceScore: + type: integer + example: 65 + audienceRating: + type: string + enum: ['Spilled', 'Upright'] /person/{personId}: get: summary: Get person details diff --git a/app/src/test/java/com/github/damontecres/wholphin/data/model/SourceRatingsTest.kt b/app/src/test/java/com/github/damontecres/wholphin/data/model/SourceRatingsTest.kt new file mode 100644 index 00000000..e91bfd29 --- /dev/null +++ b/app/src/test/java/com/github/damontecres/wholphin/data/model/SourceRatingsTest.kt @@ -0,0 +1,143 @@ +package com.github.damontecres.wholphin.data.model + +import androidx.compose.ui.text.AnnotatedString +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNull +import org.junit.Assert.assertSame +import org.junit.Assert.assertTrue +import org.junit.Test + +class SourceRatingsTest { + @Test + fun movieShowsRtCriticsRtAudienceAndImdbButNotTmdb() { + val ratings = + SourceRatings.of( + rtCriticsScore = 96, + rtCriticsLabel = "Certified Fresh", + rtAudienceScore = 90, + rtAudienceLabel = "Upright", + imdbScore = 8.8, + imdbVotes = 2_500_000, + tmdbScore = 8.4, + tmdbVotes = 30_000, + ) + assertEquals(RtScore(96, RtMark.FRESH), ratings.rtCritics) + assertEquals(RtScore(90, RtMark.UPRIGHT), ratings.rtAudience) + assertEquals(8.8, ratings.imdb!!, 0.0) + assertNull(ratings.tmdb) + } + + @Test + fun tmdbIsShownOnlyWhenNothingElseIs() { + val ratings = SourceRatings.of(tmdbScore = 7.633, tmdbVotes = 120) + assertEquals(7.633, ratings.tmdb!!, 0.0) + assertNull(ratings.rtCritics) + assertNull(ratings.imdb) + assertEquals(listOf("7.6"), ratings.communityEntries.map { it.text }) + + // A single non-TMDB source hides TMDB + assertNull(SourceRatings.of(rtAudienceScore = 40, tmdbScore = 7.0, tmdbVotes = 10).tmdb) + assertNull(SourceRatings.of(imdbScore = 5.0, imdbVotes = 10, tmdbScore = 7.0, tmdbVotes = 10).tmdb) + } + + @Test + fun zeroVoteScoresAreUnratedNotZero() { + val ratings = SourceRatings.of(imdbScore = 0.0, imdbVotes = 0, tmdbScore = 0.0, tmdbVotes = 0) + assertTrue(ratings.isEmpty) + + // A zero-vote IMDb score doesn't count as a source, so TMDB can still be the fallback + val withTmdb = SourceRatings.of(imdbScore = 6.5, imdbVotes = 0, tmdbScore = 7.1, tmdbVotes = 55) + assertNull(withTmdb.imdb) + assertEquals(7.1, withTmdb.tmdb!!, 0.0) + } + + @Test + fun missingVoteCountIsStillObserved() { + assertEquals(8.8, SourceRatings.of(imdbScore = 8.8).imdb!!, 0.0) + } + + @Test + fun outOfRangeScoresAreDropped() { + assertTrue(SourceRatings.of(rtCriticsScore = 101, rtAudienceScore = -1).isEmpty) + assertTrue(SourceRatings.of(imdbScore = 10.5, imdbVotes = 5, tmdbScore = -0.1, tmdbVotes = 5).isEmpty) + assertTrue(SourceRatings.of(imdbScore = 7.0, imdbVotes = -1).isEmpty) + } + + @Test + fun rtMarkComesFromSeerrLabelNotThePercentage() { + // 95% but labelled Rotten and 10% labelled Fresh: the label wins + assertEquals(RtMark.ROTTEN, SourceRatings.of(rtCriticsScore = 95, rtCriticsLabel = "Rotten").rtCritics!!.mark) + assertEquals(RtMark.FRESH, SourceRatings.of(rtCriticsScore = 10, rtCriticsLabel = "Fresh").rtCritics!!.mark) + assertEquals(RtMark.FRESH, SourceRatings.of(rtCriticsScore = 80, rtCriticsLabel = "Certified Fresh").rtCritics!!.mark) + assertEquals(RtMark.UPRIGHT, SourceRatings.of(rtAudienceScore = 20, rtAudienceLabel = "Upright").rtAudience!!.mark) + assertEquals(RtMark.SPILLED, SourceRatings.of(rtAudienceScore = 90, rtAudienceLabel = "Spilled").rtAudience!!.mark) + } + + @Test + fun rtWithoutKnownLabelUsesPwaDefaults() { + assertEquals(RtMark.UNKNOWN, SourceRatings.of(rtCriticsScore = 90).rtCritics!!.mark) + assertEquals(RtMark.UNKNOWN, SourceRatings.of(rtCriticsScore = 90, rtCriticsLabel = "Mystery").rtCritics!!.mark) + assertEquals(RtMark.UPRIGHT, SourceRatings.of(rtAudienceScore = 90).rtAudience!!.mark) + } + + @Test + fun statusLabelMapping() { + assertEquals(RtMark.FRESH, RtMark.fromLabel("Certified Fresh")) + assertEquals(RtMark.FRESH, RtMark.fromLabel("Fresh")) + assertEquals(RtMark.ROTTEN, RtMark.fromLabel("Rotten")) + assertEquals(RtMark.UPRIGHT, RtMark.fromLabel("Upright")) + assertEquals(RtMark.SPILLED, RtMark.fromLabel("Spilled")) + assertNull(RtMark.fromLabel(null)) + assertNull(RtMark.fromLabel("fresh")) + } + + @Test + fun entriesUseThePwaTextAndBadges() { + val ratings = + SourceRatings.of( + rtCriticsScore = 85, + rtCriticsLabel = "Fresh", + rtAudienceScore = 40, + rtAudienceLabel = "Spilled", + imdbScore = 8.0, + imdbVotes = 1, + ) + assertEquals(listOf("85%", "40%"), ratings.criticEntries.map { it.text }) + assertEquals(listOf(INLINE_RT_FRESH, INLINE_RT_SPILLED), ratings.criticEntries.map { it.inlineContentId }) + assertEquals(listOf("8.0"), ratings.communityEntries.map { it.text }) + assertEquals(listOf(INLINE_IMDB), ratings.communityEntries.map { it.inlineContentId }) + } + + private val jellyfinDetails = + QuickDetailsData( + basic = AnnotatedString("2020"), + communityRating = AnnotatedString("7.8 jellyfin"), + criticRating = AnnotatedString("59% jellyfin"), + ) + + @Test + fun jellyfinRatingsAreKeptWhenThereAreNoSourceRatings() { + assertSame(jellyfinDetails, jellyfinDetails.withSourceRatings(null)) + assertSame(jellyfinDetails, jellyfinDetails.withSourceRatings(SourceRatings())) + } + + @Test + fun sourceRatingsReplaceJellyfinRatingsAndMapOntoTheExistingToggles() { + val details = + jellyfinDetails.withSourceRatings( + SourceRatings.of(rtCriticsScore = 96, rtCriticsLabel = "Certified Fresh", imdbScore = 8.8, imdbVotes = 10), + ) + // COMMUNITY_RATING toggle -> IMDb, CRITIC_RATING toggle -> Rotten Tomatoes + assertTrue(details.communityRating!!.text.endsWith("8.8")) + assertTrue(details.criticRating!!.text.endsWith("96%")) + assertEquals(jellyfinDetails.basic, details.basic) + } + + @Test + fun jellyfinValueForASourceThatSeerrDoesNotHaveIsNotMixedIn() { + // Seerr has only RT: the Jellyfin star is not shown next to it + val details = jellyfinDetails.withSourceRatings(SourceRatings.of(rtCriticsScore = 50, rtCriticsLabel = "Fresh")) + assertNull(details.communityRating) + assertTrue(details.criticRating!!.text.endsWith("50%")) + } +} diff --git a/app/src/test/java/com/github/damontecres/wholphin/services/SeerrRatingsServiceTest.kt b/app/src/test/java/com/github/damontecres/wholphin/services/SeerrRatingsServiceTest.kt new file mode 100644 index 00000000..8f4a2627 --- /dev/null +++ b/app/src/test/java/com/github/damontecres/wholphin/services/SeerrRatingsServiceTest.kt @@ -0,0 +1,232 @@ +package com.github.damontecres.wholphin.services + +import com.github.damontecres.wholphin.api.seerr.MoviesApi +import com.github.damontecres.wholphin.api.seerr.SeerrApiClient +import com.github.damontecres.wholphin.api.seerr.TvApi +import com.github.damontecres.wholphin.api.seerr.infrastructure.ClientException +import com.github.damontecres.wholphin.api.seerr.model.MovieDetails +import com.github.damontecres.wholphin.api.seerr.model.MovieMovieIdRatingsGet200Response +import com.github.damontecres.wholphin.api.seerr.model.MovieMovieIdRatingscombinedGet200Response +import com.github.damontecres.wholphin.api.seerr.model.MovieMovieIdRatingscombinedGet200ResponseImdb +import com.github.damontecres.wholphin.api.seerr.model.TvDetails +import com.github.damontecres.wholphin.api.seerr.model.TvTvIdRatingsGet200Response +import com.github.damontecres.wholphin.data.model.BaseItem +import com.github.damontecres.wholphin.data.model.RtMark +import com.github.damontecres.wholphin.data.model.SeerrItemType +import io.mockk.coEvery +import io.mockk.coVerify +import io.mockk.every +import io.mockk.mockk +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.test.runTest +import org.jellyfin.sdk.model.api.BaseItemDto +import org.jellyfin.sdk.model.api.BaseItemKind +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNotNull +import org.junit.Assert.assertNull +import org.junit.Assert.assertTrue +import org.junit.Test +import java.io.IOException +import java.util.UUID + +class SeerrRatingsServiceTest { + private val moviesApi = mockk() + private val tvApi = mockk() + private val apiClient = + mockk { + every { moviesApi } returns this@SeerrRatingsServiceTest.moviesApi + every { tvApi } returns this@SeerrRatingsServiceTest.tvApi + } + private var activeFlow = flowOf(true) + private val seerrService = + mockk { + every { api } returns apiClient + every { active } answers { activeFlow } + } + private val service = SeerrRatingsService(seerrService) + + private fun movieDetails( + average: Double?, + count: Int?, + ) = mockk { + every { voteAverage } returns average?.toBigDecimal() + every { voteCount } returns count + } + + private fun tvDetails( + average: Double?, + count: Int?, + ) = mockk { + every { voteAverage } returns average?.toBigDecimal() + every { voteCount } returns count + } + + private val fullMovieRatings = + MovieMovieIdRatingscombinedGet200Response( + rt = + MovieMovieIdRatingsGet200Response( + criticsScore = 96, + criticsRating = MovieMovieIdRatingsGet200Response.CriticsRating.CERTIFIED_FRESH, + audienceScore = 90, + audienceRating = MovieMovieIdRatingsGet200Response.AudienceRating.UPRIGHT, + ), + imdb = MovieMovieIdRatingscombinedGet200ResponseImdb(criticsScore = 8.8.toBigDecimal(), criticsScoreCount = 2_500_000), + ) + + @Test + fun movieUsesRatingsCombinedAndDoesNotRequestTmdbWhenOtherSourcesExist() = + runTest { + coEvery { moviesApi.movieMovieIdRatingscombinedGet(movieId = 10) } returns fullMovieRatings + + val ratings = service.get(SeerrItemType.MOVIE, 10)!! + + assertEquals(96, ratings.rtCritics?.percent) + assertEquals(RtMark.FRESH, ratings.rtCritics?.mark) + assertEquals(90, ratings.rtAudience?.percent) + assertEquals(8.8, ratings.imdb!!, 0.0) + assertNull(ratings.tmdb) + coVerify(exactly = 0) { moviesApi.movieMovieIdGet(any()) } + } + + @Test + fun seriesUsesTvRatingsIncludingAudienceAndHasNoImdb() = + runTest { + coEvery { tvApi.tvTvIdRatingsGet(tvId = 20) } returns + TvTvIdRatingsGet200Response( + criticsScore = 70, + criticsRating = TvTvIdRatingsGet200Response.CriticsRating.FRESH, + audienceScore = 30, + audienceRating = TvTvIdRatingsGet200Response.AudienceRating.SPILLED, + ) + + val ratings = service.get(SeerrItemType.TV, 20)!! + + assertEquals(RtMark.FRESH, ratings.rtCritics?.mark) + assertEquals(RtMark.SPILLED, ratings.rtAudience?.mark) + assertNull(ratings.imdb) + } + + @Test + fun tmdbIsFetchedOnlyAsFallbackAndZeroVotesAreUnrated() = + runTest { + coEvery { moviesApi.movieMovieIdRatingscombinedGet(movieId = 1) } returns + MovieMovieIdRatingscombinedGet200Response() + coEvery { moviesApi.movieMovieIdGet(movieId = 1) } returns movieDetails(7.4, 321) + coEvery { moviesApi.movieMovieIdRatingscombinedGet(movieId = 2) } returns + MovieMovieIdRatingscombinedGet200Response() + coEvery { moviesApi.movieMovieIdGet(movieId = 2) } returns movieDetails(0.0, 0) + + assertEquals(7.4, service.get(SeerrItemType.MOVIE, 1)!!.tmdb!!, 0.001) + assertTrue(service.get(SeerrItemType.MOVIE, 2)!!.isEmpty) + } + + @Test + fun knownTmdbVoteAvoidsExtraRequest() = + runTest { + coEvery { tvApi.tvTvIdRatingsGet(tvId = 3) } returns TvTvIdRatingsGet200Response() + + val ratings = service.get(SeerrItemType.TV, 3, TmdbVote(8.1, 900))!! + + assertEquals(8.1, ratings.tmdb!!, 0.0) + coVerify(exactly = 0) { tvApi.tvTvIdGet(any()) } + } + + @Test + fun movieAndSeriesWithTheSameTmdbIdDoNotShareCachedRatings() = + runTest { + coEvery { moviesApi.movieMovieIdRatingscombinedGet(movieId = 603) } returns fullMovieRatings + coEvery { tvApi.tvTvIdRatingsGet(tvId = 603) } returns + TvTvIdRatingsGet200Response(criticsScore = 12, criticsRating = TvTvIdRatingsGet200Response.CriticsRating.ROTTEN) + + val movie = service.get(SeerrItemType.MOVIE, 603)!! + val tv = service.get(SeerrItemType.TV, 603)!! + + assertEquals(96, movie.rtCritics?.percent) + assertEquals(12, tv.rtCritics?.percent) + assertEquals(RtMark.ROTTEN, tv.rtCritics?.mark) + assertEquals(movie, service.cached(SeerrItemType.MOVIE, 603)) + assertEquals(tv, service.cached(SeerrItemType.TV, 603)) + } + + @Test + fun successIsCachedSoSeerrIsAskedOnce() = + runTest { + coEvery { moviesApi.movieMovieIdRatingscombinedGet(movieId = 5) } returns fullMovieRatings + + service.get(SeerrItemType.MOVIE, 5) + service.get(SeerrItemType.MOVIE, 5) + + coVerify(exactly = 1) { moviesApi.movieMovieIdRatingscombinedGet(movieId = 5) } + } + + @Test + fun failuresAreNotCachedAndAreRetried() = + runTest { + coEvery { moviesApi.movieMovieIdRatingscombinedGet(movieId = 7) } throws IOException("down") andThen fullMovieRatings + + assertNull(service.get(SeerrItemType.MOVIE, 7)) + assertNull(service.cached(SeerrItemType.MOVIE, 7)) + assertNotNull(service.get(SeerrItemType.MOVIE, 7)?.rtCritics) + } + + @Test + fun serverErrorIsAFailureButNotFoundIsAnAnswer() = + runTest { + coEvery { moviesApi.movieMovieIdRatingscombinedGet(movieId = 8) } throws ClientException("boom", 500) + coEvery { moviesApi.movieMovieIdRatingscombinedGet(movieId = 9) } throws ClientException("none", 404) + coEvery { moviesApi.movieMovieIdGet(movieId = 9) } returns movieDetails(6.0, 40) + + assertNull(service.get(SeerrItemType.MOVIE, 8)) + assertNull(service.cached(SeerrItemType.MOVIE, 8)) + + // 404 from ratings means no RT/IMDb data, TMDB is still available + assertEquals(6.0, service.get(SeerrItemType.MOVIE, 9)!!.tmdb!!, 0.0) + assertNotNull(service.cached(SeerrItemType.MOVIE, 9)) + } + + @Test + fun failedTmdbFallbackIsNotCachedAsNoRating() = + runTest { + coEvery { tvApi.tvTvIdRatingsGet(tvId = 11) } returns TvTvIdRatingsGet200Response() + coEvery { tvApi.tvTvIdGet(tvId = 11) } throws IOException("down") andThen tvDetails(7.0, 10) + + assertNull(service.get(SeerrItemType.TV, 11)) + assertEquals(7.0, service.get(SeerrItemType.TV, 11)!!.tmdb!!, 0.0) + } + + private fun jellyfinItem( + type: BaseItemKind, + providerIds: Map?, + ) = BaseItem(BaseItemDto(id = UUID.randomUUID(), type = type, providerIds = providerIds)) + + @Test + fun jellyfinItemResolvesRatingsThroughItsTmdbId() = + runTest { + coEvery { moviesApi.movieMovieIdRatingscombinedGet(movieId = 42) } returns fullMovieRatings + + val ratings = service.forItem(jellyfinItem(BaseItemKind.MOVIE, mapOf("Tmdb" to "42"))).first() + + assertEquals(96, ratings?.rtCritics?.percent) + } + + @Test + fun jellyfinItemFallsBackToNullWhenSeerrCannotAnswer() = + runTest { + coEvery { moviesApi.movieMovieIdRatingscombinedGet(any()) } returns fullMovieRatings + coEvery { tvApi.tvTvIdRatingsGet(any()) } throws IOException("down") + + // no TMDB id + assertNull(service.forItem(jellyfinItem(BaseItemKind.MOVIE, null)).first()) + assertNull(service.forItem(jellyfinItem(BaseItemKind.MOVIE, mapOf("Imdb" to "tt1"))).first()) + // not a movie/series + assertNull(service.forItem(jellyfinItem(BaseItemKind.EPISODE, mapOf("Tmdb" to "1"))).first()) + assertNull(service.forItem(jellyfinItem(BaseItemKind.BOX_SET, mapOf("Tmdb" to "1"))).first()) + // call fails + assertNull(service.forItem(jellyfinItem(BaseItemKind.SERIES, mapOf("Tmdb" to "2"))).first()) + // Seerr not configured + activeFlow = flowOf(false) + assertNull(service.forItem(jellyfinItem(BaseItemKind.MOVIE, mapOf("Tmdb" to "42"))).first()) + coVerify(exactly = 0) { moviesApi.movieMovieIdRatingscombinedGet(any()) } + } +} From 15b082ccd8306a91ee7f787c1731d78fe79ee67b Mon Sep 17 00:00:00 2001 From: justinzeus Date: Thu, 29 Oct 2026 20:00:31 +0100 Subject: [PATCH 13/26] Show PWA source ratings on Discover screens --- .../wholphin/data/model/DiscoverItem.kt | 19 ------ .../damontecres/wholphin/ui/Formatting.kt | 22 ++---- .../detail/discover/DiscoverMovieDetails.kt | 4 +- .../discover/DiscoverMovieDetailsHeader.kt | 7 +- .../detail/discover/DiscoverMovieViewModel.kt | 17 +++-- .../detail/discover/DiscoverSeriesDetails.kt | 9 ++- .../discover/DiscoverSeriesViewModel.kt | 15 ++-- .../ui/detail/discover/DiscoverUtils.kt | 23 ------- .../wholphin/ui/discover/SeerrDiscoverPage.kt | 68 +++++-------------- 9 files changed, 53 insertions(+), 131 deletions(-) diff --git a/app/src/main/java/com/github/damontecres/wholphin/data/model/DiscoverItem.kt b/app/src/main/java/com/github/damontecres/wholphin/data/model/DiscoverItem.kt index 24d7d340..fe4650a6 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/data/model/DiscoverItem.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/data/model/DiscoverItem.kt @@ -3,8 +3,6 @@ package com.github.damontecres.wholphin.data.model import androidx.compose.runtime.Stable -import com.github.damontecres.wholphin.api.seerr.model.MovieMovieIdRatingsGet200Response -import com.github.damontecres.wholphin.api.seerr.model.TvTvIdRatingsGet200Response import com.github.damontecres.wholphin.ui.detail.CardGridItem import com.github.damontecres.wholphin.ui.nav.Destination import com.github.damontecres.wholphin.util.LocalDateSerializer @@ -123,20 +121,3 @@ data class DiscoverItem( } } } - -/** - * A rating for a discovered item which is usually fetched separately from the item - */ -data class DiscoverRating( - val criticRating: Int?, - val audienceRating: Float?, -) { - constructor(rating: MovieMovieIdRatingsGet200Response) : this( - criticRating = rating.criticsScore, - audienceRating = rating.audienceScore?.div(10f), - ) - constructor(rating: TvTvIdRatingsGet200Response) : this( - criticRating = rating.criticsScore, - audienceRating = null, - ) -} diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/Formatting.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/Formatting.kt index 282c161e..6096e967 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/Formatting.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/Formatting.kt @@ -4,11 +4,12 @@ import android.content.Context import android.content.res.Resources import android.text.format.DateFormat import androidx.annotation.StringRes -import androidx.compose.foundation.text.appendInlineContent import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.buildAnnotatedString import com.github.damontecres.wholphin.R import com.github.damontecres.wholphin.WholphinApplication +import com.github.damontecres.wholphin.data.model.SourceRatings +import com.github.damontecres.wholphin.data.model.appendRatings import org.jellyfin.sdk.model.api.BaseItemDto import org.jellyfin.sdk.model.api.BaseItemKind import org.jellyfin.sdk.model.api.MediaSegmentType @@ -234,27 +235,16 @@ fun AnnotatedString.Builder.dot() = append(" \u2022 ") fun listToDotString( strings: List, - communityRating: Float?, - criticRating: Float?, + ratings: SourceRatings?, ): AnnotatedString = buildAnnotatedString { strings.forEachIndexed { index, string -> append(string) if (index != strings.lastIndex) dot() } - communityRating?.let { - dot() - append(String.format(Locale.getDefault(), "%.1f", it)) - appendInlineContent(id = "star") - } - criticRating?.let { - dot() - append("${it.toInt()}%") - if (it >= 60f) { - appendInlineContent(id = "fresh") - } else { - appendInlineContent(id = "rotten") - } + ratings?.let { + appendRatings(it.communityEntries) + appendRatings(it.criticEntries) } } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverMovieDetails.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverMovieDetails.kt index e91dfb82..c5686e8f 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverMovieDetails.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverMovieDetails.kt @@ -38,7 +38,7 @@ import androidx.tv.material3.Text import com.github.damontecres.wholphin.R import com.github.damontecres.wholphin.api.seerr.model.MovieDetails import com.github.damontecres.wholphin.data.model.DiscoverItem -import com.github.damontecres.wholphin.data.model.DiscoverRating +import com.github.damontecres.wholphin.data.model.SourceRatings import com.github.damontecres.wholphin.data.model.LocalTrailer import com.github.damontecres.wholphin.data.model.RemoteTrailer import com.github.damontecres.wholphin.data.model.SeerrAvailability @@ -185,7 +185,7 @@ fun DiscoverMovieDetailsContent( preferences: UserPreferences, userConfig: SeerrUserConfig?, movie: MovieDetails, - rating: DiscoverRating?, + rating: SourceRatings?, canCancel: Boolean, people: List, trailers: List, diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverMovieDetailsHeader.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverMovieDetailsHeader.kt index 1c0915ec..51a537e3 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverMovieDetailsHeader.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverMovieDetailsHeader.kt @@ -20,7 +20,7 @@ import androidx.tv.material3.MaterialTheme import androidx.tv.material3.Text import com.github.damontecres.wholphin.R import com.github.damontecres.wholphin.api.seerr.model.MovieDetails -import com.github.damontecres.wholphin.data.model.DiscoverRating +import com.github.damontecres.wholphin.data.model.SourceRatings import com.github.damontecres.wholphin.preferences.UserPreferences import com.github.damontecres.wholphin.services.jellyfinId import com.github.damontecres.wholphin.ui.LocalImageUrlService @@ -44,7 +44,7 @@ import kotlin.time.Duration.Companion.minutes fun DiscoverMovieDetailsHeader( preferences: UserPreferences, movie: MovieDetails, - rating: DiscoverRating?, + rating: SourceRatings?, bringIntoViewRequester: BringIntoViewRequester, overviewOnClick: () -> Unit, showLogo: Boolean, @@ -107,8 +107,7 @@ fun DiscoverMovieDetailsHeader( }.let { listToDotString( it, - rating?.audienceRating, - rating?.criticRating?.toFloat(), + rating, ) } } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverMovieViewModel.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverMovieViewModel.kt index 20cecd12..658e4ffe 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverMovieViewModel.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverMovieViewModel.kt @@ -10,7 +10,7 @@ import com.github.damontecres.wholphin.api.seerr.model.RelatedVideo import com.github.damontecres.wholphin.api.seerr.model.RequestPostRequest import com.github.damontecres.wholphin.data.ServerRepository import com.github.damontecres.wholphin.data.model.DiscoverItem -import com.github.damontecres.wholphin.data.model.DiscoverRating +import com.github.damontecres.wholphin.data.model.SourceRatings import com.github.damontecres.wholphin.data.model.RemoteTrailer import com.github.damontecres.wholphin.data.model.RequestStatus import com.github.damontecres.wholphin.data.model.SeerrItemType @@ -19,9 +19,11 @@ import com.github.damontecres.wholphin.data.model.Trailer import com.github.damontecres.wholphin.data.model.hasPermission import com.github.damontecres.wholphin.services.BackdropService import com.github.damontecres.wholphin.services.NavigationManager +import com.github.damontecres.wholphin.services.SeerrRatingsService import com.github.damontecres.wholphin.services.SeerrServerRepository import com.github.damontecres.wholphin.services.SeerrService import com.github.damontecres.wholphin.services.SeerrUserConfig +import com.github.damontecres.wholphin.services.TmdbVote import com.github.damontecres.wholphin.ui.equalsNotNull import com.github.damontecres.wholphin.ui.isNotNullOrBlank import com.github.damontecres.wholphin.ui.launchDefault @@ -60,6 +62,7 @@ class DiscoverMovieViewModel private val backdropService: BackdropService, val serverRepository: ServerRepository, val seerrService: SeerrService, + private val ratingsService: SeerrRatingsService, private val seerrServerRepository: SeerrServerRepository, @Assisted val item: DiscoverItem, ) : ViewModel() { @@ -106,11 +109,11 @@ class DiscoverMovieViewModel viewModelScope.launchIO { val rating = - getDiscoverRating(item.id) { - DiscoverRating( - seerrService.api.moviesApi.movieMovieIdRatingsGet(movieId = item.id), - ) - } + ratingsService.get( + SeerrItemType.MOVIE, + item.id, + TmdbVote(movie.voteAverage?.toDouble(), movie.voteCount?.toLong()), + ) _state.update { it.copy(rating = rating) } } if (state.value.similar.isEmpty()) { @@ -276,7 +279,7 @@ fun canUserCancelRequest( data class DiscoverMovieState( val movie: DataLoadingState = DataLoadingState.Pending, - val rating: DiscoverRating? = null, + val rating: SourceRatings? = null, val seasons: List = emptyList(), val trailers: List = emptyList(), val people: List = emptyList(), diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverSeriesDetails.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverSeriesDetails.kt index 049f7610..88fa0b50 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverSeriesDetails.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverSeriesDetails.kt @@ -34,7 +34,7 @@ import com.github.damontecres.wholphin.R import com.github.damontecres.wholphin.api.seerr.model.TvDetails import com.github.damontecres.wholphin.data.model.BaseItem import com.github.damontecres.wholphin.data.model.DiscoverItem -import com.github.damontecres.wholphin.data.model.DiscoverRating +import com.github.damontecres.wholphin.data.model.SourceRatings import com.github.damontecres.wholphin.data.model.SeerrAvailability import com.github.damontecres.wholphin.data.model.SeerrPermission import com.github.damontecres.wholphin.data.model.Trailer @@ -211,7 +211,7 @@ fun DiscoverSeriesDetailsContent( preferences: UserPreferences, userConfig: SeerrUserConfig?, series: TvDetails, - rating: DiscoverRating?, + rating: SourceRatings?, canCancel: Boolean, seasons: List, similar: List, @@ -422,7 +422,7 @@ fun DiscoverSeriesDetailsContent( @Composable fun DiscoverSeriesDetailsHeader( series: TvDetails, - rating: DiscoverRating?, + rating: SourceRatings?, overviewOnClick: () -> Unit, showLogo: Boolean, modifier: Modifier = Modifier, @@ -466,8 +466,7 @@ fun DiscoverSeriesDetailsHeader( }.let { listToDotString( it, - rating?.audienceRating, - rating?.criticRating?.toFloat(), + rating, ) } } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverSeriesViewModel.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverSeriesViewModel.kt index ec500351..b4d6f37f 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverSeriesViewModel.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverSeriesViewModel.kt @@ -10,7 +10,7 @@ import com.github.damontecres.wholphin.api.seerr.model.RequestRequestIdPutReques import com.github.damontecres.wholphin.api.seerr.model.TvDetails import com.github.damontecres.wholphin.data.ServerRepository import com.github.damontecres.wholphin.data.model.DiscoverItem -import com.github.damontecres.wholphin.data.model.DiscoverRating +import com.github.damontecres.wholphin.data.model.SourceRatings import com.github.damontecres.wholphin.data.model.RemoteTrailer import com.github.damontecres.wholphin.data.model.RequestStatus import com.github.damontecres.wholphin.data.model.SeerrAvailability @@ -18,8 +18,10 @@ import com.github.damontecres.wholphin.data.model.SeerrItemType import com.github.damontecres.wholphin.data.model.Trailer import com.github.damontecres.wholphin.services.BackdropService import com.github.damontecres.wholphin.services.NavigationManager +import com.github.damontecres.wholphin.services.SeerrRatingsService import com.github.damontecres.wholphin.services.SeerrServerRepository import com.github.damontecres.wholphin.services.SeerrService +import com.github.damontecres.wholphin.services.TmdbVote import com.github.damontecres.wholphin.ui.isNotNullOrBlank import com.github.damontecres.wholphin.ui.launchDefault import com.github.damontecres.wholphin.ui.launchIO @@ -60,6 +62,7 @@ class DiscoverSeriesViewModel private val backdropService: BackdropService, val serverRepository: ServerRepository, val seerrService: SeerrService, + private val ratingsService: SeerrRatingsService, private val seerrServerRepository: SeerrServerRepository, @Assisted val item: DiscoverItem, ) : ViewModel() { @@ -109,9 +112,11 @@ class DiscoverSeriesViewModel viewModelScope.launchIO { val rating = - getDiscoverRating(item.id) { - DiscoverRating(seerrService.api.tvApi.tvTvIdRatingsGet(tvId = item.id)) - } + ratingsService.get( + SeerrItemType.TV, + item.id, + TmdbVote(tv.voteAverage?.toDouble(), tv.voteCount?.toLong()), + ) _state.update { it.copy(rating = rating) } } if (state.value.similar.isEmpty()) { @@ -416,7 +421,7 @@ class DiscoverSeriesViewModel data class DiscoverSeriesState( val tvSeries: DataLoadingState = DataLoadingState.Pending, - val rating: DiscoverRating? = null, + val rating: SourceRatings? = null, val seasons: List = emptyList(), val seasons4k: List = emptyList(), val trailers: List = emptyList(), diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverUtils.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverUtils.kt index 3e625d60..cc89159f 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverUtils.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverUtils.kt @@ -1,39 +1,16 @@ package com.github.damontecres.wholphin.ui.detail.discover import android.content.Context -import com.github.damontecres.wholphin.api.seerr.infrastructure.ClientException import com.github.damontecres.wholphin.api.seerr.model.MediaInfo -import com.github.damontecres.wholphin.data.model.DiscoverRating import com.github.damontecres.wholphin.services.NavigationManager import com.github.damontecres.wholphin.services.jellyfinId import com.github.damontecres.wholphin.services.jellyfinIdAsString import com.github.damontecres.wholphin.ui.isNotNullOrBlank import com.github.damontecres.wholphin.ui.nav.Destination import com.github.damontecres.wholphin.ui.showToast -import kotlinx.coroutines.CancellationException import org.jellyfin.sdk.model.api.BaseItemKind import timber.log.Timber -suspend fun getDiscoverRating( - id: Int, - func: suspend () -> DiscoverRating, -): DiscoverRating? = - try { - func.invoke() - } catch (ex: CancellationException) { - throw ex - } catch (ex: ClientException) { - if (ex.statusCode == 404) { - Timber.w("No rating for %s", id) - } else { - Timber.e(ex, "Error fetching rating for %s", id) - } - null - } catch (ex: Exception) { - Timber.e(ex, "Error fetching rating for %s", id) - null - } - /** * Navigates to the Jellyfin media item if the [mediaInfo] has a valid [jellyfinId] * diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/discover/SeerrDiscoverPage.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/discover/SeerrDiscoverPage.kt index cd7c6a27..4bdc42ba 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/discover/SeerrDiscoverPage.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/discover/SeerrDiscoverPage.kt @@ -32,17 +32,17 @@ import androidx.lifecycle.viewModelScope import com.github.damontecres.wholphin.R import com.github.damontecres.wholphin.data.filter.DiscoverFilter import com.github.damontecres.wholphin.data.model.DiscoverItem -import com.github.damontecres.wholphin.data.model.DiscoverRating import com.github.damontecres.wholphin.data.model.QuickDetailsData import com.github.damontecres.wholphin.data.model.SeerrItemType +import com.github.damontecres.wholphin.data.model.SourceRatings import com.github.damontecres.wholphin.preferences.UserPreferences import com.github.damontecres.wholphin.services.BackdropService import com.github.damontecres.wholphin.services.NavigationManager +import com.github.damontecres.wholphin.services.SeerrRatingsService import com.github.damontecres.wholphin.services.SeerrService import com.github.damontecres.wholphin.ui.components.Genre import com.github.damontecres.wholphin.ui.components.HeaderUtils import com.github.damontecres.wholphin.ui.data.RowColumn -import com.github.damontecres.wholphin.ui.detail.discover.getDiscoverRating import com.github.damontecres.wholphin.ui.launchIO import com.github.damontecres.wholphin.ui.listToDotString import com.github.damontecres.wholphin.ui.main.HomePageHeader @@ -57,9 +57,9 @@ import com.github.damontecres.wholphin.ui.util.StringProvider import com.github.damontecres.wholphin.util.DataLoadingState import com.github.damontecres.wholphin.util.DiscoverRequestType import com.github.damontecres.wholphin.util.successValue -import com.google.common.cache.CacheBuilder import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.qualifiers.ApplicationContext +import kotlinx.coroutines.Job import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.update import org.jellyfin.sdk.model.UUID @@ -73,11 +73,12 @@ class SeerrDiscoverViewModel constructor( @param:ApplicationContext private val context: Context, private val seerrService: SeerrService, + private val ratingsService: SeerrRatingsService, val navigationManager: NavigationManager, private val backdropService: BackdropService, ) : ViewModel() { val state = MutableStateFlow(DiscoverState()) - val rating = MutableStateFlow>(mapOf()) + val rating = MutableStateFlow, SourceRatings>>(mapOf()) init { viewModelScope.launchIO { @@ -246,50 +247,23 @@ class SeerrDiscoverViewModel } } - private val ratingCache = - CacheBuilder - .newBuilder() - .maximumSize(100) - .build() + private var ratingJob: Job? = null - // TODO this is not very efficient + /** + * Fetch the ratings for the focused item, cancelling any previous request that is still running + */ fun fetchRating( id: Int, type: SeerrItemType, ) { - viewModelScope.launchIO { - val cachedResult = ratingCache.getIfPresent(id) - if (cachedResult != null) { - return@launchIO + val key = type to id + if (key in rating.value) return + ratingJob?.cancel() + ratingJob = + viewModelScope.launchIO { + val result = ratingsService.get(type, id) ?: return@launchIO + rating.update { it + (key to result) } } - val result = - getDiscoverRating(id) { - when (type) { - SeerrItemType.MOVIE -> { - DiscoverRating( - seerrService.api.moviesApi.movieMovieIdRatingsGet(movieId = id), - ) - } - - SeerrItemType.TV -> { - DiscoverRating(seerrService.api.tvApi.tvTvIdRatingsGet(tvId = id)) - } - - SeerrItemType.PERSON -> { - DiscoverRating(null, null) - } - - SeerrItemType.UNKNOWN -> { - DiscoverRating(null, null) - } - } - } ?: DiscoverRating(null, null) - - ratingCache.put(id, result) - rating.update { - ratingCache.asMap().toMap() - } - } } } @@ -424,14 +398,8 @@ fun SeerrDiscoverPage( ?.toString() ?.let(::add) }.let { - val rating = focusedItem.id.let { ratingMap[it] } - val str = - listToDotString( - it, - rating?.audienceRating, - rating?.criticRating?.toFloat(), - ) - QuickDetailsData(str) + val rating = ratingMap[focusedItem.item.type to focusedItem.id] + QuickDetailsData(listToDotString(it, rating)) } } } From 38db9e5127a18b6847ecbfb3210871a7bce77fe7 Mon Sep 17 00:00:00 2001 From: justinzeus Date: Thu, 29 Oct 2026 20:00:31 +0100 Subject: [PATCH 14/26] Show Seerr source ratings on Jellyfin movie and series details --- .../wholphin/ui/detail/movie/MovieDetails.kt | 1 + .../wholphin/ui/detail/movie/MovieDetailsHeader.kt | 6 +++++- .../wholphin/ui/detail/movie/MovieViewModel.kt | 10 ++++++++++ .../wholphin/ui/detail/series/SeriesDetails.kt | 9 ++++++++- .../wholphin/ui/detail/series/SeriesViewModel.kt | 10 ++++++++++ 5 files changed, 34 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetails.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetails.kt index ef0d186e..bf8d698f 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetails.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetails.kt @@ -339,6 +339,7 @@ fun MovieDetailsContent( chosenStreams = state.chosenStreams, bringIntoViewRequester = bringIntoViewRequester, overviewOnClick = overviewOnClick, + sourceRatings = state.sourceRatings, modifier = Modifier .fillMaxWidth() diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetailsHeader.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetailsHeader.kt index ee8f74f0..13ee747c 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetailsHeader.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetailsHeader.kt @@ -20,6 +20,8 @@ import androidx.tv.material3.Text import com.github.damontecres.wholphin.R import com.github.damontecres.wholphin.data.ChosenStreams import com.github.damontecres.wholphin.data.model.BaseItem +import com.github.damontecres.wholphin.data.model.SourceRatings +import com.github.damontecres.wholphin.data.model.withSourceRatings import com.github.damontecres.wholphin.preferences.UserPreferences import com.github.damontecres.wholphin.ui.components.GenreText import com.github.damontecres.wholphin.ui.components.HeaderUtils @@ -41,8 +43,10 @@ fun MovieDetailsHeader( bringIntoViewRequester: BringIntoViewRequester, overviewOnClick: () -> Unit, modifier: Modifier = Modifier, + sourceRatings: SourceRatings? = null, ) { val dto = movie.data + val quickDetails = remember(movie, sourceRatings) { movie.ui.quickDetails.withSourceRatings(sourceRatings) } val context = LocalContext.current val scope = rememberCoroutineScope() Column( @@ -64,7 +68,7 @@ fun MovieDetailsHeader( modifier = Modifier.fillMaxWidth(.60f), ) { QuickDetails( - movie.ui.quickDetails, + quickDetails, movie.timeRemainingOrRuntime, Modifier.padding(start = HeaderUtils.startPadding), ) diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieViewModel.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieViewModel.kt index 939d1331..c531ca2e 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieViewModel.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieViewModel.kt @@ -12,6 +12,7 @@ import com.github.damontecres.wholphin.data.model.Chapter import com.github.damontecres.wholphin.data.model.DiscoverItem import com.github.damontecres.wholphin.data.model.ItemPlayback import com.github.damontecres.wholphin.data.model.Person +import com.github.damontecres.wholphin.data.model.SourceRatings import com.github.damontecres.wholphin.data.model.Trailer import com.github.damontecres.wholphin.services.BackdropService import com.github.damontecres.wholphin.services.ExtrasService @@ -19,6 +20,7 @@ import com.github.damontecres.wholphin.services.FavoriteWatchManager import com.github.damontecres.wholphin.services.MediaManagementService import com.github.damontecres.wholphin.services.NavigationManager import com.github.damontecres.wholphin.services.PeopleFavorites +import com.github.damontecres.wholphin.services.SeerrRatingsService import com.github.damontecres.wholphin.services.SeerrService import com.github.damontecres.wholphin.services.ServerReportService import com.github.damontecres.wholphin.services.StreamChoiceService @@ -57,6 +59,7 @@ class MovieViewModel constructor( private val api: ApiClient, private val seerrService: SeerrService, + private val ratingsService: SeerrRatingsService, @param:ApplicationContext private val context: Context, private val navigationManager: NavigationManager, val serverRepository: ServerRepository, @@ -152,6 +155,11 @@ class MovieViewModel ) } } + viewModelScope.launchIO { + ratingsService.forItem(movie).collect { ratings -> + _state.update { it.copy(sourceRatings = ratings) } + } + } viewModelScope.launchIO { val results = seerrService.similar(movie).orEmpty() _state.update { @@ -305,6 +313,8 @@ data class MovieState( val extras: List = emptyList(), val similar: List = emptyList(), val discovered: List = emptyList(), + /** Seerr ratings, null until they load or if unavailable */ + val sourceRatings: SourceRatings? = null, val chosenStreams: ChosenStreams? = null, val canDelete: Boolean = false, ) { diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesDetails.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesDetails.kt index f42961ad..60419e83 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesDetails.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesDetails.kt @@ -44,8 +44,10 @@ import com.github.damontecres.wholphin.data.ExtrasItem import com.github.damontecres.wholphin.data.model.BaseItem import com.github.damontecres.wholphin.data.model.DiscoverItem import com.github.damontecres.wholphin.data.model.Person +import com.github.damontecres.wholphin.data.model.SourceRatings import com.github.damontecres.wholphin.data.model.Trailer import com.github.damontecres.wholphin.data.model.studioNames +import com.github.damontecres.wholphin.data.model.withSourceRatings import com.github.damontecres.wholphin.preferences.UserPreferences import com.github.damontecres.wholphin.services.TrailerService import com.github.damontecres.wholphin.ui.Cards @@ -253,6 +255,7 @@ fun SeriesDetails( } }, discovered = state.discovered, + sourceRatings = state.sourceRatings, onClickDiscover = { index, item -> viewModel.navigateTo(item.destination) }, @@ -330,6 +333,7 @@ fun SeriesDetailsContent( extras: List, people: List, discovered: List, + sourceRatings: SourceRatings?, played: Boolean, favorite: Boolean, canDelete: Boolean, @@ -377,6 +381,7 @@ fun SeriesDetailsContent( showLogo = preferences.appPreferences.interfacePreferences.showLogos, overviewOnClick = overviewOnClick, bringIntoViewRequester = bringIntoViewRequester, + sourceRatings = sourceRatings, modifier = Modifier .fillMaxWidth() @@ -654,9 +659,11 @@ fun SeriesDetailsHeader( overviewOnClick: () -> Unit, bringIntoViewRequester: BringIntoViewRequester, modifier: Modifier = Modifier, + sourceRatings: SourceRatings? = null, ) { val scope = rememberCoroutineScope() val dto = series.data + val quickDetails = remember(series, sourceRatings) { series.ui.quickDetails.withSourceRatings(sourceRatings) } Column( verticalArrangement = Arrangement.spacedBy(4.dp), modifier = modifier, @@ -674,7 +681,7 @@ fun SeriesDetailsHeader( modifier = Modifier.fillMaxWidth(.60f), ) { QuickDetails( - series.ui.quickDetails, + quickDetails, null, Modifier.padding(start = HeaderUtils.startPadding), ) diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesViewModel.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesViewModel.kt index 2b92f71b..abcb82a1 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesViewModel.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesViewModel.kt @@ -12,6 +12,7 @@ import com.github.damontecres.wholphin.data.model.BaseItem import com.github.damontecres.wholphin.data.model.DiscoverItem import com.github.damontecres.wholphin.data.model.ItemPlayback import com.github.damontecres.wholphin.data.model.Person +import com.github.damontecres.wholphin.data.model.SourceRatings import com.github.damontecres.wholphin.data.model.Trailer import com.github.damontecres.wholphin.preferences.AppPreferences import com.github.damontecres.wholphin.services.BackdropService @@ -20,6 +21,7 @@ import com.github.damontecres.wholphin.services.FavoriteWatchManager import com.github.damontecres.wholphin.services.MediaManagementService import com.github.damontecres.wholphin.services.NavigationManager import com.github.damontecres.wholphin.services.PeopleFavorites +import com.github.damontecres.wholphin.services.SeerrRatingsService import com.github.damontecres.wholphin.services.SeerrService import com.github.damontecres.wholphin.services.ServerReportService import com.github.damontecres.wholphin.services.StreamChoiceService @@ -100,6 +102,7 @@ class SeriesViewModel private val userPreferencesService: UserPreferencesService, private val backdropService: BackdropService, private val seerrService: SeerrService, + private val ratingsService: SeerrRatingsService, private val mediaManagementService: MediaManagementService, @Assisted val seriesId: UUID, @Assisted val seasonEpisodeIds: SeasonEpisodeIds?, @@ -251,6 +254,11 @@ class SeriesViewModel _state.update { it.copy(similar = similar) } } } + viewModelScope.launchIO { + ratingsService.forItem(series).collect { ratings -> + _state.update { it.copy(sourceRatings = ratings) } + } + } viewModelScope.launchIO { val results = seerrService.similar(series).orEmpty() _state.update { it.copy(discovered = results) } @@ -895,5 +903,7 @@ data class SeriesState( val peopleInEpisode: PeopleInItem = PeopleInItem(), val discovered: List = emptyList(), val discoverSeries: DiscoverItem? = null, + /** Seerr ratings, null until they load or if unavailable */ + val sourceRatings: SourceRatings? = null, val chosenStreams: ChosenStreams? = null, ) From c54acc9c1d5f37533760fd9da43a7326b43a9f7e Mon Sep 17 00:00:00 2001 From: justinzeus Date: Thu, 29 Oct 2026 20:15:08 +0100 Subject: [PATCH 15/26] Show Rotten Tomatoes before IMDb like the PWA --- .../damontecres/wholphin/data/model/BaseItem.kt | 4 ++++ .../wholphin/data/model/SourceRatings.kt | 1 + .../github/damontecres/wholphin/ui/Formatting.kt | 2 +- .../wholphin/ui/components/QuickDetails.kt | 13 ++++++++----- .../wholphin/data/model/SourceRatingsTest.kt | 4 ++++ 5 files changed, 18 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/github/damontecres/wholphin/data/model/BaseItem.kt b/app/src/main/java/com/github/damontecres/wholphin/data/model/BaseItem.kt index 94dc23c2..de3a8f5e 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/data/model/BaseItem.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/data/model/BaseItem.kt @@ -371,6 +371,10 @@ data class QuickDetailsData( val officialRating: AnnotatedString? = null, val criticRating: AnnotatedString? = null, val communityRating: AnnotatedString? = null, + /** + * Show [criticRating] (Rotten Tomatoes) before [communityRating] (IMDb/TMDB) like the PWA, instead of the Jellyfin order + */ + val criticRatingFirst: Boolean = false, ) /** diff --git a/app/src/main/java/com/github/damontecres/wholphin/data/model/SourceRatings.kt b/app/src/main/java/com/github/damontecres/wholphin/data/model/SourceRatings.kt index 451ff57d..1085a8a6 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/data/model/SourceRatings.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/data/model/SourceRatings.kt @@ -219,5 +219,6 @@ fun QuickDetailsData.withSourceRatings(ratings: SourceRatings?): QuickDetailsDat ratings.criticEntries.takeIf { it.isNotEmpty() }?.let { buildAnnotatedString { appendRatings(it) } }, + criticRatingFirst = true, ) } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/Formatting.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/Formatting.kt index 6096e967..30521965 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/Formatting.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/Formatting.kt @@ -243,8 +243,8 @@ fun listToDotString( if (index != strings.lastIndex) dot() } ratings?.let { - appendRatings(it.communityEntries) appendRatings(it.criticEntries) + appendRatings(it.communityEntries) } } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/components/QuickDetails.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/components/QuickDetails.kt index 267677e3..d4228be0 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/components/QuickDetails.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/components/QuickDetails.kt @@ -59,11 +59,14 @@ fun QuickDetails( if (DisplayToggle.OFFICIAL_RATING in enabled) { QuickDetailsText(details.officialRating, Modifier, textStyle, inlineContentMap) } - if (DisplayToggle.COMMUNITY_RATING in enabled) { - QuickDetailsText(details.communityRating, Modifier, textStyle, inlineContentMap) - } - if (DisplayToggle.CRITIC_RATING in enabled) { - QuickDetailsText(details.criticRating, Modifier, textStyle, inlineContentMap) + val community = DisplayToggle.COMMUNITY_RATING in enabled + val critic = DisplayToggle.CRITIC_RATING in enabled + if (details.criticRatingFirst) { + if (critic) QuickDetailsText(details.criticRating, Modifier, textStyle, inlineContentMap) + if (community) QuickDetailsText(details.communityRating, Modifier, textStyle, inlineContentMap) + } else { + if (community) QuickDetailsText(details.communityRating, Modifier, textStyle, inlineContentMap) + if (critic) QuickDetailsText(details.criticRating, Modifier, textStyle, inlineContentMap) } } if (timeRemaining != null) { diff --git a/app/src/test/java/com/github/damontecres/wholphin/data/model/SourceRatingsTest.kt b/app/src/test/java/com/github/damontecres/wholphin/data/model/SourceRatingsTest.kt index e91bfd29..41fee583 100644 --- a/app/src/test/java/com/github/damontecres/wholphin/data/model/SourceRatingsTest.kt +++ b/app/src/test/java/com/github/damontecres/wholphin/data/model/SourceRatingsTest.kt @@ -2,6 +2,7 @@ package com.github.damontecres.wholphin.data.model import androidx.compose.ui.text.AnnotatedString import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse import org.junit.Assert.assertNull import org.junit.Assert.assertSame import org.junit.Assert.assertTrue @@ -131,6 +132,9 @@ class SourceRatingsTest { assertTrue(details.communityRating!!.text.endsWith("8.8")) assertTrue(details.criticRating!!.text.endsWith("96%")) assertEquals(jellyfinDetails.basic, details.basic) + // PWA order: Rotten Tomatoes before IMDb + assertTrue(details.criticRatingFirst) + assertFalse(jellyfinDetails.criticRatingFirst) } @Test From 04d659b115c648fcd718bca0397677e4baeddbdb Mon Sep 17 00:00:00 2001 From: justinzeus Date: Thu, 29 Oct 2026 20:28:51 +0100 Subject: [PATCH 16/26] Tolerate unknown RT labels, expire cached ratings, avoid duplicate collectors and Jellyfin flash --- .../wholphin/services/SeerrRatingsService.kt | 52 +++++++++++-------- .../ui/detail/movie/MovieViewModel.kt | 14 +++-- .../ui/detail/series/SeriesViewModel.kt | 3 +- app/src/main/seerr/seerr-api.yml | 12 ++--- .../services/SeerrRatingsServiceTest.kt | 46 +++++++++++++--- 5 files changed, 89 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/com/github/damontecres/wholphin/services/SeerrRatingsService.kt b/app/src/main/java/com/github/damontecres/wholphin/services/SeerrRatingsService.kt index 9e5287a2..bc59f211 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/services/SeerrRatingsService.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/services/SeerrRatingsService.kt @@ -15,6 +15,7 @@ import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.mapLatest import org.jellyfin.sdk.model.api.BaseItemKind import timber.log.Timber +import java.util.concurrent.TimeUnit import javax.inject.Inject import javax.inject.Singleton @@ -50,6 +51,7 @@ class SeerrRatingsService CacheBuilder .newBuilder() .maximumSize(CACHE_SIZE) + .expireAfterWrite(CACHE_HOURS, TimeUnit.HOURS) .build() fun cached( @@ -57,6 +59,26 @@ class SeerrRatingsService tmdbId: Int, ): SourceRatings? = cache.getIfPresent(Key(type, tmdbId)) + private fun target(item: BaseItem): Pair? { + val type = + when (item.type) { + BaseItemKind.MOVIE -> SeerrItemType.MOVIE + BaseItemKind.SERIES -> SeerrItemType.TV + else -> return null + } + val tmdbId = + item.data.providerIds + ?.get("Tmdb") + ?.toIntOrNull() ?: return null + return type to tmdbId + } + + /** + * The already cached ratings for a Jellyfin movie or series, used to seed a screen's initial state so it + * doesn't show the Jellyfin values first + */ + fun cachedFor(item: BaseItem): SourceRatings? = target(item)?.let { (type, id) -> cached(type, id) } + /** * Ratings for a Jellyfin movie or series using its TMDB id. Follows whether Seerr is active, since the * connection is established asynchronously after login. @@ -65,23 +87,10 @@ class SeerrRatingsService * Callers should keep showing the Jellyfin values for null. */ fun forItem(item: BaseItem): Flow { - val type = - when (item.type) { - BaseItemKind.MOVIE -> SeerrItemType.MOVIE - BaseItemKind.SERIES -> SeerrItemType.TV - else -> null - } - val tmdbId = - item.data.providerIds - ?.get("Tmdb") - ?.toIntOrNull() - return if (type == null || tmdbId == null) { - flowOf(null) - } else { - seerrService.active - .distinctUntilChanged() - .mapLatest { active -> if (active) get(type, tmdbId) else null } - } + val (type, tmdbId) = target(item) ?: return flowOf(null) + return seerrService.active + .distinctUntilChanged() + .mapLatest { active -> if (active) get(type, tmdbId) else null } } /** @@ -176,9 +185,9 @@ class SeerrRatingsService val rt = combined.response SourceRatings.of( rtCriticsScore = rt.criticsScore, - rtCriticsLabel = rt.criticsRating?.value, + rtCriticsLabel = rt.criticsRating, rtAudienceScore = rt.audienceScore, - rtAudienceLabel = rt.audienceRating?.value, + rtAudienceLabel = rt.audienceRating, tmdbScore = tmdb?.average, tmdbVotes = tmdb?.count, ) @@ -195,9 +204,9 @@ class SeerrRatingsService ): SourceRatings = SourceRatings.of( rtCriticsScore = response.rt?.criticsScore, - rtCriticsLabel = response.rt?.criticsRating?.value, + rtCriticsLabel = response.rt?.criticsRating, rtAudienceScore = response.rt?.audienceScore, - rtAudienceLabel = response.rt?.audienceRating?.value, + rtAudienceLabel = response.rt?.audienceRating, imdbScore = response.imdb?.criticsScore, imdbVotes = response.imdb?.criticsScoreCount, tmdbScore = tmdb?.average, @@ -218,5 +227,6 @@ class SeerrRatingsService companion object { private const val CACHE_SIZE = 300L + private const val CACHE_HOURS = 6L } } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieViewModel.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieViewModel.kt index c531ca2e..fc9e7ad6 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieViewModel.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieViewModel.kt @@ -103,6 +103,8 @@ class MovieViewModel return item } + private var ratingsJob: Job? = null + fun init(): Job = viewModelScope.launchDefault { val movie = @@ -127,6 +129,7 @@ class MovieViewModel chosenStreams = chosenStreams, trailers = remoteTrailers, chapters = chapters, + sourceRatings = it.sourceRatings ?: ratingsService.cachedFor(movie), ) } backdropService.submit(movie) @@ -155,11 +158,14 @@ class MovieViewModel ) } } - viewModelScope.launchIO { - ratingsService.forItem(movie).collect { ratings -> - _state.update { it.copy(sourceRatings = ratings) } + // init() runs again on resume and the flow never completes, so don't stack collectors + ratingsJob?.cancel() + ratingsJob = + viewModelScope.launchIO { + ratingsService.forItem(movie).collect { ratings -> + _state.update { it.copy(sourceRatings = ratings ?: it.sourceRatings) } + } } - } viewModelScope.launchIO { val results = seerrService.similar(movie).orEmpty() _state.update { diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesViewModel.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesViewModel.kt index abcb82a1..caaa1fb5 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesViewModel.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesViewModel.kt @@ -221,6 +221,7 @@ class SeriesViewModel seasons = seasons, episodes = episodes, trailers = remoteTrailers, + sourceRatings = ratingsService.cachedFor(series), ) } @@ -256,7 +257,7 @@ class SeriesViewModel } viewModelScope.launchIO { ratingsService.forItem(series).collect { ratings -> - _state.update { it.copy(sourceRatings = ratings) } + _state.update { it.copy(sourceRatings = ratings ?: it.sourceRatings) } } } viewModelScope.launchIO { diff --git a/app/src/main/seerr/seerr-api.yml b/app/src/main/seerr/seerr-api.yml index 665e1e90..d174ccec 100644 --- a/app/src/main/seerr/seerr-api.yml +++ b/app/src/main/seerr/seerr-api.yml @@ -6528,13 +6528,13 @@ paths: example: 85 criticsRating: type: string - enum: ['Rotten', 'Fresh', 'Certified Fresh'] + example: 'Certified Fresh' audienceScore: type: integer example: 65 audienceRating: type: string - enum: ['Spilled', 'Upright'] + example: 'Upright' /movie/{movieId}/ratingscombined: get: summary: Get RT and IMDB movie ratings combined @@ -6573,13 +6573,13 @@ paths: example: 85 criticsRating: type: string - enum: ['Rotten', 'Fresh', 'Certified Fresh'] + example: 'Certified Fresh' audienceScore: type: integer example: 65 audienceRating: type: string - enum: ['Spilled', 'Upright'] + example: 'Upright' imdb: type: object properties: @@ -6777,13 +6777,13 @@ paths: example: 85 criticsRating: type: string - enum: ['Rotten', 'Fresh', 'Certified Fresh'] + example: 'Certified Fresh' audienceScore: type: integer example: 65 audienceRating: type: string - enum: ['Spilled', 'Upright'] + example: 'Upright' /person/{personId}: get: summary: Get person details diff --git a/app/src/test/java/com/github/damontecres/wholphin/services/SeerrRatingsServiceTest.kt b/app/src/test/java/com/github/damontecres/wholphin/services/SeerrRatingsServiceTest.kt index 8f4a2627..2be93089 100644 --- a/app/src/test/java/com/github/damontecres/wholphin/services/SeerrRatingsServiceTest.kt +++ b/app/src/test/java/com/github/damontecres/wholphin/services/SeerrRatingsServiceTest.kt @@ -4,6 +4,7 @@ import com.github.damontecres.wholphin.api.seerr.MoviesApi import com.github.damontecres.wholphin.api.seerr.SeerrApiClient import com.github.damontecres.wholphin.api.seerr.TvApi import com.github.damontecres.wholphin.api.seerr.infrastructure.ClientException +import com.github.damontecres.wholphin.api.seerr.infrastructure.Serializer import com.github.damontecres.wholphin.api.seerr.model.MovieDetails import com.github.damontecres.wholphin.api.seerr.model.MovieMovieIdRatingsGet200Response import com.github.damontecres.wholphin.api.seerr.model.MovieMovieIdRatingscombinedGet200Response @@ -67,9 +68,9 @@ class SeerrRatingsServiceTest { rt = MovieMovieIdRatingsGet200Response( criticsScore = 96, - criticsRating = MovieMovieIdRatingsGet200Response.CriticsRating.CERTIFIED_FRESH, + criticsRating = "Certified Fresh", audienceScore = 90, - audienceRating = MovieMovieIdRatingsGet200Response.AudienceRating.UPRIGHT, + audienceRating = "Upright", ), imdb = MovieMovieIdRatingscombinedGet200ResponseImdb(criticsScore = 8.8.toBigDecimal(), criticsScoreCount = 2_500_000), ) @@ -89,15 +90,42 @@ class SeerrRatingsServiceTest { coVerify(exactly = 0) { moviesApi.movieMovieIdGet(any()) } } + @Test + fun unknownRtLabelsDoNotDropTheResponse() = + runTest { + val json = Serializer.kotlinxSerializationJson + // Labels Seerr might add later must not fail parsing; the scores still show + coEvery { moviesApi.movieMovieIdRatingscombinedGet(movieId = 30) } returns + json.decodeFromString( + """{"rt":{"criticsScore":92,"criticsRating":"Mystery","audienceScore":80,"audienceRating":"Whatever"},""" + + """"imdb":{"criticsScore":8.8,"criticsScoreCount":2500000}}""", + ) + coEvery { tvApi.tvTvIdRatingsGet(tvId = 31) } returns + json.decodeFromString( + """{"criticsScore":70,"criticsRating":"Brand New","audienceScore":60,"audienceRating":"Other"}""", + ) + + val movie = service.get(SeerrItemType.MOVIE, 30)!! + assertEquals(92, movie.rtCritics?.percent) + assertEquals(RtMark.UNKNOWN, movie.rtCritics?.mark) + assertEquals(RtMark.UPRIGHT, movie.rtAudience?.mark) + assertEquals(8.8, movie.imdb!!, 0.0) + + val tv = service.get(SeerrItemType.TV, 31)!! + assertEquals(70, tv.rtCritics?.percent) + assertEquals(RtMark.UNKNOWN, tv.rtCritics?.mark) + assertEquals(60, tv.rtAudience?.percent) + } + @Test fun seriesUsesTvRatingsIncludingAudienceAndHasNoImdb() = runTest { coEvery { tvApi.tvTvIdRatingsGet(tvId = 20) } returns TvTvIdRatingsGet200Response( criticsScore = 70, - criticsRating = TvTvIdRatingsGet200Response.CriticsRating.FRESH, + criticsRating = "Fresh", audienceScore = 30, - audienceRating = TvTvIdRatingsGet200Response.AudienceRating.SPILLED, + audienceRating = "Spilled", ) val ratings = service.get(SeerrItemType.TV, 20)!! @@ -137,7 +165,7 @@ class SeerrRatingsServiceTest { runTest { coEvery { moviesApi.movieMovieIdRatingscombinedGet(movieId = 603) } returns fullMovieRatings coEvery { tvApi.tvTvIdRatingsGet(tvId = 603) } returns - TvTvIdRatingsGet200Response(criticsScore = 12, criticsRating = TvTvIdRatingsGet200Response.CriticsRating.ROTTEN) + TvTvIdRatingsGet200Response(criticsScore = 12, criticsRating = "Rotten") val movie = service.get(SeerrItemType.MOVIE, 603)!! val tv = service.get(SeerrItemType.TV, 603)!! @@ -205,9 +233,15 @@ class SeerrRatingsServiceTest { runTest { coEvery { moviesApi.movieMovieIdRatingscombinedGet(movieId = 42) } returns fullMovieRatings - val ratings = service.forItem(jellyfinItem(BaseItemKind.MOVIE, mapOf("Tmdb" to "42"))).first() + val item = jellyfinItem(BaseItemKind.MOVIE, mapOf("Tmdb" to "42")) + assertNull(service.cachedFor(item)) + + val ratings = service.forItem(item).first() assertEquals(96, ratings?.rtCritics?.percent) + // a later screen can start from the cached value instead of the Jellyfin values + assertEquals(ratings, service.cachedFor(item)) + assertNull(service.cachedFor(jellyfinItem(BaseItemKind.SERIES, mapOf("Tmdb" to "42")))) } @Test From 2ccce98dc1c85a9ed533ba686ce43a5221daf25f Mon Sep 17 00:00:00 2001 From: justinzeus Date: Thu, 29 Oct 2026 21:04:39 +0100 Subject: [PATCH 17/26] Show PWA source ratings on every surface through one shared rating row --- .../damontecres/wholphin/MainActivity.kt | 10 +- .../wholphin/data/model/BaseItem.kt | 28 -- .../wholphin/data/model/SourceRatings.kt | 96 +++--- .../wholphin/services/LatestNextUpService.kt | 6 +- .../wholphin/services/SeerrRatingsService.kt | 151 ++++++++-- .../damontecres/wholphin/ui/Formatting.kt | 11 +- .../damontecres/wholphin/ui/UiConstants.kt | 10 + .../ui/components/CollectionFolderList.kt | 2 +- .../wholphin/ui/components/QuickDetails.kt | 106 ++----- .../wholphin/ui/components/Rating.kt | 277 +----------------- .../ui/components/SourceRatingsRow.kt | 147 ++++++++++ .../discover/DiscoverMovieDetailsHeader.kt | 12 +- .../detail/discover/DiscoverSeriesDetails.kt | 12 +- .../ui/detail/episode/EpisodeDetailsHeader.kt | 2 +- .../wholphin/ui/detail/movie/MovieDetails.kt | 1 - .../ui/detail/movie/MovieDetailsHeader.kt | 6 +- .../ui/detail/movie/MovieViewModel.kt | 15 - .../ui/detail/series/FocusedEpisodeHeader.kt | 4 +- .../ui/detail/series/SeriesDetails.kt | 9 +- .../ui/detail/series/SeriesViewModel.kt | 10 - .../wholphin/ui/discover/SeerrDiscoverPage.kt | 7 +- .../damontecres/wholphin/ui/main/HomePage.kt | 6 +- .../wholphin/data/model/SourceRatingsTest.kt | 71 +++-- .../services/SeerrRatingsItemsTest.kt | 268 +++++++++++++++++ .../services/SeerrRatingsServiceTest.kt | 6 +- .../ui/components/SourceRatingsRowTest.kt | 239 +++++++++++++++ 26 files changed, 944 insertions(+), 568 deletions(-) create mode 100644 app/src/main/java/com/github/damontecres/wholphin/ui/components/SourceRatingsRow.kt create mode 100644 app/src/test/java/com/github/damontecres/wholphin/services/SeerrRatingsItemsTest.kt create mode 100644 app/src/test/java/com/github/damontecres/wholphin/ui/components/SourceRatingsRowTest.kt diff --git a/app/src/main/java/com/github/damontecres/wholphin/MainActivity.kt b/app/src/main/java/com/github/damontecres/wholphin/MainActivity.kt index a872d3be..175789e8 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/MainActivity.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/MainActivity.kt @@ -45,6 +45,7 @@ import com.github.damontecres.wholphin.services.NavigationManager import com.github.damontecres.wholphin.services.PlaybackLifecycleObserver import com.github.damontecres.wholphin.services.RefreshRateService import com.github.damontecres.wholphin.services.ScreensaverService +import com.github.damontecres.wholphin.services.SeerrRatingsService import com.github.damontecres.wholphin.services.ServerEventListener import com.github.damontecres.wholphin.services.SetupDestination import com.github.damontecres.wholphin.services.SetupNavigationManager @@ -58,6 +59,7 @@ import com.github.damontecres.wholphin.ui.CoilConfig import com.github.damontecres.wholphin.ui.LocalImageUrlService import com.github.damontecres.wholphin.ui.collectLatestIn import com.github.damontecres.wholphin.ui.components.LoadingPage +import com.github.damontecres.wholphin.ui.components.LocalSeerrRatingsService import com.github.damontecres.wholphin.ui.launchDefault import com.github.damontecres.wholphin.ui.nav.Destination import com.github.damontecres.wholphin.ui.playback.PlayExternalViewModel @@ -119,6 +121,9 @@ class MainActivity : AppCompatActivity() { @Inject lateinit var imageUrlService: ImageUrlService + @Inject + lateinit var seerrRatingsService: SeerrRatingsService + @Inject lateinit var refreshRateService: RefreshRateService @@ -263,7 +268,10 @@ class MainActivity : AppCompatActivity() { LaunchedEffect(appPreferences.debugLogging) { DebugLogTree.INSTANCE.enabled = appPreferences.debugLogging } - CompositionLocalProvider(LocalImageUrlService provides imageUrlService) { + CompositionLocalProvider( + LocalImageUrlService provides imageUrlService, + LocalSeerrRatingsService provides seerrRatingsService, + ) { WholphinTheme( true, appThemeColors = appPreferences.interfacePreferences.appThemeColors, diff --git a/app/src/main/java/com/github/damontecres/wholphin/data/model/BaseItem.kt b/app/src/main/java/com/github/damontecres/wholphin/data/model/BaseItem.kt index de3a8f5e..4b38d398 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/data/model/BaseItem.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/data/model/BaseItem.kt @@ -1,6 +1,5 @@ package com.github.damontecres.wholphin.data.model -import androidx.compose.foundation.text.appendInlineContent import androidx.compose.runtime.Immutable import androidx.compose.runtime.Stable import androidx.compose.ui.text.AnnotatedString @@ -32,7 +31,6 @@ import org.jellyfin.sdk.model.api.BaseItemDto import org.jellyfin.sdk.model.api.BaseItemKind import org.jellyfin.sdk.model.api.CollectionType import org.jellyfin.sdk.model.extensions.ticks -import java.util.Locale import java.util.UUID import kotlin.time.Duration @@ -234,26 +232,6 @@ data class BaseItem( append(it) } }, - communityRating = - data.communityRating?.let { - buildAnnotatedString { - dot() - append(String.format(Locale.getDefault(), "%.1f", it)) - appendInlineContent(id = "star") - } - }, - criticRating = - data.criticRating?.let { - buildAnnotatedString { - dot() - append("${it.toInt()}%") - if (it >= 60f) { - appendInlineContent(id = "fresh") - } else { - appendInlineContent(id = "rotten") - } - } - }, ), ) @@ -369,12 +347,6 @@ data class BaseItemUi( data class QuickDetailsData( val basic: AnnotatedString, val officialRating: AnnotatedString? = null, - val criticRating: AnnotatedString? = null, - val communityRating: AnnotatedString? = null, - /** - * Show [criticRating] (Rotten Tomatoes) before [communityRating] (IMDb/TMDB) like the PWA, instead of the Jellyfin order - */ - val criticRatingFirst: Boolean = false, ) /** diff --git a/app/src/main/java/com/github/damontecres/wholphin/data/model/SourceRatings.kt b/app/src/main/java/com/github/damontecres/wholphin/data/model/SourceRatings.kt index 1085a8a6..f6c6e5e2 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/data/model/SourceRatings.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/data/model/SourceRatings.kt @@ -1,10 +1,6 @@ package com.github.damontecres.wholphin.data.model -import androidx.compose.foundation.text.appendInlineContent import androidx.compose.runtime.Immutable -import androidx.compose.ui.text.AnnotatedString -import androidx.compose.ui.text.buildAnnotatedString -import com.github.damontecres.wholphin.ui.dot import java.util.Locale /** @@ -43,16 +39,27 @@ data class RtScore( ) /** - * One displayable rating + * The badge drawn in front of a rating's number. One per PWA icon. + */ +enum class RatingBadge { + RT_FRESH, + RT_ROTTEN, + RT_UPRIGHT, + RT_SPILLED, + + /** Rotten Tomatoes without a recognised label, drawn muted */ + RT_UNKNOWN, + IMDB, + TMDB, +} + +/** + * One displayable rating: a badge and its number */ @Immutable sealed interface RatingEntry { val text: String - - /** - * The id of the inline content (see [com.github.damontecres.wholphin.ui.components.rememberQuickDetailsContentMap]) for this entry's badge - */ - val inlineContentId: String + val badge: RatingBadge data class RottenTomatoes( val score: RtScore, @@ -60,14 +67,14 @@ sealed interface RatingEntry { val critics: Boolean, ) : RatingEntry { override val text: String get() = "${score.percent}%" - override val inlineContentId: String + override val badge: RatingBadge get() = when (score.mark) { - RtMark.FRESH -> INLINE_RT_FRESH - RtMark.ROTTEN -> INLINE_RT_ROTTEN - RtMark.UPRIGHT -> INLINE_RT_UPRIGHT - RtMark.SPILLED -> INLINE_RT_SPILLED - RtMark.UNKNOWN -> INLINE_RT_UNKNOWN + RtMark.FRESH -> RatingBadge.RT_FRESH + RtMark.ROTTEN -> RatingBadge.RT_ROTTEN + RtMark.UPRIGHT -> RatingBadge.RT_UPRIGHT + RtMark.SPILLED -> RatingBadge.RT_SPILLED + RtMark.UNKNOWN -> RatingBadge.RT_UNKNOWN } } @@ -75,25 +82,17 @@ sealed interface RatingEntry { val score: Double, ) : RatingEntry { override val text: String get() = formatScore(score) - override val inlineContentId: String get() = INLINE_IMDB + override val badge: RatingBadge get() = RatingBadge.IMDB } data class Tmdb( val score: Double, ) : RatingEntry { override val text: String get() = formatScore(score) - override val inlineContentId: String get() = INLINE_TMDB + override val badge: RatingBadge get() = RatingBadge.TMDB } } -const val INLINE_RT_FRESH = "fresh" -const val INLINE_RT_ROTTEN = "rotten" -const val INLINE_RT_UPRIGHT = "rt_upright" -const val INLINE_RT_SPILLED = "rt_spilled" -const val INLINE_RT_UNKNOWN = "rt_unknown" -const val INLINE_IMDB = "imdb" -const val INLINE_TMDB = "tmdb" - private fun formatScore(score: Double) = String.format(Locale.getDefault(), "%.1f", score) /** @@ -131,6 +130,16 @@ data class SourceRatings( tmdb?.let { RatingEntry.Tmdb(it) }, ) + /** + * The entries to draw in PWA order (Rotten Tomatoes, then IMDb or TMDB). + * + * Rotten Tomatoes is controlled by the critic rating display setting and IMDb/TMDB by the community rating setting. + */ + fun visibleEntries( + community: Boolean, + critic: Boolean, + ): List = (if (critic) criticEntries else emptyList()) + (if (community) communityEntries else emptyList()) + companion object { const val MAX_PERCENT = 100.0 const val MAX_SCORE = 10.0 @@ -187,38 +196,3 @@ data class SourceRatings( } } } - -/** - * Appends each entry as a dot, its badge, and its score - */ -fun AnnotatedString.Builder.appendRatings(entries: List) { - entries.forEach { - dot() - appendInlineContent(it.inlineContentId) - append(" ") - append(it.text) - } -} - -/** - * Replaces the Jellyfin community & critic ratings with these ratings. - * - * IMDb/TMDB are shown with the community rating setting, Rotten Tomatoes with the critic rating setting. - * If there are no ratings, the Jellyfin values are kept. - */ -fun QuickDetailsData.withSourceRatings(ratings: SourceRatings?): QuickDetailsData = - if (ratings == null || ratings.isEmpty) { - this - } else { - copy( - communityRating = - ratings.communityEntries.takeIf { it.isNotEmpty() }?.let { - buildAnnotatedString { appendRatings(it) } - }, - criticRating = - ratings.criticEntries.takeIf { it.isNotEmpty() }?.let { - buildAnnotatedString { appendRatings(it) } - }, - criticRatingFirst = true, - ) - } diff --git a/app/src/main/java/com/github/damontecres/wholphin/services/LatestNextUpService.kt b/app/src/main/java/com/github/damontecres/wholphin/services/LatestNextUpService.kt index 4ce6583f..dbaa219e 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/services/LatestNextUpService.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/services/LatestNextUpService.kt @@ -6,7 +6,7 @@ package com.github.damontecres.wholphin.services import com.github.damontecres.wholphin.data.model.BaseItem -import com.github.damontecres.wholphin.ui.SlimItemFields +import com.github.damontecres.wholphin.ui.HomeSlimItemFields import com.github.damontecres.wholphin.util.LocalDateTimeSerializer import com.github.damontecres.wholphin.util.WholphinDispatchers import kotlinx.coroutines.async @@ -58,7 +58,7 @@ class LatestNextUpService val request = GetResumeItemsRequest( userId = userId, - fields = SlimItemFields, + fields = HomeSlimItemFields, limit = limit, mediaTypes = listOf(MediaType.VIDEO), excludeItemTypes = if (!includeEpisodes) listOf(BaseItemKind.EPISODE) else null, @@ -90,7 +90,7 @@ class LatestNextUpService val request = GetNextUpRequest( userId = userId, - fields = SlimItemFields, + fields = HomeSlimItemFields, imageTypeLimit = 1, parentId = null, limit = limit, diff --git a/app/src/main/java/com/github/damontecres/wholphin/services/SeerrRatingsService.kt b/app/src/main/java/com/github/damontecres/wholphin/services/SeerrRatingsService.kt index bc59f211..20942c78 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/services/SeerrRatingsService.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/services/SeerrRatingsService.kt @@ -9,12 +9,19 @@ import com.github.damontecres.wholphin.data.model.SourceRatings import com.google.common.cache.CacheBuilder import kotlinx.coroutines.CancellationException import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.delay import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.emitAll +import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.mapLatest +import org.jellyfin.sdk.api.client.ApiClient +import org.jellyfin.sdk.api.client.extensions.userLibraryApi import org.jellyfin.sdk.model.api.BaseItemKind import timber.log.Timber +import java.util.Optional +import java.util.UUID import java.util.concurrent.TimeUnit import javax.inject.Inject import javax.inject.Singleton @@ -28,7 +35,22 @@ data class TmdbVote( ) /** - * Fetches [SourceRatings] for a title from Seerr, the same source the Wolfskin PWA uses + * The Seerr title whose ratings are shown for a Jellyfin item + */ +data class RatingsTarget( + val type: SeerrItemType, + val tmdbId: Int, +) + +/** + * Fetches [SourceRatings] for a title from Seerr, the same source the Wolfskin PWA uses. This is the only way ratings + * reach the UI, see [com.github.damontecres.wholphin.ui.components.rememberSourceRatings]. + * + * Which Jellyfin items have ratings follows the PWA, which shows ratings for a title and nothing else: + * - movies show their own ratings + * - series show their own ratings + * - seasons and episodes show their series' ratings, as the PWA does for the title page an episode belongs to + * - everything else (collections, music, photos, programs, ...) has none * * Movies use `ratingscombined` (RT critics, RT audience, IMDb), series use `tv/{id}/ratings` (RT). TMDB comes from * `voteAverage`/`voteCount` and is only requested when no other source has a score. @@ -41,6 +63,7 @@ class SeerrRatingsService @Inject constructor( private val seerrService: SeerrService, + private val api: ApiClient, ) { private data class Key( val type: SeerrItemType, @@ -54,43 +77,118 @@ class SeerrRatingsService .expireAfterWrite(CACHE_HOURS, TimeUnit.HOURS) .build() + /** + * The TMDB id of a Jellyfin movie or series, empty if it has none. Items such as an episode on the home page + * don't carry their series' provider ids, so this is how they are found. + */ + private val tmdbIds = + CacheBuilder + .newBuilder() + .maximumSize(CACHE_SIZE) + .expireAfterWrite(CACHE_HOURS, TimeUnit.HOURS) + .build>() + fun cached( type: SeerrItemType, tmdbId: Int, ): SourceRatings? = cache.getIfPresent(Key(type, tmdbId)) - private fun target(item: BaseItem): Pair? { - val type = - when (item.type) { - BaseItemKind.MOVIE -> SeerrItemType.MOVIE - BaseItemKind.SERIES -> SeerrItemType.TV - else -> return null - } - val tmdbId = - item.data.providerIds - ?.get("Tmdb") - ?.toIntOrNull() ?: return null - return type to tmdbId + /** + * The Jellyfin item whose provider ids give the TMDB id, null if the item never has ratings. + * An episode's or season's own provider ids are for the episode or season, so those use the series. + */ + private fun ownerId(item: BaseItem): UUID? = + when (item.type) { + BaseItemKind.MOVIE, BaseItemKind.SERIES -> item.id + BaseItemKind.SEASON, BaseItemKind.EPISODE -> item.data.seriesId + else -> null + } + + /** + * The TMDB id if it is known without a request: the item's own provider ids or an earlier lookup. + * Present but empty means the item definitely has no TMDB id, null means unknown. + */ + private fun knownTmdbId( + item: BaseItem, + ownerId: UUID, + ): Optional? = + item.data.providerIds + ?.takeIf { ownerId == item.id && it.isNotEmpty() } + ?.let { Optional.ofNullable(it["Tmdb"]?.toIntOrNull()) } + ?: tmdbIds.getIfPresent(ownerId) + + private fun type(item: BaseItem): SeerrItemType? = + when (item.type) { + BaseItemKind.MOVIE -> SeerrItemType.MOVIE + BaseItemKind.SERIES, BaseItemKind.SEASON, BaseItemKind.EPISODE -> SeerrItemType.TV + else -> null + } + + private fun knownTarget(item: BaseItem): RatingsTarget? { + val type = type(item) ?: return null + val owner = ownerId(item) ?: return null + return knownTmdbId(item, owner)?.orElse(null)?.let { RatingsTarget(type, it) } } /** - * The already cached ratings for a Jellyfin movie or series, used to seed a screen's initial state so it - * doesn't show the Jellyfin values first + * Finds the [RatingsTarget] for an item, asking Jellyfin for the provider ids if they are not at hand. + * Null if the item has no ratings, no TMDB id or the lookup failed. */ - fun cachedFor(item: BaseItem): SourceRatings? = target(item)?.let { (type, id) -> cached(type, id) } + suspend fun resolveTarget(item: BaseItem): RatingsTarget? { + val type = type(item) ?: return null + val owner = ownerId(item) ?: return null + val tmdb = + knownTmdbId(item, owner) ?: try { + Optional + .ofNullable( + api.userLibraryApi + .getItem(owner) + .content.providerIds + ?.get("Tmdb") + ?.toIntOrNull(), + ).also { tmdbIds.put(owner, it) } + } catch (ex: CancellationException) { + throw ex + } catch (ex: Exception) { + Timber.w(ex, "Error fetching provider ids for %s", owner) + return null + } + return tmdb.orElse(null)?.let { RatingsTarget(type, it) } + } /** - * Ratings for a Jellyfin movie or series using its TMDB id. Follows whether Seerr is active, since the - * connection is established asynchronously after login. - * - * Emits null while Seerr is not active, the item isn't a movie/series with a TMDB id, or the lookup failed. - * Callers should keep showing the Jellyfin values for null. + * The already cached ratings for an item, used to seed a screen's state so it doesn't flash empty */ - fun forItem(item: BaseItem): Flow { - val (type, tmdbId) = target(item) ?: return flowOf(null) - return seerrService.active - .distinctUntilChanged() - .mapLatest { active -> if (active) get(type, tmdbId) else null } + fun cachedFor(item: BaseItem): SourceRatings? = knownTarget(item)?.let { cached(it.type, it.tmdbId) } + + /** + * Ratings for a Jellyfin item. Follows whether Seerr is active, since the connection is established + * asynchronously after login. + * + * Already cached ratings are emitted at once. Otherwise nothing is requested until [debounceMillis] has passed, so + * collecting for each focused item while scrolling quickly only asks Seerr about the item the user stops on: + * collecting is cancelled for the previous item, which cancels the wait or the request in progress. + * + * Emits null while Seerr is not active, the item has no ratings (see above) or no TMDB id, or the lookup failed. + */ + fun forItem( + item: BaseItem?, + debounceMillis: Long = DEBOUNCE_MILLIS, + ): Flow { + if (item == null || type(item) == null) return flowOf(null) + cachedFor(item)?.let { return flowOf(it) } + val owner = ownerId(item) ?: return flowOf(null) + if (knownTmdbId(item, owner)?.isPresent == false) return flowOf(null) + return flow { + delay(debounceMillis) + emitAll( + seerrService.active + .distinctUntilChanged() + .mapLatest { active -> + if (active) resolveTarget(item)?.let { get(it.type, it.tmdbId) } else null + }, + ) + } } /** @@ -228,5 +326,6 @@ class SeerrRatingsService companion object { private const val CACHE_SIZE = 300L private const val CACHE_HOURS = 6L + const val DEBOUNCE_MILLIS = 350L } } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/Formatting.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/Formatting.kt index 30521965..f774a0da 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/Formatting.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/Formatting.kt @@ -8,8 +8,6 @@ import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.buildAnnotatedString import com.github.damontecres.wholphin.R import com.github.damontecres.wholphin.WholphinApplication -import com.github.damontecres.wholphin.data.model.SourceRatings -import com.github.damontecres.wholphin.data.model.appendRatings import org.jellyfin.sdk.model.api.BaseItemDto import org.jellyfin.sdk.model.api.BaseItemKind import org.jellyfin.sdk.model.api.MediaSegmentType @@ -233,19 +231,12 @@ val MediaSegmentType.skipStringRes: Int fun AnnotatedString.Builder.dot() = append(" \u2022 ") -fun listToDotString( - strings: List, - ratings: SourceRatings?, -): AnnotatedString = +fun listToDotString(strings: List): AnnotatedString = buildAnnotatedString { strings.forEachIndexed { index, string -> append(string) if (index != strings.lastIndex) dot() } - ratings?.let { - appendRatings(it.criticEntries) - appendRatings(it.communityEntries) - } } @get:StringRes diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/UiConstants.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/UiConstants.kt index 2e57b407..786db3d5 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/UiConstants.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/UiConstants.kt @@ -75,12 +75,22 @@ val SlimItemFields = */ val ItemRowFields = SlimItemFields + ItemFields.PRIMARY_IMAGE_ASPECT_RATIO +/** + * [ItemFields] for the home page's rows. [ItemFields.PROVIDER_IDS] is needed so a focused movie or series has its TMDB id + * for [com.github.damontecres.wholphin.services.SeerrRatingsService] without another request. + */ val HomeItemFields = listOf( ItemFields.OVERVIEW, ItemFields.CAN_DELETE, + ItemFields.PROVIDER_IDS, ) +/** + * [SlimItemFields] for the home page's continue watching & next up rows, see [HomeItemFields] + */ +val HomeSlimItemFields = SlimItemFields + ItemFields.PROVIDER_IDS + val PhotoItemFields = DetailItemFields + listOf( diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/components/CollectionFolderList.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/components/CollectionFolderList.kt index a048ed94..967ddb07 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/components/CollectionFolderList.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/components/CollectionFolderList.kt @@ -250,7 +250,7 @@ fun CollectionFolderListDetails( ) item?.let { - QuickDetails(item.ui.quickDetails, null) + QuickDetails(item, null) } OverviewText( diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/components/QuickDetails.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/components/QuickDetails.kt index d4228be0..902ce814 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/components/QuickDetails.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/components/QuickDetails.kt @@ -1,41 +1,24 @@ package com.github.damontecres.wholphin.ui.components -import androidx.annotation.DrawableRes -import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.text.InlineTextContent -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Star import androidx.compose.runtime.Composable import androidx.compose.runtime.NonRestartableComposable import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.ColorFilter -import androidx.compose.ui.graphics.ColorMatrix -import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalResources -import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.AnnotatedString -import androidx.compose.ui.text.Placeholder -import androidx.compose.ui.text.PlaceholderVerticalAlign import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.buildAnnotatedString -import androidx.tv.material3.Icon import androidx.tv.material3.MaterialTheme import androidx.tv.material3.Text import com.github.damontecres.wholphin.R -import com.github.damontecres.wholphin.data.model.INLINE_IMDB -import com.github.damontecres.wholphin.data.model.INLINE_RT_FRESH -import com.github.damontecres.wholphin.data.model.INLINE_RT_ROTTEN -import com.github.damontecres.wholphin.data.model.INLINE_RT_SPILLED -import com.github.damontecres.wholphin.data.model.INLINE_RT_UNKNOWN -import com.github.damontecres.wholphin.data.model.INLINE_RT_UPRIGHT -import com.github.damontecres.wholphin.data.model.INLINE_TMDB +import com.github.damontecres.wholphin.data.model.BaseItem import com.github.damontecres.wholphin.data.model.QuickDetailsData +import com.github.damontecres.wholphin.data.model.SourceRatings import com.github.damontecres.wholphin.preferences.DisplayToggle +import com.github.damontecres.wholphin.services.SeerrRatingsService import com.github.damontecres.wholphin.ui.dot import com.github.damontecres.wholphin.ui.formatTime import com.github.damontecres.wholphin.ui.util.LocalClock @@ -43,6 +26,12 @@ import com.github.damontecres.wholphin.ui.util.LocalInterfaceCustomization import org.jellyfin.sdk.model.DateTime import kotlin.time.Duration +/** + * The line of details under a title: year, runtime, etc, then the ratings, then when it ends. + * + * Ratings are only drawn for [ratings], never from the Jellyfin item. Pass the result of [rememberSourceRatings] or null + * for surfaces without ratings. + */ @Composable fun QuickDetails( details: QuickDetailsData?, @@ -50,24 +39,16 @@ fun QuickDetails( modifier: Modifier = Modifier, textStyle: TextStyle = MaterialTheme.typography.titleSmall, endsAt: DateTime? = null, + ratings: SourceRatings? = null, ) { val enabled = LocalInterfaceCustomization.current.enabledDisplayToggles - val inlineContentMap = rememberQuickDetailsContentMap(textStyle) Row(modifier = modifier) { if (details != null) { - QuickDetailsText(details.basic, Modifier, textStyle, inlineContentMap) + QuickDetailsText(details.basic, Modifier, textStyle) if (DisplayToggle.OFFICIAL_RATING in enabled) { - QuickDetailsText(details.officialRating, Modifier, textStyle, inlineContentMap) - } - val community = DisplayToggle.COMMUNITY_RATING in enabled - val critic = DisplayToggle.CRITIC_RATING in enabled - if (details.criticRatingFirst) { - if (critic) QuickDetailsText(details.criticRating, Modifier, textStyle, inlineContentMap) - if (community) QuickDetailsText(details.communityRating, Modifier, textStyle, inlineContentMap) - } else { - if (community) QuickDetailsText(details.communityRating, Modifier, textStyle, inlineContentMap) - if (critic) QuickDetailsText(details.criticRating, Modifier, textStyle, inlineContentMap) + QuickDetailsText(details.officialRating, Modifier, textStyle) } + SourceRatingsRow(ratings, Modifier, textStyle) } if (timeRemaining != null) { TimeRemaining(timeRemaining, textStyle = textStyle) @@ -77,64 +58,41 @@ fun QuickDetails( } } +/** + * [QuickDetails] for a Jellyfin item with the ratings the PWA shows for it, if any (see [SeerrRatingsService]). + */ +@Composable +fun QuickDetails( + item: BaseItem, + timeRemaining: Duration?, + modifier: Modifier = Modifier, + textStyle: TextStyle = MaterialTheme.typography.titleSmall, + endsAt: DateTime? = null, +) = QuickDetails( + details = item.ui.quickDetails, + timeRemaining = timeRemaining, + modifier = modifier, + textStyle = textStyle, + endsAt = endsAt, + ratings = rememberSourceRatings(item), +) + @NonRestartableComposable @Composable fun QuickDetailsText( str: AnnotatedString?, modifier: Modifier = Modifier, textStyle: TextStyle = MaterialTheme.typography.titleSmall, - inlineContentMap: Map = rememberQuickDetailsContentMap(textStyle), ) = str?.let { Text( text = str, color = MaterialTheme.colorScheme.onSurface, style = textStyle, - inlineContent = inlineContentMap, maxLines = 1, modifier = modifier, ) } -@Composable -fun rememberQuickDetailsContentMap(textStyle: TextStyle = MaterialTheme.typography.titleSmall) = - remember(textStyle) { - val square = Placeholder(textStyle.fontSize, textStyle.fontSize, PlaceholderVerticalAlign.TextCenter) - // Wordmark badges are wider than tall, like in the PWA - val wide = Placeholder(textStyle.fontSize * 1.8f, textStyle.fontSize, PlaceholderVerticalAlign.TextCenter) - fun badge( - placeholder: Placeholder, - @DrawableRes resId: Int, - muted: Boolean = false, - ) = InlineTextContent(placeholder) { - Image( - painter = painterResource(resId), - contentDescription = null, - contentScale = ContentScale.Fit, - alpha = if (muted) 0.55f else 1f, - colorFilter = if (muted) ColorFilter.colorMatrix(ColorMatrix().apply { setToSaturation(0f) }) else null, - modifier = Modifier.fillMaxSize(), - ) - } - mapOf( - "star" to - InlineTextContent(square) { - Icon( - imageVector = Icons.Filled.Star, - tint = FilledStarColor, - contentDescription = null, - modifier = Modifier.fillMaxSize(), - ) - }, - INLINE_RT_ROTTEN to badge(square, R.drawable.ic_rotten_tomatoes_rotten), - INLINE_RT_FRESH to badge(square, R.drawable.ic_rotten_tomatoes_fresh), - INLINE_RT_UPRIGHT to badge(square, R.drawable.ic_rt_upright), - INLINE_RT_SPILLED to badge(square, R.drawable.ic_rt_spilled), - INLINE_RT_UNKNOWN to badge(square, R.drawable.ic_rotten_tomatoes_fresh, muted = true), - INLINE_IMDB to badge(wide, R.drawable.ic_rating_imdb), - INLINE_TMDB to badge(wide, R.drawable.ic_rating_tmdb), - ) - } - @Composable fun TimeRemaining( remaining: Duration, diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/components/Rating.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/components/Rating.kt index c52fb52f..460eda05 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/components/Rating.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/components/Rating.kt @@ -1,93 +1,29 @@ package com.github.damontecres.wholphin.ui.components -import androidx.compose.foundation.background -import androidx.compose.foundation.focusGroup import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.aspectRatio -import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.lazy.LazyRow -import androidx.compose.foundation.selection.selectable -import androidx.compose.foundation.selection.selectableGroup -import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Star import androidx.compose.runtime.Composable -import androidx.compose.runtime.CompositionLocalProvider -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableIntStateOf -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip -import androidx.compose.ui.draw.drawWithCache -import androidx.compose.ui.focus.FocusRequester -import androidx.compose.ui.focus.focusProperties -import androidx.compose.ui.focus.focusRequester -import androidx.compose.ui.focus.onFocusChanged -import androidx.compose.ui.geometry.Offset -import androidx.compose.ui.graphics.BlendMode import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.tv.material3.Icon -import androidx.tv.material3.LocalContentColor import androidx.tv.material3.LocalTextStyle -import androidx.tv.material3.MaterialTheme import androidx.tv.material3.Text -import com.github.damontecres.wholphin.R -import com.github.damontecres.wholphin.ui.AppColors -import com.github.damontecres.wholphin.ui.PreviewTvSpec import com.github.damontecres.wholphin.ui.isNotNullOrBlank -import com.github.damontecres.wholphin.ui.playOnClickSound -import com.github.damontecres.wholphin.ui.playSoundOnFocus -import com.github.damontecres.wholphin.ui.theme.WholphinTheme -import com.github.damontecres.wholphin.ui.tryRequestFocus -import java.util.Locale - -enum class StarRatingPrecision { - FULL, - HALF, - QUARTER, - ; - - companion object { - fun fromFloat(value: Float): StarRatingPrecision = - if (value <= .25f) { - QUARTER - } else if (value <= .5f) { - HALF - } else { - FULL - } - } -} val FilledStarColor = Color(0xFFFFC700) val EmptyStarColor = Color(0xFF5D4A0A) -val ratingBarHeight: Dp = 32.dp - -@Composable -fun SimpleStarRating( - communityRating: Float?, - modifier: Modifier = Modifier, -) = CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.onSurface) { - SimpleStarRating( - text = communityRating?.let { String.format(Locale.getDefault(), "%.1f", it) }, - modifier = modifier, - ) -} - +/** + * A minimum rating such as "7+" with a star, for the rating filter menus. + * + * This is not for showing a title's rating, see [SourceRatingsRow] for that. + */ @Composable fun SimpleStarRating( text: String?, @@ -115,206 +51,3 @@ fun SimpleStarRating( } } } - -@Composable -fun TomatoRating( - rating: Float?, - modifier: Modifier = Modifier, - threshold: Float = 60f, -) { - Row( - horizontalArrangement = Arrangement.spacedBy(2.dp), - verticalAlignment = Alignment.CenterVertically, - modifier = modifier, - ) { - if (rating != null) { - CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.onSurface) { - Text( - text = rating.toInt().toString() + "%", - maxLines = 1, - modifier = Modifier, - ) - } - val height = with(LocalDensity.current) { LocalTextStyle.current.fontSize.toDp() * .8f } - Icon( - painter = - painterResource( - if (rating >= threshold) { - R.drawable.ic_rotten_tomatoes_fresh - } else { - R.drawable.ic_rotten_tomatoes_rotten - }, - ), - contentDescription = null, - modifier = Modifier.height(height), - tint = Color.Unspecified, - ) - } - } -} - -/** - * Shows a rating out of 5 stars - */ -@Composable -fun StarRating( - rating100: Int, - onRatingChange: (Int) -> Unit, - precision: StarRatingPrecision, - enabled: Boolean, - playSoundOnFocus: Boolean, - modifier: Modifier = Modifier, - bgColor: Color = AppColors.TransparentBlack75, // MaterialTheme.colorScheme.background, -) { - val context = LocalContext.current - var tempRating by remember(rating100) { mutableIntStateOf(rating100) } - val percentage = (if (enabled) tempRating else rating100) / 100f - val focusRequesters = remember { List(5) { FocusRequester() } } - Box( - modifier = - modifier - .clip(RoundedCornerShape(16.dp)) - .background(bgColor), - ) { - LazyRow( - modifier = - Modifier - .selectableGroup() - .padding(4.dp) - .drawWithCache { - onDrawWithContent { - drawContent() - if (percentage in 0f..<1f) { - drawRect( - color = bgColor, - topLeft = Offset(size.width * percentage, 0f), - blendMode = BlendMode.SrcAtop, - ) - } - } - }.focusGroup() - .focusProperties { - onEnter = { - val index = - if (rating100 <= 20) { - 0 - } else if (rating100 <= 40) { - 1 - } else if (rating100 <= 60) { - 2 - } else if (rating100 <= 80) { - 3 - } else { - 4 - } - focusRequesters[index].tryRequestFocus() - } - }, - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceEvenly, - ) { - for (i in 1..5) { - item { - val isRated = (if (enabled) tempRating else rating100) >= (i * 20) - val icon = Icons.Filled.Star - var focused by remember { mutableStateOf(false) } - - val focusedColor = - if (focused) { - MaterialTheme.colorScheme.border - } else { - Color.Unspecified - } - Box( - modifier = - Modifier - .clip(RoundedCornerShape(16.dp)) - .background(focusedColor), - ) { - Icon( - imageVector = icon, - tint = FilledStarColor, - contentDescription = null, - modifier = - if (enabled) { - Modifier - .onFocusChanged { - focused = it.isFocused - if (it.isFocused) { - tempRating = i * 20 - } else { - tempRating = rating100 - } - }.playSoundOnFocus(playSoundOnFocus) - .focusRequester(focusRequesters[i - 1]) - .focusProperties { - left = - if (i == 1) focusRequesters.last() else FocusRequester.Default - right = - if (i == 5) focusRequesters.first() else FocusRequester.Default - }.selectable( - selected = isRated, - onClick = { - if (playSoundOnFocus) playOnClickSound(context) - val newRating100 = - when (precision) { - StarRatingPrecision.FULL -> { - if (i == 1 && rating100 > 0 && rating100 <= 20) 0 else i * 20 - } - - StarRatingPrecision.HALF -> { - if (rating100 > i * 20) { - i * 20 - } else if (rating100 == i * 20) { - i * 20 - 10 - } else if (rating100 == i * 20 - 10) { - (i - 1) * 20 - } else if (i == 1 && rating100 == 0) { - 20 - } else if (i == 1 && rating100 > 10) { - 10 - } else if (i == 1 && rating100 <= 10) { - 0 - } else { - (i) * 20 - } - } - - StarRatingPrecision.QUARTER -> { - // TODO - null - } - } - if (newRating100 != null) { - tempRating = newRating100 - onRatingChange(newRating100) - } - }, - ) - } else { - Modifier - }.fillMaxHeight() - .aspectRatio(1f), - ) - } - } - } - } - } -} - -@PreviewTvSpec -@Composable -private fun SimpleStarRatingPreview() { - WholphinTheme { - Column { - SimpleStarRating(7.5f, Modifier.height(32.dp)) - TomatoRating(75f) - SimpleStarRating(7.5f, Modifier.height(20.dp)) - SimpleStarRating("", Modifier.height(32.dp)) - TomatoRating(75f) - TomatoRating(40f) - TomatoRating(3f) - } - } -} diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/components/SourceRatingsRow.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/components/SourceRatingsRow.kt new file mode 100644 index 00000000..e2552ace --- /dev/null +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/components/SourceRatingsRow.kt @@ -0,0 +1,147 @@ +package com.github.damontecres.wholphin.ui.components + +import androidx.annotation.DrawableRes +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.text.InlineTextContent +import androidx.compose.foundation.text.appendInlineContent +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.ColorFilter +import androidx.compose.ui.graphics.ColorMatrix +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.Placeholder +import androidx.compose.ui.text.PlaceholderVerticalAlign +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.buildAnnotatedString +import androidx.tv.material3.MaterialTheme +import androidx.tv.material3.Text +import com.github.damontecres.wholphin.R +import com.github.damontecres.wholphin.data.model.BaseItem +import com.github.damontecres.wholphin.data.model.RatingBadge +import com.github.damontecres.wholphin.data.model.RatingEntry +import com.github.damontecres.wholphin.data.model.SourceRatings +import com.github.damontecres.wholphin.preferences.DisplayToggle +import com.github.damontecres.wholphin.services.SeerrRatingsService +import com.github.damontecres.wholphin.ui.dot +import com.github.damontecres.wholphin.ui.util.LocalInterfaceCustomization + +/** + * Provides the [SeerrRatingsService] to [rememberSourceRatings] + */ +val LocalSeerrRatingsService = + staticCompositionLocalOf { throw IllegalStateException("LocalSeerrRatingsService not set") } + +/** + * The ratings for an item from the same sources as the PWA. This is the only data path for ratings in the UI, every + * screen that shows ratings calls this and draws the result with [SourceRatingsRow] (usually via [QuickDetails]). + * + * Which items have ratings is decided by [SeerrRatingsService]. Returns null while loading, or if there are none, and + * never the previous item's ratings. + */ +@Composable +fun rememberSourceRatings(item: BaseItem?): SourceRatings? { + val service = LocalSeerrRatingsService.current + val key = item?.id + var ratings by remember(key) { mutableStateOf(item?.let { service.cachedFor(it) }) } + LaunchedEffect(key) { + // Leaving the composition or changing the item cancels this collection, and so a Seerr request that is still waiting or running + service.forItem(item).collect { ratings = it } + } + return ratings +} + +@DrawableRes +fun RatingBadge.drawable(): Int = + when (this) { + RatingBadge.RT_FRESH -> R.drawable.ic_rotten_tomatoes_fresh + RatingBadge.RT_ROTTEN -> R.drawable.ic_rotten_tomatoes_rotten + RatingBadge.RT_UPRIGHT -> R.drawable.ic_rt_upright + RatingBadge.RT_SPILLED -> R.drawable.ic_rt_spilled + RatingBadge.RT_UNKNOWN -> R.drawable.ic_rotten_tomatoes_fresh + RatingBadge.IMDB -> R.drawable.ic_rating_imdb + RatingBadge.TMDB -> R.drawable.ic_rating_tmdb + } + +/** + * The badges for the ratings as inline text content. IMDb and TMDB are wordmarks, wider than tall like in the PWA. + */ +@Composable +private fun rememberBadges(textStyle: TextStyle): Map = + remember(textStyle) { + val square = Placeholder(textStyle.fontSize, textStyle.fontSize, PlaceholderVerticalAlign.TextCenter) + val wide = Placeholder(textStyle.fontSize * 1.8f, textStyle.fontSize, PlaceholderVerticalAlign.TextCenter) + RatingBadge.entries.associate { badge -> + val muted = badge == RatingBadge.RT_UNKNOWN + val placeholder = if (badge == RatingBadge.IMDB || badge == RatingBadge.TMDB) wide else square + badge.name to + InlineTextContent(placeholder) { + Image( + painter = painterResource(badge.drawable()), + contentDescription = null, + contentScale = ContentScale.Fit, + alpha = if (muted) 0.55f else 1f, + colorFilter = if (muted) ColorFilter.colorMatrix(ColorMatrix().apply { setToSaturation(0f) }) else null, + modifier = Modifier.fillMaxSize(), + ) + } + } + } + +/** + * The text for the ratings: each as a badge and its number, separated by dots + * + * @param leadingDot whether a dot is put in front of the first rating because something precedes it + */ +fun ratingsText( + entries: List, + leadingDot: Boolean, +): AnnotatedString = + buildAnnotatedString { + entries.forEachIndexed { index, entry -> + if (index > 0 || leadingDot) dot() + appendInlineContent(entry.badge.name) + append(" ") + append(entry.text) + } + } + +/** + * The one way ratings are drawn: badge and number pairs from [SourceRatings] in the PWA's order, Rotten Tomatoes then IMDb or TMDB. + * + * Respects the community rating (IMDb/TMDB) and critic rating (Rotten Tomatoes) display settings. Draws nothing if + * there is nothing to show. + */ +@Composable +fun SourceRatingsRow( + ratings: SourceRatings?, + modifier: Modifier = Modifier, + textStyle: TextStyle = MaterialTheme.typography.titleSmall, + leadingDot: Boolean = true, +) { + if (ratings == null) return + val enabled = LocalInterfaceCustomization.current.enabledDisplayToggles + val community = DisplayToggle.COMMUNITY_RATING in enabled + val critic = DisplayToggle.CRITIC_RATING in enabled + val text = + remember(ratings, community, critic, leadingDot) { + ratings.visibleEntries(community, critic).takeIf { it.isNotEmpty() }?.let { ratingsText(it, leadingDot) } + } ?: return + val badges = rememberBadges(textStyle) + Text( + text = text, + color = MaterialTheme.colorScheme.onSurface, + style = textStyle, + inlineContent = badges, + maxLines = 1, + modifier = modifier, + ) +} diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverMovieDetailsHeader.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverMovieDetailsHeader.kt index 51a537e3..34bf4657 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverMovieDetailsHeader.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverMovieDetailsHeader.kt @@ -20,6 +20,7 @@ import androidx.tv.material3.MaterialTheme import androidx.tv.material3.Text import com.github.damontecres.wholphin.R import com.github.damontecres.wholphin.api.seerr.model.MovieDetails +import com.github.damontecres.wholphin.data.model.QuickDetailsData import com.github.damontecres.wholphin.data.model.SourceRatings import com.github.damontecres.wholphin.preferences.UserPreferences import com.github.damontecres.wholphin.services.jellyfinId @@ -27,7 +28,7 @@ import com.github.damontecres.wholphin.ui.LocalImageUrlService import com.github.damontecres.wholphin.ui.components.GenreText import com.github.damontecres.wholphin.ui.components.HeaderUtils import com.github.damontecres.wholphin.ui.components.OverviewText -import com.github.damontecres.wholphin.ui.components.QuickDetailsText +import com.github.damontecres.wholphin.ui.components.QuickDetails import com.github.damontecres.wholphin.ui.components.TitleOrLogo import com.github.damontecres.wholphin.ui.formatDuration import com.github.damontecres.wholphin.ui.isNotNullOrBlank @@ -79,7 +80,7 @@ fun DiscoverMovieDetailsHeader( ) { val resources = LocalResources.current val details = - remember(movie, rating, resources) { + remember(movie, resources) { buildList { movie.releaseDate?.let(::add) movie.runtime @@ -105,14 +106,11 @@ fun DiscoverMovieDetailsHeader( ?.takeIf { it.isNotNullOrBlank() } ?.let(::add) }.let { - listToDotString( - it, - rating, - ) + QuickDetailsData(listToDotString(it)) } } - QuickDetailsText(details, Modifier.padding(start = HeaderUtils.startPadding)) + QuickDetails(details, null, Modifier.padding(start = HeaderUtils.startPadding), ratings = rating) movie.genres?.mapNotNull { it.name }?.letNotEmpty { GenreText(it, Modifier.padding(start = HeaderUtils.startPadding)) } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverSeriesDetails.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverSeriesDetails.kt index 88fa0b50..ef96bb7e 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverSeriesDetails.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverSeriesDetails.kt @@ -34,6 +34,7 @@ import com.github.damontecres.wholphin.R import com.github.damontecres.wholphin.api.seerr.model.TvDetails import com.github.damontecres.wholphin.data.model.BaseItem import com.github.damontecres.wholphin.data.model.DiscoverItem +import com.github.damontecres.wholphin.data.model.QuickDetailsData import com.github.damontecres.wholphin.data.model.SourceRatings import com.github.damontecres.wholphin.data.model.SeerrAvailability import com.github.damontecres.wholphin.data.model.SeerrPermission @@ -55,7 +56,7 @@ import com.github.damontecres.wholphin.ui.components.GenreText import com.github.damontecres.wholphin.ui.components.HeaderUtils import com.github.damontecres.wholphin.ui.components.LoadingPage import com.github.damontecres.wholphin.ui.components.OverviewText -import com.github.damontecres.wholphin.ui.components.QuickDetailsText +import com.github.damontecres.wholphin.ui.components.QuickDetails import com.github.damontecres.wholphin.ui.components.TitleOrLogo import com.github.damontecres.wholphin.ui.data.ItemDetailsDialog import com.github.damontecres.wholphin.ui.data.ItemDetailsDialogInfo @@ -453,7 +454,7 @@ fun DiscoverSeriesDetailsHeader( ) { val resources = LocalResources.current val details = - remember(series, rating, resources) { + remember(series, resources) { buildList { series.firstAirDate?.let(::add) series.episodeRunTime @@ -464,14 +465,11 @@ fun DiscoverSeriesDetailsHeader( ?.let { add(resources.formatDuration(it)) } // TODO }.let { - listToDotString( - it, - rating, - ) + QuickDetailsData(listToDotString(it)) } } - QuickDetailsText(details, Modifier.padding(start = HeaderUtils.startPadding)) + QuickDetails(details, null, Modifier.padding(start = HeaderUtils.startPadding), ratings = rating) series.genres?.mapNotNull { it.name }?.letNotEmpty { GenreText(it, Modifier.padding(start = HeaderUtils.startPadding, bottom = 4.dp)) } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/episode/EpisodeDetailsHeader.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/episode/EpisodeDetailsHeader.kt index e8872180..3c341ff2 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/episode/EpisodeDetailsHeader.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/episode/EpisodeDetailsHeader.kt @@ -55,7 +55,7 @@ fun EpisodeDetailsHeader( modifier = Modifier.fillMaxWidth(.60f), ) { val padding = 8.dp - QuickDetails(ep.ui.quickDetails, ep.timeRemainingOrRuntime) + QuickDetails(ep, ep.timeRemainingOrRuntime) VideoStreamDetails( chosenStreams = chosenStreams, diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetails.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetails.kt index bf8d698f..ef0d186e 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetails.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetails.kt @@ -339,7 +339,6 @@ fun MovieDetailsContent( chosenStreams = state.chosenStreams, bringIntoViewRequester = bringIntoViewRequester, overviewOnClick = overviewOnClick, - sourceRatings = state.sourceRatings, modifier = Modifier .fillMaxWidth() diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetailsHeader.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetailsHeader.kt index 13ee747c..6dbbf965 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetailsHeader.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetailsHeader.kt @@ -20,8 +20,6 @@ import androidx.tv.material3.Text import com.github.damontecres.wholphin.R import com.github.damontecres.wholphin.data.ChosenStreams import com.github.damontecres.wholphin.data.model.BaseItem -import com.github.damontecres.wholphin.data.model.SourceRatings -import com.github.damontecres.wholphin.data.model.withSourceRatings import com.github.damontecres.wholphin.preferences.UserPreferences import com.github.damontecres.wholphin.ui.components.GenreText import com.github.damontecres.wholphin.ui.components.HeaderUtils @@ -43,10 +41,8 @@ fun MovieDetailsHeader( bringIntoViewRequester: BringIntoViewRequester, overviewOnClick: () -> Unit, modifier: Modifier = Modifier, - sourceRatings: SourceRatings? = null, ) { val dto = movie.data - val quickDetails = remember(movie, sourceRatings) { movie.ui.quickDetails.withSourceRatings(sourceRatings) } val context = LocalContext.current val scope = rememberCoroutineScope() Column( @@ -68,7 +64,7 @@ fun MovieDetailsHeader( modifier = Modifier.fillMaxWidth(.60f), ) { QuickDetails( - quickDetails, + movie, movie.timeRemainingOrRuntime, Modifier.padding(start = HeaderUtils.startPadding), ) diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieViewModel.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieViewModel.kt index fc9e7ad6..db6a6f6a 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieViewModel.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieViewModel.kt @@ -12,7 +12,6 @@ import com.github.damontecres.wholphin.data.model.Chapter import com.github.damontecres.wholphin.data.model.DiscoverItem import com.github.damontecres.wholphin.data.model.ItemPlayback import com.github.damontecres.wholphin.data.model.Person -import com.github.damontecres.wholphin.data.model.SourceRatings import com.github.damontecres.wholphin.data.model.Trailer import com.github.damontecres.wholphin.services.BackdropService import com.github.damontecres.wholphin.services.ExtrasService @@ -20,7 +19,6 @@ import com.github.damontecres.wholphin.services.FavoriteWatchManager import com.github.damontecres.wholphin.services.MediaManagementService import com.github.damontecres.wholphin.services.NavigationManager import com.github.damontecres.wholphin.services.PeopleFavorites -import com.github.damontecres.wholphin.services.SeerrRatingsService import com.github.damontecres.wholphin.services.SeerrService import com.github.damontecres.wholphin.services.ServerReportService import com.github.damontecres.wholphin.services.StreamChoiceService @@ -59,7 +57,6 @@ class MovieViewModel constructor( private val api: ApiClient, private val seerrService: SeerrService, - private val ratingsService: SeerrRatingsService, @param:ApplicationContext private val context: Context, private val navigationManager: NavigationManager, val serverRepository: ServerRepository, @@ -103,8 +100,6 @@ class MovieViewModel return item } - private var ratingsJob: Job? = null - fun init(): Job = viewModelScope.launchDefault { val movie = @@ -129,7 +124,6 @@ class MovieViewModel chosenStreams = chosenStreams, trailers = remoteTrailers, chapters = chapters, - sourceRatings = it.sourceRatings ?: ratingsService.cachedFor(movie), ) } backdropService.submit(movie) @@ -158,14 +152,6 @@ class MovieViewModel ) } } - // init() runs again on resume and the flow never completes, so don't stack collectors - ratingsJob?.cancel() - ratingsJob = - viewModelScope.launchIO { - ratingsService.forItem(movie).collect { ratings -> - _state.update { it.copy(sourceRatings = ratings ?: it.sourceRatings) } - } - } viewModelScope.launchIO { val results = seerrService.similar(movie).orEmpty() _state.update { @@ -320,7 +306,6 @@ data class MovieState( val similar: List = emptyList(), val discovered: List = emptyList(), /** Seerr ratings, null until they load or if unavailable */ - val sourceRatings: SourceRatings? = null, val chosenStreams: ChosenStreams? = null, val canDelete: Boolean = false, ) { diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/FocusedEpisodeHeader.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/FocusedEpisodeHeader.kt index b63f1cbc..be7795f4 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/FocusedEpisodeHeader.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/FocusedEpisodeHeader.kt @@ -35,10 +35,10 @@ fun FocusedEpisodeHeader( ) { EpisodeName(dto, modifier = Modifier.padding(start = HeaderUtils.startPadding)) - ep?.ui?.quickDetails?.let { + ep?.let { QuickDetails( it, - ep.timeRemainingOrRuntime, + it.timeRemainingOrRuntime, Modifier.padding(start = HeaderUtils.startPadding), ) } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesDetails.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesDetails.kt index 60419e83..0308468e 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesDetails.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesDetails.kt @@ -44,10 +44,8 @@ import com.github.damontecres.wholphin.data.ExtrasItem import com.github.damontecres.wholphin.data.model.BaseItem import com.github.damontecres.wholphin.data.model.DiscoverItem import com.github.damontecres.wholphin.data.model.Person -import com.github.damontecres.wholphin.data.model.SourceRatings import com.github.damontecres.wholphin.data.model.Trailer import com.github.damontecres.wholphin.data.model.studioNames -import com.github.damontecres.wholphin.data.model.withSourceRatings import com.github.damontecres.wholphin.preferences.UserPreferences import com.github.damontecres.wholphin.services.TrailerService import com.github.damontecres.wholphin.ui.Cards @@ -255,7 +253,6 @@ fun SeriesDetails( } }, discovered = state.discovered, - sourceRatings = state.sourceRatings, onClickDiscover = { index, item -> viewModel.navigateTo(item.destination) }, @@ -333,7 +330,6 @@ fun SeriesDetailsContent( extras: List, people: List, discovered: List, - sourceRatings: SourceRatings?, played: Boolean, favorite: Boolean, canDelete: Boolean, @@ -381,7 +377,6 @@ fun SeriesDetailsContent( showLogo = preferences.appPreferences.interfacePreferences.showLogos, overviewOnClick = overviewOnClick, bringIntoViewRequester = bringIntoViewRequester, - sourceRatings = sourceRatings, modifier = Modifier .fillMaxWidth() @@ -659,11 +654,9 @@ fun SeriesDetailsHeader( overviewOnClick: () -> Unit, bringIntoViewRequester: BringIntoViewRequester, modifier: Modifier = Modifier, - sourceRatings: SourceRatings? = null, ) { val scope = rememberCoroutineScope() val dto = series.data - val quickDetails = remember(series, sourceRatings) { series.ui.quickDetails.withSourceRatings(sourceRatings) } Column( verticalArrangement = Arrangement.spacedBy(4.dp), modifier = modifier, @@ -681,7 +674,7 @@ fun SeriesDetailsHeader( modifier = Modifier.fillMaxWidth(.60f), ) { QuickDetails( - quickDetails, + series, null, Modifier.padding(start = HeaderUtils.startPadding), ) diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesViewModel.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesViewModel.kt index caaa1fb5..32f1d484 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesViewModel.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesViewModel.kt @@ -12,7 +12,6 @@ import com.github.damontecres.wholphin.data.model.BaseItem import com.github.damontecres.wholphin.data.model.DiscoverItem import com.github.damontecres.wholphin.data.model.ItemPlayback import com.github.damontecres.wholphin.data.model.Person -import com.github.damontecres.wholphin.data.model.SourceRatings import com.github.damontecres.wholphin.data.model.Trailer import com.github.damontecres.wholphin.preferences.AppPreferences import com.github.damontecres.wholphin.services.BackdropService @@ -21,7 +20,6 @@ import com.github.damontecres.wholphin.services.FavoriteWatchManager import com.github.damontecres.wholphin.services.MediaManagementService import com.github.damontecres.wholphin.services.NavigationManager import com.github.damontecres.wholphin.services.PeopleFavorites -import com.github.damontecres.wholphin.services.SeerrRatingsService import com.github.damontecres.wholphin.services.SeerrService import com.github.damontecres.wholphin.services.ServerReportService import com.github.damontecres.wholphin.services.StreamChoiceService @@ -102,7 +100,6 @@ class SeriesViewModel private val userPreferencesService: UserPreferencesService, private val backdropService: BackdropService, private val seerrService: SeerrService, - private val ratingsService: SeerrRatingsService, private val mediaManagementService: MediaManagementService, @Assisted val seriesId: UUID, @Assisted val seasonEpisodeIds: SeasonEpisodeIds?, @@ -221,7 +218,6 @@ class SeriesViewModel seasons = seasons, episodes = episodes, trailers = remoteTrailers, - sourceRatings = ratingsService.cachedFor(series), ) } @@ -255,11 +251,6 @@ class SeriesViewModel _state.update { it.copy(similar = similar) } } } - viewModelScope.launchIO { - ratingsService.forItem(series).collect { ratings -> - _state.update { it.copy(sourceRatings = ratings ?: it.sourceRatings) } - } - } viewModelScope.launchIO { val results = seerrService.similar(series).orEmpty() _state.update { it.copy(discovered = results) } @@ -905,6 +896,5 @@ data class SeriesState( val discovered: List = emptyList(), val discoverSeries: DiscoverItem? = null, /** Seerr ratings, null until they load or if unavailable */ - val sourceRatings: SourceRatings? = null, val chosenStreams: ChosenStreams? = null, ) diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/discover/SeerrDiscoverPage.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/discover/SeerrDiscoverPage.kt index 4bdc42ba..62075882 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/discover/SeerrDiscoverPage.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/discover/SeerrDiscoverPage.kt @@ -389,7 +389,7 @@ fun SeerrDiscoverPage( modifier = modifier, ) { val details = - remember(focusedItem, ratingMap) { + remember(focusedItem) { (focusedItem as? DiscoverFocusedItem.Item)?.let { focusedItem -> buildList { focusedItem.item @@ -398,17 +398,18 @@ fun SeerrDiscoverPage( ?.toString() ?.let(::add) }.let { - val rating = ratingMap[focusedItem.item.type to focusedItem.id] - QuickDetailsData(listToDotString(it, rating)) + QuickDetailsData(listToDotString(it)) } } } + val focusedRatings = (focusedItem as? DiscoverFocusedItem.Item)?.let { ratingMap[it.item.type to it.id] } HomePageHeader( title = focusedItem?.title?.getString(), subtitle = focusedItem?.subtitle, overview = focusedItem?.overview, overviewTwoLines = false, quickDetails = details, + ratings = focusedRatings, timeRemaining = null, endsAt = null, showLogo = preferences.appPreferences.interfacePreferences.showLogos, diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/main/HomePage.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/main/HomePage.kt index bf24ae00..26cc96d5 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/main/HomePage.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/main/HomePage.kt @@ -52,6 +52,7 @@ import com.github.damontecres.wholphin.data.model.BaseItem import com.github.damontecres.wholphin.data.model.HomeRowConfig import com.github.damontecres.wholphin.data.model.HomeRowViewOptions import com.github.damontecres.wholphin.data.model.QuickDetailsData +import com.github.damontecres.wholphin.data.model.SourceRatings import com.github.damontecres.wholphin.preferences.UserPreferences import com.github.damontecres.wholphin.ui.Cards import com.github.damontecres.wholphin.ui.cards.BannerCard @@ -72,6 +73,7 @@ import com.github.damontecres.wholphin.ui.components.LoadingPage import com.github.damontecres.wholphin.ui.components.QuickDetails import com.github.damontecres.wholphin.ui.components.TitleOrLogo import com.github.damontecres.wholphin.ui.components.rememberLogoUrl +import com.github.damontecres.wholphin.ui.components.rememberSourceRatings import com.github.damontecres.wholphin.ui.data.AddPlaylistViewModel import com.github.damontecres.wholphin.ui.data.ItemDetailsDialog import com.github.damontecres.wholphin.ui.data.ItemDetailsDialogInfo @@ -571,6 +573,7 @@ fun HomePageHeader( overview = item?.data?.overview, overviewTwoLines = isEpisode, quickDetails = item?.ui?.quickDetails, + ratings = rememberSourceRatings(item), timeRemaining = item?.timeRemainingOrRuntime, endsAt = item?.data?.endDate, showLogo = showLogo, @@ -586,6 +589,7 @@ fun HomePageHeader( overview: String?, overviewTwoLines: Boolean, quickDetails: QuickDetailsData?, + ratings: SourceRatings?, timeRemaining: Duration?, endsAt: DateTime?, showLogo: Boolean, @@ -611,7 +615,7 @@ fun HomePageHeader( if (subtitle != null) { EpisodeName(subtitle) } - QuickDetails(quickDetails, timeRemaining, endsAt = endsAt) + QuickDetails(quickDetails, timeRemaining, endsAt = endsAt, ratings = ratings) val overviewModifier = Modifier .padding(0.dp) diff --git a/app/src/test/java/com/github/damontecres/wholphin/data/model/SourceRatingsTest.kt b/app/src/test/java/com/github/damontecres/wholphin/data/model/SourceRatingsTest.kt index 41fee583..e2471275 100644 --- a/app/src/test/java/com/github/damontecres/wholphin/data/model/SourceRatingsTest.kt +++ b/app/src/test/java/com/github/damontecres/wholphin/data/model/SourceRatingsTest.kt @@ -1,10 +1,8 @@ package com.github.damontecres.wholphin.data.model -import androidx.compose.ui.text.AnnotatedString import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertNull -import org.junit.Assert.assertSame import org.junit.Assert.assertTrue import org.junit.Test @@ -104,44 +102,59 @@ class SourceRatingsTest { imdbVotes = 1, ) assertEquals(listOf("85%", "40%"), ratings.criticEntries.map { it.text }) - assertEquals(listOf(INLINE_RT_FRESH, INLINE_RT_SPILLED), ratings.criticEntries.map { it.inlineContentId }) + assertEquals(listOf(RatingBadge.RT_FRESH, RatingBadge.RT_SPILLED), ratings.criticEntries.map { it.badge }) assertEquals(listOf("8.0"), ratings.communityEntries.map { it.text }) - assertEquals(listOf(INLINE_IMDB), ratings.communityEntries.map { it.inlineContentId }) + assertEquals(listOf(RatingBadge.IMDB), ratings.communityEntries.map { it.badge }) } - private val jellyfinDetails = - QuickDetailsData( - basic = AnnotatedString("2020"), - communityRating = AnnotatedString("7.8 jellyfin"), - criticRating = AnnotatedString("59% jellyfin"), + @Test + fun everyRtMarkHasItsOwnBadge() { + val badges = + listOf( + RtMark.FRESH to RatingBadge.RT_FRESH, + RtMark.ROTTEN to RatingBadge.RT_ROTTEN, + RtMark.UPRIGHT to RatingBadge.RT_UPRIGHT, + RtMark.SPILLED to RatingBadge.RT_SPILLED, + RtMark.UNKNOWN to RatingBadge.RT_UNKNOWN, + ) + badges.forEach { (mark, badge) -> + assertEquals(badge, RatingEntry.RottenTomatoes(RtScore(50, mark), true).badge) + } + } + + private val movie = + SourceRatings.of( + rtCriticsScore = 96, + rtCriticsLabel = "Certified Fresh", + rtAudienceScore = 59, + rtAudienceLabel = "Spilled", + imdbScore = 8.8, + imdbVotes = 10, ) @Test - fun jellyfinRatingsAreKeptWhenThereAreNoSourceRatings() { - assertSame(jellyfinDetails, jellyfinDetails.withSourceRatings(null)) - assertSame(jellyfinDetails, jellyfinDetails.withSourceRatings(SourceRatings())) + fun visibleEntriesAreInPwaOrderAndFollowTheDisplaySettings() { + // Rotten Tomatoes (critic rating setting) before IMDb (community rating setting) + assertEquals( + listOf("96%", "59%", "8.8"), + movie.visibleEntries(community = true, critic = true).map { it.text }, + ) + assertEquals(listOf("8.8"), movie.visibleEntries(community = true, critic = false).map { it.text }) + assertEquals(listOf("96%", "59%"), movie.visibleEntries(community = false, critic = true).map { it.text }) + assertTrue(movie.visibleEntries(community = false, critic = false).isEmpty()) } @Test - fun sourceRatingsReplaceJellyfinRatingsAndMapOntoTheExistingToggles() { - val details = - jellyfinDetails.withSourceRatings( - SourceRatings.of(rtCriticsScore = 96, rtCriticsLabel = "Certified Fresh", imdbScore = 8.8, imdbVotes = 10), - ) - // COMMUNITY_RATING toggle -> IMDb, CRITIC_RATING toggle -> Rotten Tomatoes - assertTrue(details.communityRating!!.text.endsWith("8.8")) - assertTrue(details.criticRating!!.text.endsWith("96%")) - assertEquals(jellyfinDetails.basic, details.basic) - // PWA order: Rotten Tomatoes before IMDb - assertTrue(details.criticRatingFirst) - assertFalse(jellyfinDetails.criticRatingFirst) + fun tmdbIsTheCommunityEntryWhenItIsTheOnlySource() { + val entries = SourceRatings.of(tmdbScore = 7.6, tmdbVotes = 100).visibleEntries(community = true, critic = true) + assertEquals(listOf(RatingBadge.TMDB), entries.map { it.badge }) + assertEquals(listOf("7.6"), entries.map { it.text }) } @Test - fun jellyfinValueForASourceThatSeerrDoesNotHaveIsNotMixedIn() { - // Seerr has only RT: the Jellyfin star is not shown next to it - val details = jellyfinDetails.withSourceRatings(SourceRatings.of(rtCriticsScore = 50, rtCriticsLabel = "Fresh")) - assertNull(details.communityRating) - assertTrue(details.criticRating!!.text.endsWith("50%")) + fun noEntriesWithoutRatings() { + assertTrue(SourceRatings().isEmpty) + assertTrue(SourceRatings().visibleEntries(community = true, critic = true).isEmpty()) + assertFalse(movie.isEmpty) } } diff --git a/app/src/test/java/com/github/damontecres/wholphin/services/SeerrRatingsItemsTest.kt b/app/src/test/java/com/github/damontecres/wholphin/services/SeerrRatingsItemsTest.kt new file mode 100644 index 00000000..72baa65c --- /dev/null +++ b/app/src/test/java/com/github/damontecres/wholphin/services/SeerrRatingsItemsTest.kt @@ -0,0 +1,268 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + +package com.github.damontecres.wholphin.services + +import com.github.damontecres.wholphin.api.seerr.MoviesApi +import com.github.damontecres.wholphin.api.seerr.SeerrApiClient +import com.github.damontecres.wholphin.api.seerr.TvApi +import com.github.damontecres.wholphin.api.seerr.model.MovieMovieIdRatingscombinedGet200Response +import com.github.damontecres.wholphin.api.seerr.model.MovieMovieIdRatingsGet200Response +import com.github.damontecres.wholphin.api.seerr.model.TvTvIdRatingsGet200Response +import com.github.damontecres.wholphin.data.model.BaseItem +import com.github.damontecres.wholphin.data.model.SeerrItemType +import com.github.damontecres.wholphin.ui.successResponse +import io.mockk.coEvery +import io.mockk.coVerify +import io.mockk.every +import io.mockk.mockk +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.Job +import kotlinx.coroutines.awaitCancellation +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.launch +import kotlinx.coroutines.test.advanceTimeBy +import kotlinx.coroutines.test.runCurrent +import kotlinx.coroutines.test.runTest +import org.jellyfin.sdk.api.client.ApiClient +import org.jellyfin.sdk.api.client.extensions.userLibraryApi +import org.jellyfin.sdk.api.operations.UserLibraryApi +import org.jellyfin.sdk.model.api.BaseItemDto +import org.jellyfin.sdk.model.api.BaseItemKind +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNotNull +import org.junit.Assert.assertNull +import org.junit.Test +import java.io.IOException +import java.util.UUID + +/** + * Which Jellyfin items have ratings, how their TMDB id is found, and when Seerr is asked + */ +class SeerrRatingsItemsTest { + private val moviesApi = mockk() + private val tvApi = mockk() + private val seerrApi = + mockk { + every { moviesApi } returns this@SeerrRatingsItemsTest.moviesApi + every { tvApi } returns this@SeerrRatingsItemsTest.tvApi + } + private val active = MutableStateFlow(true) + private val seerrService = + mockk { + every { api } returns seerrApi + every { this@mockk.active } returns this@SeerrRatingsItemsTest.active + } + private val userLibraryApi = mockk() + private val jellyfin = + mockk { + every { userLibraryApi } returns this@SeerrRatingsItemsTest.userLibraryApi + } + private val service = SeerrRatingsService(seerrService, jellyfin) + + private val seriesId = UUID.randomUUID() + private val seriesTmdb = 1396 + + private val rtOnly = MovieMovieIdRatingscombinedGet200Response(rt = MovieMovieIdRatingsGet200Response(criticsScore = 90, criticsRating = "Fresh")) + private val tvRatings = TvTvIdRatingsGet200Response(criticsScore = 80, criticsRating = "Fresh") + + private fun item( + type: BaseItemKind, + providerIds: Map? = null, + seriesId: UUID? = null, + ) = BaseItem(BaseItemDto(id = UUID.randomUUID(), type = type, providerIds = providerIds, seriesId = seriesId)) + + private fun jellyfinHasSeries(tmdb: Int? = seriesTmdb) { + coEvery { userLibraryApi.getItem(seriesId) } returns + successResponse( + BaseItemDto( + id = seriesId, + type = BaseItemKind.SERIES, + providerIds = tmdb?.let { mapOf("Tmdb" to it.toString()) } ?: mapOf("Tvdb" to "1"), + ), + ) + } + + @Test + fun moviesAndSeriesUseTheirOwnProviderIdsWithoutAskingJellyfin() = + runTest { + assertEquals( + RatingsTarget(SeerrItemType.MOVIE, 11), + service.resolveTarget(item(BaseItemKind.MOVIE, mapOf("Tmdb" to "11"))), + ) + assertEquals( + RatingsTarget(SeerrItemType.TV, 22), + service.resolveTarget(item(BaseItemKind.SERIES, mapOf("Tmdb" to "22"))), + ) + coVerify(exactly = 0) { userLibraryApi.getItem(any()) } + } + + @Test + fun episodesAndSeasonsShowTheirSeriesRatingsNotTheirOwnTmdbId() = + runTest { + jellyfinHasSeries() + // The Tmdb id on an episode or season identifies the episode or season, never the series + val episode = item(BaseItemKind.EPISODE, mapOf("Tmdb" to "999999"), seriesId) + val season = item(BaseItemKind.SEASON, mapOf("Tmdb" to "888888"), seriesId) + + assertEquals(RatingsTarget(SeerrItemType.TV, seriesTmdb), service.resolveTarget(episode)) + assertEquals(RatingsTarget(SeerrItemType.TV, seriesTmdb), service.resolveTarget(season)) + } + + @Test + fun itemsThatArePartOfNoPwaTitleHaveNoRatingsAndNeverCallAnything() = + runTest { + val none = + listOf( + BaseItemKind.BOX_SET, + BaseItemKind.MUSIC_ALBUM, + BaseItemKind.MUSIC_ARTIST, + BaseItemKind.AUDIO, + BaseItemKind.PHOTO, + BaseItemKind.PHOTO_ALBUM, + BaseItemKind.PROGRAM, + BaseItemKind.PLAYLIST, + BaseItemKind.VIDEO, + ) + none.forEach { + val item = item(it, mapOf("Tmdb" to "5"), seriesId) + assertNull(it.name, service.resolveTarget(item)) + assertNull(it.name, service.forItem(item).first()) + assertNull(it.name, service.cachedFor(item)) + } + coVerify(exactly = 0) { userLibraryApi.getItem(any()) } + coVerify(exactly = 0) { moviesApi.movieMovieIdRatingscombinedGet(any()) } + coVerify(exactly = 0) { tvApi.tvTvIdRatingsGet(any()) } + } + + @Test + fun episodeWithoutASeriesHasNoRatings() = + runTest { + assertNull(service.resolveTarget(item(BaseItemKind.EPISODE, mapOf("Tmdb" to "3"), null))) + } + + @Test + fun homeItemsWithoutProviderIdsAreResolvedThroughJellyfinOnceAndCached() = + runTest { + jellyfinHasSeries() + val first = item(BaseItemKind.EPISODE, null, seriesId) + val second = item(BaseItemKind.EPISODE, null, seriesId) + + assertEquals(RatingsTarget(SeerrItemType.TV, seriesTmdb), service.resolveTarget(first)) + assertEquals(RatingsTarget(SeerrItemType.TV, seriesTmdb), service.resolveTarget(second)) + + // every other episode of the series is known without a request + coVerify(exactly = 1) { userLibraryApi.getItem(seriesId) } + } + + @Test + fun homeMovieWithoutProviderIdsLooksItUp() = + runTest { + val movie = item(BaseItemKind.MOVIE, null) + coEvery { userLibraryApi.getItem(movie.id) } returns + successResponse(BaseItemDto(id = movie.id, type = BaseItemKind.MOVIE, providerIds = mapOf("Tmdb" to "77"))) + + assertEquals(RatingsTarget(SeerrItemType.MOVIE, 77), service.resolveTarget(movie)) + } + + @Test + fun seriesWithoutTmdbIdHasNoRatingsAndIsNotLookedUpAgain() = + runTest { + jellyfinHasSeries(tmdb = null) + val episode = item(BaseItemKind.EPISODE, null, seriesId) + + assertNull(service.resolveTarget(episode)) + assertNull(service.forItem(episode).first()) + coVerify(exactly = 1) { userLibraryApi.getItem(seriesId) } + } + + @Test + fun failedLookupIsRetriedLater() = + runTest { + coEvery { userLibraryApi.getItem(seriesId) } throws IOException("down") + val episode = item(BaseItemKind.EPISODE, null, seriesId) + assertNull(service.resolveTarget(episode)) + + jellyfinHasSeries() + assertEquals(RatingsTarget(SeerrItemType.TV, seriesTmdb), service.resolveTarget(episode)) + } + + @Test + fun episodeRatingsAreTheSeriesRatingsAndSeedLaterEpisodes() = + runTest { + jellyfinHasSeries() + coEvery { tvApi.tvTvIdRatingsGet(tvId = seriesTmdb) } returns tvRatings + val episode = item(BaseItemKind.EPISODE, null, seriesId) + val other = item(BaseItemKind.EPISODE, null, seriesId) + assertNull(service.cachedFor(episode)) + + val ratings = service.forItem(episode).first() + + assertEquals(80, ratings?.rtCritics?.percent) + // moving to another episode of the same series needs no wait and no request + assertEquals(ratings, service.cachedFor(other)) + assertEquals(ratings, service.forItem(other).first()) + coVerify(exactly = 1) { tvApi.tvTvIdRatingsGet(tvId = seriesTmdb) } + } + + @Test + fun scrollingPastItemsNeverAsksSeerr() = + runTest { + coEvery { moviesApi.movieMovieIdRatingscombinedGet(any()) } returns rtOnly + val jobs = + (1..20).map { id -> + val job = launch { service.forItem(item(BaseItemKind.MOVIE, mapOf("Tmdb" to "$id"))).collect { } } + runCurrent() + // focus moves on before the wait has passed + advanceTimeBy(SeerrRatingsService.DEBOUNCE_MILLIS - 50) + job.cancel() + job + } + jobs.forEach(Job::cancel) + runCurrent() + + coVerify(exactly = 0) { moviesApi.movieMovieIdRatingscombinedGet(any()) } + } + + @Test + fun restingOnAnItemAsksSeerrOnceAfterTheWait() = + runTest { + coEvery { moviesApi.movieMovieIdRatingscombinedGet(movieId = 7) } returns rtOnly + var result: Any? = "unset" + val job = launch { service.forItem(item(BaseItemKind.MOVIE, mapOf("Tmdb" to "7"))).collect { result = it } } + + advanceTimeBy(SeerrRatingsService.DEBOUNCE_MILLIS - 1) + runCurrent() + assertEquals("unset", result) + coVerify(exactly = 0) { moviesApi.movieMovieIdRatingscombinedGet(any()) } + + advanceTimeBy(2) + runCurrent() + assertNotNull(result) + coVerify(exactly = 1) { moviesApi.movieMovieIdRatingscombinedGet(movieId = 7) } + job.cancel() + } + + @Test + fun movingOnWhileTheRequestIsRunningCancelsIt() = + runTest { + var cancelled = false + coEvery { moviesApi.movieMovieIdRatingscombinedGet(movieId = 8) } coAnswers { + try { + awaitCancellation() + } finally { + cancelled = true + } + } + val job = launch { service.forItem(item(BaseItemKind.MOVIE, mapOf("Tmdb" to "8"))).collect { } } + advanceTimeBy(SeerrRatingsService.DEBOUNCE_MILLIS + 1) + runCurrent() + coVerify(exactly = 1) { moviesApi.movieMovieIdRatingscombinedGet(movieId = 8) } + + job.cancel() + runCurrent() + + assertEquals(true, cancelled) + assertNull(service.cached(SeerrItemType.MOVIE, 8)) + } +} diff --git a/app/src/test/java/com/github/damontecres/wholphin/services/SeerrRatingsServiceTest.kt b/app/src/test/java/com/github/damontecres/wholphin/services/SeerrRatingsServiceTest.kt index 2be93089..c6b008ea 100644 --- a/app/src/test/java/com/github/damontecres/wholphin/services/SeerrRatingsServiceTest.kt +++ b/app/src/test/java/com/github/damontecres/wholphin/services/SeerrRatingsServiceTest.kt @@ -21,6 +21,7 @@ import io.mockk.mockk import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.test.runTest +import org.jellyfin.sdk.api.client.ApiClient import org.jellyfin.sdk.model.api.BaseItemDto import org.jellyfin.sdk.model.api.BaseItemKind import org.junit.Assert.assertEquals @@ -45,7 +46,7 @@ class SeerrRatingsServiceTest { every { api } returns apiClient every { active } answers { activeFlow } } - private val service = SeerrRatingsService(seerrService) + private val service = SeerrRatingsService(seerrService, mockk()) private fun movieDetails( average: Double?, @@ -253,8 +254,7 @@ class SeerrRatingsServiceTest { // no TMDB id assertNull(service.forItem(jellyfinItem(BaseItemKind.MOVIE, null)).first()) assertNull(service.forItem(jellyfinItem(BaseItemKind.MOVIE, mapOf("Imdb" to "tt1"))).first()) - // not a movie/series - assertNull(service.forItem(jellyfinItem(BaseItemKind.EPISODE, mapOf("Tmdb" to "1"))).first()) + // not something that has ratings assertNull(service.forItem(jellyfinItem(BaseItemKind.BOX_SET, mapOf("Tmdb" to "1"))).first()) // call fails assertNull(service.forItem(jellyfinItem(BaseItemKind.SERIES, mapOf("Tmdb" to "2"))).first()) diff --git a/app/src/test/java/com/github/damontecres/wholphin/ui/components/SourceRatingsRowTest.kt b/app/src/test/java/com/github/damontecres/wholphin/ui/components/SourceRatingsRowTest.kt new file mode 100644 index 00000000..a51c73a0 --- /dev/null +++ b/app/src/test/java/com/github/damontecres/wholphin/ui/components/SourceRatingsRowTest.kt @@ -0,0 +1,239 @@ +package com.github.damontecres.wholphin.ui.components + +import androidx.compose.foundation.layout.Column +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.onNodeWithText +import com.github.damontecres.wholphin.api.seerr.MoviesApi +import com.github.damontecres.wholphin.api.seerr.SeerrApiClient +import com.github.damontecres.wholphin.api.seerr.TvApi +import com.github.damontecres.wholphin.api.seerr.model.MovieMovieIdRatingsGet200Response +import com.github.damontecres.wholphin.api.seerr.model.MovieMovieIdRatingscombinedGet200Response +import com.github.damontecres.wholphin.api.seerr.model.MovieMovieIdRatingscombinedGet200ResponseImdb +import com.github.damontecres.wholphin.api.seerr.model.TvDetails +import com.github.damontecres.wholphin.api.seerr.model.TvTvIdRatingsGet200Response +import com.github.damontecres.wholphin.data.model.BaseItem +import com.github.damontecres.wholphin.data.model.SourceRatings +import com.github.damontecres.wholphin.preferences.DisplayToggle +import com.github.damontecres.wholphin.services.SeerrRatingsService +import com.github.damontecres.wholphin.services.SeerrService +import com.github.damontecres.wholphin.ui.successResponse +import com.github.damontecres.wholphin.ui.theme.WholphinTheme +import com.github.damontecres.wholphin.ui.util.InterfaceCustomization +import com.github.damontecres.wholphin.ui.util.LocalInterfaceCustomization +import io.mockk.coEvery +import io.mockk.every +import io.mockk.mockk +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.runBlocking +import org.jellyfin.sdk.api.client.ApiClient +import org.jellyfin.sdk.api.client.extensions.userLibraryApi +import org.jellyfin.sdk.api.operations.UserLibraryApi +import org.jellyfin.sdk.model.api.BaseItemDto +import org.jellyfin.sdk.model.api.BaseItemKind +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import java.util.EnumSet +import java.util.UUID + +/** + * What every surface shows: the rating row comes only from Seerr, per the PWA's rules for the kind of item, and + * the Jellyfin rating of an item is never drawn + */ +@Config(sdk = [34]) +@RunWith(RobolectricTestRunner::class) +class SourceRatingsRowTest { + @get:Rule val rule = createComposeRule() + + private val moviesApi = mockk() + private val tvApi = mockk() + private val seerrApi = + mockk { + every { moviesApi } returns this@SourceRatingsRowTest.moviesApi + every { tvApi } returns this@SourceRatingsRowTest.tvApi + } + private val seerrService = + mockk { + every { api } returns seerrApi + every { active } returns flowOf(true) + } + private val userLibraryApi = mockk() + private val jellyfin = mockk { every { userLibraryApi } returns this@SourceRatingsRowTest.userLibraryApi } + private val service = SeerrRatingsService(seerrService, jellyfin) + + private val seriesId = UUID.randomUUID() + private val seriesTmdb = 1396 + + /** Every item carries Jellyfin ratings that must never be drawn */ + private fun item( + type: BaseItemKind, + tmdb: Int? = null, + seriesId: UUID? = null, + ) = BaseItem( + BaseItemDto( + id = UUID.randomUUID(), + type = type, + name = "Title", + providerIds = tmdb?.let { mapOf("Tmdb" to it.toString()) }, + seriesId = seriesId, + communityRating = 7.8f, + criticRating = 59f, + ), + ) + + private fun movieRatings() { + coEvery { moviesApi.movieMovieIdRatingscombinedGet(movieId = 603) } returns + MovieMovieIdRatingscombinedGet200Response( + rt = MovieMovieIdRatingsGet200Response(criticsScore = 96, criticsRating = "Certified Fresh", audienceScore = 90, audienceRating = "Upright"), + imdb = MovieMovieIdRatingscombinedGet200ResponseImdb(criticsScore = 8.8.toBigDecimal(), criticsScoreCount = 10), + ) + } + + private fun seriesRatings() { + coEvery { tvApi.tvTvIdRatingsGet(tvId = seriesTmdb) } returns + TvTvIdRatingsGet200Response(criticsScore = 81, criticsRating = "Fresh", audienceScore = 45, audienceRating = "Spilled") + coEvery { userLibraryApi.getItem(seriesId) } returns + successResponse(BaseItemDto(id = seriesId, type = BaseItemKind.SERIES, providerIds = mapOf("Tmdb" to "$seriesTmdb"))) + } + + /** + * Shows the quick details of the items, after what a screen's wait for Seerr would have loaded + */ + private fun show( + vararg items: BaseItem, + toggles: EnumSet = EnumSet.allOf(DisplayToggle::class.java), + ) { + runBlocking { + items.forEach { service.forItem(it, 0).collect { } } + } + rule.setContent { + WholphinTheme { + CompositionLocalProvider( + LocalSeerrRatingsService provides service, + LocalInterfaceCustomization provides InterfaceCustomization(toggles), + ) { + Column { + items.forEach { QuickDetails(it, null) } + } + } + } + } + rule.waitForIdle() + } + + private fun assertShown(text: String) = rule.onNodeWithText(text, substring = true).assertExists() + + private fun assertNotShown(text: String) = rule.onNodeWithText(text, substring = true).assertDoesNotExist() + + private fun assertJellyfinRatingNotShown() { + assertNotShown("7.8") + assertNotShown("59%") + } + + @Test + fun movieShowsRottenTomatoesThenImdbAndNotItsJellyfinRating() { + movieRatings() + show(item(BaseItemKind.MOVIE, 603)) + assertShown("96%") + assertShown("90%") + assertShown("8.8") + assertJellyfinRatingNotShown() + } + + @Test + fun seriesShowsItsRatings() { + seriesRatings() + show(item(BaseItemKind.SERIES, seriesTmdb)) + assertShown("81%") + assertShown("45%") + assertJellyfinRatingNotShown() + } + + @Test + fun episodeAndSeasonShowTheirSeriesRatings() { + seriesRatings() + show(item(BaseItemKind.EPISODE, seriesId = seriesId)) + assertShown("81%") + assertJellyfinRatingNotShown() + } + + @Test + fun seasonShowsItsSeriesRatings() { + seriesRatings() + show(item(BaseItemKind.SEASON, seriesId = seriesId)) + assertShown("45%") + assertJellyfinRatingNotShown() + } + + @Test + fun surfacesWithoutAPwaEquivalentShowNoRatingNotTheJellyfinStar() { + movieRatings() + seriesRatings() + show( + *listOf( + BaseItemKind.BOX_SET, + BaseItemKind.MUSIC_ALBUM, + BaseItemKind.MUSIC_ARTIST, + BaseItemKind.PHOTO, + BaseItemKind.PROGRAM, + ).map { item(it, 603, seriesId) }.toTypedArray(), + ) + assertNotShown("96%") + assertNotShown("81%") + assertJellyfinRatingNotShown() + } + + @Test + fun titleSeerrHasNoRatingsForShowsNoRatingNotTheJellyfinStar() { + coEvery { moviesApi.movieMovieIdRatingscombinedGet(movieId = 5) } returns MovieMovieIdRatingscombinedGet200Response() + coEvery { moviesApi.movieMovieIdGet(movieId = 5) } returns + mockk { + every { voteAverage } returns null + every { voteCount } returns null + } + show(item(BaseItemKind.MOVIE, 5)) + assertJellyfinRatingNotShown() + } + + @Test + fun theDisplaySettingsStillControlWhichSourcesAreDrawn() { + movieRatings() + show(item(BaseItemKind.MOVIE, 603), toggles = EnumSet.of(DisplayToggle.COMMUNITY_RATING)) + assertShown("8.8") + assertNotShown("96%") + } + + @Test + fun criticSettingHidesImdb() { + movieRatings() + show(item(BaseItemKind.MOVIE, 603), toggles = EnumSet.of(DisplayToggle.CRITIC_RATING)) + assertShown("96%") + assertNotShown("8.8") + } + + @Test + fun ratingsTextHasOneBadgeAndNumberPerEntryInOrder() { + val ratings = + SourceRatings.of( + rtCriticsScore = 96, + rtCriticsLabel = "Certified Fresh", + rtAudienceScore = 30, + rtAudienceLabel = "Spilled", + imdbScore = 8.8, + imdbVotes = 10, + ) + val entries = ratings.visibleEntries(community = true, critic = true) + val text = ratingsText(entries, leadingDot = false) + + assertTrue(text.text.indexOf("96%") < text.text.indexOf("30%")) + assertTrue(text.text.indexOf("30%") < text.text.indexOf("8.8")) + // dots only between entries, or also in front when something precedes the ratings + assertEquals(2, text.text.split("\u2022").size - 1) + assertEquals(3, ratingsText(entries, leadingDot = true).text.split("\u2022").size - 1) + } +} From 85365aa3c6c66ef10dffb8dfc91a8de54b21a382 Mon Sep 17 00:00:00 2001 From: justinzeus Date: Thu, 29 Oct 2026 21:35:13 +0100 Subject: [PATCH 18/26] Show each episode's own TMDB score next to the series ratings --- .../wholphin/data/model/SourceRatings.kt | 35 +++- .../wholphin/services/SeerrRatingsService.kt | 86 +++++++++- .../ui/components/SourceRatingsRow.kt | 9 +- app/src/main/res/values/strings.xml | 1 + app/src/main/seerr/seerr-api.yml | 57 ++++++- .../wholphin/data/model/SourceRatingsTest.kt | 44 +++++ .../services/SeerrRatingsItemsTest.kt | 158 ++++++++++++++++++ .../ui/components/SourceRatingsRowTest.kt | 48 +++++- 8 files changed, 428 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/github/damontecres/wholphin/data/model/SourceRatings.kt b/app/src/main/java/com/github/damontecres/wholphin/data/model/SourceRatings.kt index f6c6e5e2..581a4aa2 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/data/model/SourceRatings.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/data/model/SourceRatings.kt @@ -61,6 +61,11 @@ sealed interface RatingEntry { val text: String val badge: RatingBadge + /** + * An episode's own score rather than its series', which is drawn with a label so it is not mistaken for the series + */ + val isEpisode: Boolean get() = false + data class RottenTomatoes( val score: RtScore, /** Critics (Tomatometer) or audience (Popcornmeter) */ @@ -91,6 +96,14 @@ sealed interface RatingEntry { override val text: String get() = formatScore(score) override val badge: RatingBadge get() = RatingBadge.TMDB } + + data class EpisodeTmdb( + val score: Double, + ) : RatingEntry { + override val text: String get() = formatScore(score) + override val badge: RatingBadge get() = RatingBadge.TMDB + override val isEpisode: Boolean get() = true + } } private fun formatScore(score: Double) = String.format(Locale.getDefault(), "%.1f", score) @@ -107,8 +120,10 @@ data class SourceRatings( val rtAudience: RtScore? = null, val imdb: Double? = null, val tmdb: Double? = null, + /** The TMDB user score of the episode itself, for episodes */ + val episodeTmdb: Double? = null, ) { - val isEmpty: Boolean get() = rtCritics == null && rtAudience == null && imdb == null && tmdb == null + val isEmpty: Boolean get() = rtCritics == null && rtAudience == null && imdb == null && tmdb == null && episodeTmdb == null /** * Rotten Tomatoes entries in PWA order: critics then audience @@ -128,8 +143,17 @@ data class SourceRatings( listOfNotNull( imdb?.let { RatingEntry.Imdb(it) }, tmdb?.let { RatingEntry.Tmdb(it) }, + episodeTmdb?.let { RatingEntry.EpisodeTmdb(it) }, ) + /** + * These ratings of a series with the TMDB score of one of its episodes. Rotten Tomatoes stays for context, but the + * series' own TMDB score is dropped so there is a single TMDB number, which is the episode's. + * + * @param episodeScore from [episodeScore], if null these ratings are unchanged + */ + fun withEpisode(episodeScore: Double?): SourceRatings = if (episodeScore == null) this else copy(tmdb = null, episodeTmdb = episodeScore) + /** * The entries to draw in PWA order (Rotten Tomatoes, then IMDb or TMDB). * @@ -144,6 +168,15 @@ data class SourceRatings( const val MAX_PERCENT = 100.0 const val MAX_SCORE = 10.0 + /** + * An episode's TMDB user score by the PWA's rules for a user score: only if observed, within 0-10, and with at least one vote + * (no votes or no vote count is unrated, never 0) + */ + fun episodeScore( + score: Number?, + votes: Long?, + ): Double? = if (votes == null) null else userScore(score, votes) + /** * Builds ratings using the PWA's rules: * - Only observed scores are kept. A score outside its range (RT 0-100, IMDb/TMDB 0-10) or with a negative vote count is dropped diff --git a/app/src/main/java/com/github/damontecres/wholphin/services/SeerrRatingsService.kt b/app/src/main/java/com/github/damontecres/wholphin/services/SeerrRatingsService.kt index 20942c78..08d31a9d 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/services/SeerrRatingsService.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/services/SeerrRatingsService.kt @@ -49,7 +49,9 @@ data class RatingsTarget( * Which Jellyfin items have ratings follows the PWA, which shows ratings for a title and nothing else: * - movies show their own ratings * - series show their own ratings - * - seasons and episodes show their series' ratings, as the PWA does for the title page an episode belongs to + * - seasons show their series' ratings, as the PWA does for the title page a season belongs to + * - episodes show their series' Rotten Tomatoes ratings for context and their own TMDB user score, from the season + * Seerr reports (one request for all episodes of the season). The series' TMDB score is not shown next to it. * - everything else (collections, music, photos, programs, ...) has none * * Movies use `ratingscombined` (RT critics, RT audience, IMDb), series use `tv/{id}/ratings` (RT). TMDB comes from @@ -77,6 +79,21 @@ class SeerrRatingsService .expireAfterWrite(CACHE_HOURS, TimeUnit.HOURS) .build() + private data class SeasonKey( + val tmdbId: Int, + val season: Int, + ) + + /** + * The TMDB vote of each episode (by episode number) of a series' season + */ + private val seasonCache = + CacheBuilder + .newBuilder() + .maximumSize(CACHE_SIZE) + .expireAfterWrite(CACHE_HOURS, TimeUnit.HOURS) + .build>() + /** * The TMDB id of a Jellyfin movie or series, empty if it has none. Items such as an episode on the home page * don't carry their series' provider ids, so this is how they are found. @@ -159,7 +176,18 @@ class SeerrRatingsService /** * The already cached ratings for an item, used to seed a screen's state so it doesn't flash empty */ - fun cachedFor(item: BaseItem): SourceRatings? = knownTarget(item)?.let { cached(it.type, it.tmdbId) } + fun cachedFor(item: BaseItem): SourceRatings? { + val target = knownTarget(item) ?: return null + val series = cached(target.type, target.tmdbId) ?: return null + if (item.type != BaseItemKind.EPISODE) return series + val season = item.data.parentIndexNumber + val episode = item.data.indexNumber + if (season == null || episode == null) return series + val votes = seasonCache.getIfPresent(SeasonKey(target.tmdbId, season)) ?: return null + return series.withEpisode(episodeScore(votes[episode])) + } + + private fun episodeScore(vote: TmdbVote?) = vote?.let { SourceRatings.episodeScore(it.average, it.count) } /** * Ratings for a Jellyfin item. Follows whether Seerr is active, since the connection is established @@ -185,12 +213,64 @@ class SeerrRatingsService seerrService.active .distinctUntilChanged() .mapLatest { active -> - if (active) resolveTarget(item)?.let { get(it.type, it.tmdbId) } else null + if (active) resolveTarget(item)?.let { getFor(item, it) } else null }, ) } } + /** + * The ratings for the target of an item: for an episode, those of its series with its own TMDB score + */ + private suspend fun getFor( + item: BaseItem, + target: RatingsTarget, + ): SourceRatings? { + val series = get(target.type, target.tmdbId) + val season = item.data.parentIndexNumber + val episode = item.data.indexNumber + if (item.type != BaseItemKind.EPISODE || season == null || episode == null) return series + val votes = getSeason(target.tmdbId, season) + if (series == null && votes == null) return null + return (series ?: SourceRatings()).withEpisode(episodeScore(votes?.get(episode))) + } + + /** + * The TMDB votes of the episodes of a season, fetched once for all of them. Null if the request failed, which is not cached. + */ + private suspend fun getSeason( + tmdbId: Int, + season: Int, + ): Map? { + val key = SeasonKey(tmdbId, season) + seasonCache.getIfPresent(key)?.let { return it } + val votes = + try { + seerrService.api.tvApi + .tvTvIdSeasonSeasonNumberGet(tvId = tmdbId, seasonNumber = season) + .episodes + .orEmpty() + .mapNotNull { episode -> + episode.episodeNumber?.let { it to TmdbVote(episode.voteAverage?.toDouble(), episode.voteCount) } + }.toMap() + } catch (ex: CancellationException) { + throw ex + } catch (ex: ClientException) { + if (ex.statusCode == 404) { + // TMDB has no such season, that is an answer rather than a failure + emptyMap() + } else { + Timber.w(ex, "Error fetching season %s of %s", season, tmdbId) + return null + } + } catch (ex: Exception) { + Timber.w(ex, "Error fetching season %s of %s", season, tmdbId) + return null + } + seasonCache.put(key, votes) + return votes + } + /** * @param knownTmdb if the caller already has the TMDB vote data (ie from the details response), avoids another request * @return the ratings (possibly [SourceRatings.isEmpty]) or null if they could not be determined right now diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/components/SourceRatingsRow.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/components/SourceRatingsRow.kt index e2552ace..19567883 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/components/SourceRatingsRow.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/components/SourceRatingsRow.kt @@ -17,6 +17,7 @@ import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.graphics.ColorMatrix import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.Placeholder import androidx.compose.ui.text.PlaceholderVerticalAlign @@ -100,16 +101,19 @@ private fun rememberBadges(textStyle: TextStyle): Map * The text for the ratings: each as a badge and its number, separated by dots * * @param leadingDot whether a dot is put in front of the first rating because something precedes it + * @param episodeLabel put in front of an episode's own score, "Ep" so it isn't mistaken for the series' score */ fun ratingsText( entries: List, leadingDot: Boolean, + episodeLabel: String, ): AnnotatedString = buildAnnotatedString { entries.forEachIndexed { index, entry -> if (index > 0 || leadingDot) dot() appendInlineContent(entry.badge.name) append(" ") + if (entry.isEpisode) append("$episodeLabel ") append(entry.text) } } @@ -131,9 +135,10 @@ fun SourceRatingsRow( val enabled = LocalInterfaceCustomization.current.enabledDisplayToggles val community = DisplayToggle.COMMUNITY_RATING in enabled val critic = DisplayToggle.CRITIC_RATING in enabled + val episodeLabel = stringResource(R.string.rating_episode_label) val text = - remember(ratings, community, critic, leadingDot) { - ratings.visibleEntries(community, critic).takeIf { it.isNotEmpty() }?.let { ratingsText(it, leadingDot) } + remember(ratings, community, critic, leadingDot, episodeLabel) { + ratings.visibleEntries(community, critic).takeIf { it.isNotEmpty() }?.let { ratingsText(it, leadingDot, episodeLabel) } } ?: return val badges = rememberBadges(textStyle) Text( diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7b8a3578..84ad72c7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -164,6 +164,7 @@ S%1$02dE%2$02d S%1$02dE%2$02d-E%3$02d E%1$d + Ep Season %1$d TV Shows Interface diff --git a/app/src/main/seerr/seerr-api.yml b/app/src/main/seerr/seerr-api.yml index d174ccec..dc493638 100644 --- a/app/src/main/seerr/seerr-api.yml +++ b/app/src/main/seerr/seerr-api.yml @@ -1097,6 +1097,61 @@ components: example: 0 description: Availability of the season in 4K readOnly: true + SeasonDetails: + type: object + description: The answer of the season endpoint. Everything TMDB may not know is nullable. + properties: + id: + type: integer + airDate: + type: string + nullable: true + name: + type: string + nullable: true + overview: + type: string + nullable: true + posterPath: + type: string + nullable: true + seasonNumber: + type: integer + episodes: + type: array + items: + $ref: '#/components/schemas/SeasonEpisode' + SeasonEpisode: + type: object + description: An episode of the season endpoint. voteAverage is TMDB's user score as a decimal, 0 when nobody voted. + properties: + id: + type: integer + name: + type: string + nullable: true + overview: + type: string + nullable: true + airDate: + type: string + nullable: true + episodeNumber: + type: integer + seasonNumber: + type: integer + showId: + type: integer + stillPath: + type: string + nullable: true + voteAverage: + type: number + nullable: true + voteCount: + type: integer + format: int64 + nullable: true TvShowStatus: type: string enum: ["Returning Series", "Planned", "In Production", "Ended", "Canceled", "Pilot"] @@ -6651,7 +6706,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Season' + $ref: '#/components/schemas/SeasonDetails' /tv/{tvId}/recommendations: get: summary: Get recommended TV series diff --git a/app/src/test/java/com/github/damontecres/wholphin/data/model/SourceRatingsTest.kt b/app/src/test/java/com/github/damontecres/wholphin/data/model/SourceRatingsTest.kt index e2471275..e5c12a56 100644 --- a/app/src/test/java/com/github/damontecres/wholphin/data/model/SourceRatingsTest.kt +++ b/app/src/test/java/com/github/damontecres/wholphin/data/model/SourceRatingsTest.kt @@ -157,4 +157,48 @@ class SourceRatingsTest { assertTrue(SourceRatings().visibleEntries(community = true, critic = true).isEmpty()) assertFalse(movie.isEmpty) } + + @Test + fun episodeScoreFollowsThePwaRulesForAUserScore() { + assertEquals(7.9, SourceRatings.episodeScore(7.9, 120)!!, 0.0) + // unrated, never 0 + assertNull(SourceRatings.episodeScore(0.0, 0)) + assertNull(SourceRatings.episodeScore(8.0, 0)) + assertNull(SourceRatings.episodeScore(8.0, null)) + // not observed or out of range + assertNull(SourceRatings.episodeScore(null, 10)) + assertNull(SourceRatings.episodeScore(10.5, 10)) + assertNull(SourceRatings.episodeScore(-1.0, 10)) + assertEquals(10.0, SourceRatings.episodeScore(10.0, 1)!!, 0.0) + } + + @Test + fun episodeKeepsTheSeriesRottenTomatoesAndHasOneLabelledTmdbNumber() { + val series = + SourceRatings.of(rtCriticsScore = 63, rtCriticsLabel = "Fresh", rtAudienceScore = 71, rtAudienceLabel = "Upright", tmdbScore = 7.6, tmdbVotes = 3000) + // the series only has its TMDB score because it has no other source + val withTmdbOnly = SourceRatings.of(tmdbScore = 7.6, tmdbVotes = 3000) + assertEquals(7.6, withTmdbOnly.tmdb!!, 0.0) + + val episode = withTmdbOnly.withEpisode(8.2) + assertNull(episode.tmdb) + val entries = episode.visibleEntries(community = true, critic = true) + assertEquals(listOf(RatingBadge.TMDB), entries.map { it.badge }) + assertEquals(listOf("8.2"), entries.map { it.text }) + assertEquals(listOf(true), entries.map { it.isEpisode }) + + val full = series.withEpisode(8.2).visibleEntries(community = true, critic = true) + assertEquals(listOf("63%", "71%", "8.2"), full.map { it.text }) + assertEquals(listOf(false, false, true), full.map { it.isEpisode }) + // the display settings treat it as a community (IMDb/TMDB) rating + assertEquals(listOf("8.2"), series.withEpisode(8.2).visibleEntries(community = true, critic = false).map { it.text }) + assertEquals(listOf("63%", "71%"), series.withEpisode(8.2).visibleEntries(community = false, critic = true).map { it.text }) + } + + @Test + fun withoutAnEpisodeScoreTheSeriesRatingsAreUnchanged() { + val series = SourceRatings.of(tmdbScore = 7.6, tmdbVotes = 10) + assertEquals(series, series.withEpisode(null)) + assertFalse(SourceRatings().withEpisode(5.0).isEmpty) + } } diff --git a/app/src/test/java/com/github/damontecres/wholphin/services/SeerrRatingsItemsTest.kt b/app/src/test/java/com/github/damontecres/wholphin/services/SeerrRatingsItemsTest.kt index 72baa65c..adb5ca33 100644 --- a/app/src/test/java/com/github/damontecres/wholphin/services/SeerrRatingsItemsTest.kt +++ b/app/src/test/java/com/github/damontecres/wholphin/services/SeerrRatingsItemsTest.kt @@ -7,6 +7,9 @@ import com.github.damontecres.wholphin.api.seerr.SeerrApiClient import com.github.damontecres.wholphin.api.seerr.TvApi import com.github.damontecres.wholphin.api.seerr.model.MovieMovieIdRatingscombinedGet200Response import com.github.damontecres.wholphin.api.seerr.model.MovieMovieIdRatingsGet200Response +import com.github.damontecres.wholphin.api.seerr.infrastructure.ClientException +import com.github.damontecres.wholphin.api.seerr.model.SeasonDetails +import com.github.damontecres.wholphin.api.seerr.model.SeasonEpisode import com.github.damontecres.wholphin.api.seerr.model.TvTvIdRatingsGet200Response import com.github.damontecres.wholphin.data.model.BaseItem import com.github.damontecres.wholphin.data.model.SeerrItemType @@ -265,4 +268,159 @@ class SeerrRatingsItemsTest { assertEquals(true, cancelled) assertNull(service.cached(SeerrItemType.MOVIE, 8)) } + + private fun season(vararg episodes: Triple) = + SeasonDetails( + seasonNumber = 5, + episodes = episodes.map { (number, average, votes) -> SeasonEpisode(episodeNumber = number, voteAverage = average?.toBigDecimal(), voteCount = votes) }, + ) + + private fun episode( + season: Int?, + episode: Int?, + ) = BaseItem(BaseItemDto(id = UUID.randomUUID(), type = BaseItemKind.EPISODE, seriesId = seriesId, parentIndexNumber = season, indexNumber = episode)) + + private fun seriesKnown() { + jellyfinHasSeries() + coEvery { tvApi.tvTvIdRatingsGet(tvId = seriesTmdb) } returns tvRatings + } + + @Test + fun theSeasonIsFetchedOnceForEveryEpisodeOfIt() = + runTest { + seriesKnown() + coEvery { tvApi.tvTvIdSeasonSeasonNumberGet(tvId = seriesTmdb, seasonNumber = 5) } returns + season(Triple(1, 8.24, 120L), Triple(2, 7.0, 80L), Triple(3, 9.5, 10L)) + + val first = service.forItem(episode(5, 1)).first()!! + val second = service.forItem(episode(5, 2)).first()!! + val third = service.forItem(episode(5, 3)).first()!! + + // each episode has its own score next to the series' Rotten Tomatoes + assertEquals(listOf(8.24, 7.0, 9.5), listOf(first, second, third).map { it.episodeTmdb }) + assertEquals(80, first.rtCritics?.percent) + coVerify(exactly = 1) { tvApi.tvTvIdSeasonSeasonNumberGet(tvId = seriesTmdb, seasonNumber = 5) } + coVerify(exactly = 1) { tvApi.tvTvIdRatingsGet(tvId = seriesTmdb) } + // and another episode of the season is known without waiting + assertEquals(7.0, service.cachedFor(episode(5, 2))!!.episodeTmdb!!, 0.0) + } + + @Test + fun eachSeasonIsItsOwnRequest() = + runTest { + seriesKnown() + coEvery { tvApi.tvTvIdSeasonSeasonNumberGet(tvId = seriesTmdb, seasonNumber = 1) } returns season(Triple(1, 6.0, 5L)) + coEvery { tvApi.tvTvIdSeasonSeasonNumberGet(tvId = seriesTmdb, seasonNumber = 2) } returns season(Triple(1, 9.0, 5L)) + + assertEquals(6.0, service.forItem(episode(1, 1)).first()!!.episodeTmdb!!, 0.0) + assertEquals(9.0, service.forItem(episode(2, 1)).first()!!.episodeTmdb!!, 0.0) + // the same episode number of another season is not mistaken for it + assertNull(service.cachedFor(episode(3, 1))) + } + + @Test + fun unratedEpisodesShowOnlyTheSeriesRatings() = + runTest { + seriesKnown() + coEvery { tvApi.tvTvIdSeasonSeasonNumberGet(tvId = seriesTmdb, seasonNumber = 5) } returns + season(Triple(1, 0.0, 0L), Triple(2, 8.0, null), Triple(3, null, null)) + + listOf(1, 2, 3, 4).forEach { number -> + val ratings = service.forItem(episode(5, number)).first()!! + assertNull("episode $number", ratings.episodeTmdb) + assertEquals("episode $number", 80, ratings.rtCritics?.percent) + } + } + + @Test + fun episodeWithoutSeasonOrEpisodeNumberShowsTheSeriesRatingsWithoutAskingForTheSeason() = + runTest { + seriesKnown() + + assertEquals(80, service.forItem(episode(null, 1)).first()!!.rtCritics?.percent) + assertEquals(80, service.forItem(episode(5, null)).first()!!.rtCritics?.percent) + coVerify(exactly = 0) { tvApi.tvTvIdSeasonSeasonNumberGet(any(), any(), any()) } + } + + @Test + fun episodeTmdbReplacesTheSeriesTmdbWhenThatWasTheOnlySource() = + runTest { + jellyfinHasSeries() + coEvery { tvApi.tvTvIdRatingsGet(tvId = seriesTmdb) } returns TvTvIdRatingsGet200Response() + coEvery { tvApi.tvTvIdGet(tvId = seriesTmdb) } returns + mockk { + every { voteAverage } returns 7.6.toBigDecimal() + every { voteCount } returns 900 + } + coEvery { tvApi.tvTvIdSeasonSeasonNumberGet(tvId = seriesTmdb, seasonNumber = 5) } returns season(Triple(1, 8.8, 40L)) + + val ratings = service.forItem(episode(5, 1)).first()!! + + assertNull(ratings.tmdb) + assertEquals(8.8, ratings.episodeTmdb!!, 0.0) + } + + @Test + fun failedSeasonRequestKeepsTheSeriesRatingsAndIsRetried() = + runTest { + seriesKnown() + coEvery { tvApi.tvTvIdSeasonSeasonNumberGet(tvId = seriesTmdb, seasonNumber = 5) } throws IOException("down") andThen + season(Triple(1, 8.0, 3L)) + + val first = service.forItem(episode(5, 1)).first()!! + assertNull(first.episodeTmdb) + assertEquals(80, first.rtCritics?.percent) + // not cached as "no score": the screen has to wait again + assertNull(service.cachedFor(episode(5, 1))) + + assertEquals(8.0, service.forItem(episode(5, 1)).first()!!.episodeTmdb!!, 0.0) + } + + @Test + fun seasonTmdbDoesNotKnowIsAnAnswer() = + runTest { + seriesKnown() + coEvery { tvApi.tvTvIdSeasonSeasonNumberGet(tvId = seriesTmdb, seasonNumber = 9) } throws ClientException("none", 404) + + assertNull(service.forItem(episode(9, 1)).first()!!.episodeTmdb) + service.forItem(episode(9, 2)).first() + + coVerify(exactly = 1) { tvApi.tvTvIdSeasonSeasonNumberGet(tvId = seriesTmdb, seasonNumber = 9) } + } + + @Test + fun seriesWithoutATmdbIdShowsNothingExtra() = + runTest { + jellyfinHasSeries(tmdb = null) + + assertNull(service.forItem(episode(5, 1)).first()) + coVerify(exactly = 0) { tvApi.tvTvIdSeasonSeasonNumberGet(any(), any(), any()) } + } + + @Test + fun seasonsStillShowOnlyTheirSeriesRatings() = + runTest { + seriesKnown() + val season = BaseItem(BaseItemDto(id = UUID.randomUUID(), type = BaseItemKind.SEASON, seriesId = seriesId, indexNumber = 5, parentIndexNumber = 5)) + + assertNull(service.forItem(season).first()!!.episodeTmdb) + coVerify(exactly = 0) { tvApi.tvTvIdSeasonSeasonNumberGet(any(), any(), any()) } + } + + @Test + fun scrollingPastEpisodesNeverFetchesASeason() = + runTest { + seriesKnown() + coEvery { tvApi.tvTvIdSeasonSeasonNumberGet(any(), any(), any()) } returns season(Triple(1, 8.0, 3L)) + repeat(10) { number -> + val job = launch { service.forItem(episode(5, number + 1)).collect { } } + runCurrent() + advanceTimeBy(SeerrRatingsService.DEBOUNCE_MILLIS - 50) + job.cancel() + } + runCurrent() + + coVerify(exactly = 0) { tvApi.tvTvIdSeasonSeasonNumberGet(any(), any(), any()) } + coVerify(exactly = 0) { userLibraryApi.getItem(any()) } + } } diff --git a/app/src/test/java/com/github/damontecres/wholphin/ui/components/SourceRatingsRowTest.kt b/app/src/test/java/com/github/damontecres/wholphin/ui/components/SourceRatingsRowTest.kt index a51c73a0..4fb3dc5c 100644 --- a/app/src/test/java/com/github/damontecres/wholphin/ui/components/SourceRatingsRowTest.kt +++ b/app/src/test/java/com/github/damontecres/wholphin/ui/components/SourceRatingsRowTest.kt @@ -10,7 +10,8 @@ import com.github.damontecres.wholphin.api.seerr.TvApi import com.github.damontecres.wholphin.api.seerr.model.MovieMovieIdRatingsGet200Response import com.github.damontecres.wholphin.api.seerr.model.MovieMovieIdRatingscombinedGet200Response import com.github.damontecres.wholphin.api.seerr.model.MovieMovieIdRatingscombinedGet200ResponseImdb -import com.github.damontecres.wholphin.api.seerr.model.TvDetails +import com.github.damontecres.wholphin.api.seerr.model.SeasonDetails +import com.github.damontecres.wholphin.api.seerr.model.SeasonEpisode import com.github.damontecres.wholphin.api.seerr.model.TvTvIdRatingsGet200Response import com.github.damontecres.wholphin.data.model.BaseItem import com.github.damontecres.wholphin.data.model.SourceRatings @@ -162,6 +163,47 @@ class SourceRatingsRowTest { assertJellyfinRatingNotShown() } + private fun episodeWithScores(): BaseItem { + seriesRatings() + coEvery { tvApi.tvTvIdSeasonSeasonNumberGet(tvId = seriesTmdb, seasonNumber = 5) } returns + SeasonDetails(episodes = listOf(SeasonEpisode(episodeNumber = 1, voteAverage = 8.1.toBigDecimal(), voteCount = 50))) + return BaseItem( + BaseItemDto( + id = UUID.randomUUID(), + type = BaseItemKind.EPISODE, + providerIds = mapOf("Tmdb" to "331212"), + seriesId = seriesId, + parentIndexNumber = 5, + indexNumber = 1, + communityRating = 7.8f, + criticRating = 59f, + ), + ) + } + + @Test + fun episodeShowsItsOwnLabelledTmdbScoreNextToTheSeriesRottenTomatoes() { + show(episodeWithScores()) + assertShown("81%") + assertShown("45%") + assertShown("Ep 8.1") + assertJellyfinRatingNotShown() + } + + @Test + fun episodeScoreFollowsTheCommunityRatingSetting() { + show(episodeWithScores(), toggles = EnumSet.of(DisplayToggle.CRITIC_RATING)) + assertShown("81%") + assertNotShown("Ep 8.1") + } + + @Test + fun episodeScoreStaysWhenRottenTomatoesIsHidden() { + show(episodeWithScores(), toggles = EnumSet.of(DisplayToggle.COMMUNITY_RATING)) + assertShown("Ep 8.1") + assertNotShown("81%") + } + @Test fun seasonShowsItsSeriesRatings() { seriesRatings() @@ -228,12 +270,12 @@ class SourceRatingsRowTest { imdbVotes = 10, ) val entries = ratings.visibleEntries(community = true, critic = true) - val text = ratingsText(entries, leadingDot = false) + val text = ratingsText(entries, leadingDot = false, episodeLabel = "Ep") assertTrue(text.text.indexOf("96%") < text.text.indexOf("30%")) assertTrue(text.text.indexOf("30%") < text.text.indexOf("8.8")) // dots only between entries, or also in front when something precedes the ratings assertEquals(2, text.text.split("\u2022").size - 1) - assertEquals(3, ratingsText(entries, leadingDot = true).text.split("\u2022").size - 1) + assertEquals(3, ratingsText(entries, leadingDot = true, episodeLabel = "Ep").text.split("\u2022").size - 1) } } From b04cba4d6ee790a2cb7f989ed4bdc3f1ff913599 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Mon, 2 Nov 2026 15:34:55 +0000 Subject: [PATCH 19/26] Translated using Weblate (Estonian) Currently translated at 100.0% (696 of 696 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/et/ --- app/src/main/res/values-et/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 075fd109..90a829bb 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -758,4 +758,5 @@ Viga Teisenda Dolby Vision Profile 7 → 8.1 Muudab kahekihilise „Profile 7“ enne dekooderit ühekihiliseks profiiliks 8.1 ja esitab seda seadmetel otse, mille dekooder toetab profiili 8, kuid mitte profiili 7 + Esitaja allikas From c5a07f1ab87caaa6fe616089622719b144bc705a Mon Sep 17 00:00:00 2001 From: ymir Date: Mon, 2 Nov 2026 12:02:06 +0000 Subject: [PATCH 20/26] Translated using Weblate (French) Currently translated at 100.0% (696 of 696 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/fr/ --- app/src/main/res/values-fr/strings.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index a7991c1a..d3e77084 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -777,4 +777,9 @@ Profil utilisateur du serveur Paramètres par défaut du serveur Client Web utilisateur + Convertir le profil Dolby Vision 7 en 8.1 + Convertit le profil 7 double couche en profil 8.1 simple couche avant le décodeur et le lit directement, pour les appareils dont le décodeur prend en charge le profil 8 mais pas le profil 7 + Source de l\'artiste + Géré par le serveur + Erreur From e53e8b7c678cc52357ca4a506d3f0523560c3d63 Mon Sep 17 00:00:00 2001 From: TheMatrixan Date: Mon, 2 Nov 2026 06:49:48 +0000 Subject: [PATCH 21/26] Translated using Weblate (Polish) Currently translated at 100.0% (696 of 696 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pl/ --- app/src/main/res/values-pl/strings.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 98c5c2f3..748910f6 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -800,4 +800,9 @@ Profil użytkownika na serwerze Domyślnie z serwera Użytkownik klienta webowego + Konwertuj Dolby Vision 7 do 8.1 + W przypadku urządzeń, których dekoder obsługuje profil 8, ale nie obsługuje profilu 7, system przekształca dwuwarstwowy profil 7 na jednowarstwowy profil 8.1 przed przekazaniem go do dekodera, umożliwiając bezpośrednie odtwarzanie + Źródło artysty + Zarządzane przez serwer + Błąd From 06c1d622bb1f3272a975a85258fd561ec6b6eedf Mon Sep 17 00:00:00 2001 From: coulterj Date: Tue, 3 Nov 2026 10:18:41 -0600 Subject: [PATCH 22/26] Fix HDHomeRun Live TV direct playback by including the live stream ID (#2163) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Description I was having trouble playing HDHomeRun channels through Jellyfin in Wholphin. They started quickly in the official Jellyfin app, but Wholphin would sometimes spin or fall back when switching channels. This change includes the live stream ID returned by Jellyfin when building the Direct Play URL. It also adds a regression test. ### Related issues Related to #2014 and possibly #1903. My testing was with an HDHomeRun; I haven’t verified the TVHeadend setups in those reports. ### Testing Tested on a Google TV Streamer with multiple local channels, FAST channels, and movie playback. The tested content used Direct Play, and the HDHomeRun tuners were released after stopping. All 18 playback tests and the formatting check passed after the requested test cleanup. ## Screenshots No UI changes. ## AI or LLM usage I used OpenAI Codex to help investigate the issue, implement the change in PlaybackViewModel.kt, add the regression test in PlaybackViewModelTests.kt, and run validation. Codex also helped draft this description. --- .../wholphin/ui/playback/PlaybackViewModel.kt | 1 + .../ui/playback/PlaybackViewModelTests.kt | 43 +++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackViewModel.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackViewModel.kt index e51ccfbb..24bd8ee9 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackViewModel.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackViewModel.kt @@ -717,6 +717,7 @@ class PlaybackViewModel api.videosApi.getVideoStreamUrl( itemId = itemId, mediaSourceId = source.id, + liveStreamId = source.liveStreamId, static = true, tag = source.eTag, playSessionId = response.playSessionId, diff --git a/app/src/test/java/com/github/damontecres/wholphin/ui/playback/PlaybackViewModelTests.kt b/app/src/test/java/com/github/damontecres/wholphin/ui/playback/PlaybackViewModelTests.kt index 7189adb1..87e5670a 100644 --- a/app/src/test/java/com/github/damontecres/wholphin/ui/playback/PlaybackViewModelTests.kt +++ b/app/src/test/java/com/github/damontecres/wholphin/ui/playback/PlaybackViewModelTests.kt @@ -292,6 +292,49 @@ class PlaybackViewModelTests { return viewModel } + @Test + fun `Direct play includes the opened live stream ID`() = + runTest(testDispatcher) { + setupPreferences { cinemaMode = false } + val liveStreamId = "opened-live-stream" + val liveSource = mediaSource.copy(liveStreamId = liveStreamId) + coEvery { mockUserLibraryApi.getItem(movie.id) } returns successResponse(movie) + coEvery { mockMediaInfoApi.getPostedPlaybackInfo(any(), any()) } returns + successResponse( + PlaybackInfoResponse( + mediaSources = listOf(liveSource), + playSessionId = playSessionId, + ), + ) + every { + mockVideosApi.getVideoStreamUrl( + itemId = movie.id, + mediaSourceId = liveSource.id, + liveStreamId = liveSource.liveStreamId, + static = true, + tag = liveSource.eTag, + playSessionId = playSessionId, + ) + } returns videoStreamUrl + + createViewModel(Destination.Playback(movie.id, 0L)) + + val mediaItem = slot() + verify(exactly = 1) { mockPlayer.setMediaItem(capture(mediaItem), any()) } + val playbackUri = mediaItem.captured.localConfiguration?.uri + Assert.assertEquals(videoStreamUrl, playbackUri.toString()) + verify(exactly = 1) { + mockVideosApi.getVideoStreamUrl( + itemId = movie.id, + mediaSourceId = liveSource.id, + liveStreamId = liveStreamId, + static = true, + tag = liveSource.eTag, + playSessionId = playSessionId, + ) + } + } + @Test fun `Play intro first`() = runTest(testDispatcher) { From d711760dbefed42ae3cddebac939fbafc2da8dc1 Mon Sep 17 00:00:00 2001 From: Damontecres Date: Tue, 3 Nov 2026 14:52:56 -0500 Subject: [PATCH 23/26] Minor bug fix (#2167) ## Description - Fixes typo that could prevent restoring a page with artists or album artists - Clarified some javadocs ### Related issues N/A ### Testing Emulator ## Screenshots N/A ## AI or LLM usage None --- .../damontecres/wholphin/data/MostRecentServer.kt | 12 +++--------- .../damontecres/wholphin/util/ApiRequestPager.kt | 4 ++-- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/github/damontecres/wholphin/data/MostRecentServer.kt b/app/src/main/java/com/github/damontecres/wholphin/data/MostRecentServer.kt index b46a5f33..5139fb73 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/data/MostRecentServer.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/data/MostRecentServer.kt @@ -16,7 +16,7 @@ import java.util.UUID /** * Represents the status of the most recently used server * - * This can be read/written to shared preferences + * This can be saved/retrieved from a [MostRecentServerProvider] */ sealed interface MostRecentServer { /** @@ -58,12 +58,12 @@ sealed interface MostRecentServer { interface MostRecentServerProvider { /** - * Get the [MostRecentServer] from the shared preferences in [context] + * Get the [MostRecentServer] from this provider */ fun get(): MostRecentServer /** - * Save the [CurrentUser] as the most recent server into the shared preferences in [context] + * Save the [CurrentUser] as the most recent server */ suspend fun save(current: CurrentUser) @@ -86,9 +86,6 @@ class MostRecentServerSharedPreferences( ) : MostRecentServerProvider { private val prefs = getServerSharedPreferences(context) - /** - * Get the [MostRecentServer] from the shared preferences in [context] - */ override fun get(): MostRecentServer { val serverId = prefs.getString(SERVER_ID_KEY, null)?.toUUIDOrNull() val serverUrl = prefs.getString(SERVER_URL_KEY, null) @@ -103,9 +100,6 @@ class MostRecentServerSharedPreferences( } } - /** - * Save the [CurrentUser] as the most recent server into the shared preferences in [context] - */ override suspend fun save(current: CurrentUser) { prefs.edit(true) { putString(SERVER_ID_KEY, current.server.id.toServerString()) diff --git a/app/src/main/java/com/github/damontecres/wholphin/util/ApiRequestPager.kt b/app/src/main/java/com/github/damontecres/wholphin/util/ApiRequestPager.kt index a82201a9..2f98fccc 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/util/ApiRequestPager.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/util/ApiRequestPager.kt @@ -436,7 +436,7 @@ val requestSerializersModule = subclass(GetStudiosRequest::class) subclass(GetRecordingsRequest::class) subclass(GetLiveTvChannelsRequest::class) - subclass(GetArtistsHandler::class) - subclass(GetAlbumArtistsHandler::class) + subclass(GetArtistsRequest::class) + subclass(GetAlbumArtistsRequest::class) } } From 1d880c95623389741f0165f05c5e4e5e3498cd22 Mon Sep 17 00:00:00 2001 From: Damontecres Date: Tue, 3 Nov 2026 15:28:48 -0500 Subject: [PATCH 24/26] Release v1.1.0 From a3bd0137b312d4fac621a8d1e6212f0bcf860a4a Mon Sep 17 00:00:00 2001 From: Damontecres Date: Tue, 3 Nov 2026 16:35:02 -0500 Subject: [PATCH 25/26] Fix style --- app/src/main/res/values-ja/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 55344e51..045e125f 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -1,3 +1,3 @@ - \ No newline at end of file + From 2bb662fd603143753493d13e2b91ac6d18bdb8f5 Mon Sep 17 00:00:00 2001 From: Damontecres Date: Tue, 3 Nov 2026 17:55:49 -0500 Subject: [PATCH 26/26] Release v1.1.0

bHOd)h0ePnnx#5csfh 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 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp index ce75a19685a95c27d9aa413b767f67198b75090a..924b40ebf62725c2602e29210d2205d3ce09f1ee 100644 GIT binary patch literal 8708 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 literal 3398 zcmV-M4Y~4CNk&FK4FCXFMM6+kP&iC64FCWyU%(d-2?lK=Inw0n|L6GwzJej5{}Yh= z@AN&esmb@jpQw%1-ZkG&eLOXRXJIVvdT%D#kS$Pi6mqk08%dHPrFhIF-7`q%zkdrh zu#F_iNn5WU4VH|6{6oWZ9Lct-^mlh$Z;^jE1i+Hz5261PfPBIvHb5ZCzi0@+Bp9p! zIQ`F_9su|?zSCb0=F?*-2M(7sU)|I*tU}{Z7#qv7jZhBz`2BN zTW#7@HYzP<0^~T`rbx~YRn^PP8&hg_$Z&q&f@v7b6#X+7aKy}BXh-a9+RT_SGus`F zS}I2@K@z|=jU*?_%*@Qk{l)(O3(PyzSd!%0wpA-yd*klz?(PIZ9^~t^7&P6j>b`Sg z0zAF{-$s&cYn00M^4`1m|B}4-YnAtv8RGILDwi34XAAXb09+%jiXUS6MRf}`szycv zoK-?mKrEZ6idDBHjP z4frM7wyy7aXN{NufV#LE5K^oFG6vx^AQb{$6?`?)kP90*XqSUJsF^jk(MDXD1N%4p zulYX%tKCKtxI81^x5|^_{U7%vn_l|Bplltbl_%9uTU0X*R5X!=(>tl5J~$ z#Bs|YJ4n?K&K#^&72Q@3=-z*=MbeXDr@b+>%0~pDs`%3fG64*Yr><-K@FZoVL;AU( zK*ms&{3WB@-lR}SDFtN6SI0RSRrITE;(nz8grjOo;crc8UZbiIp>xV`mPq6EW_v;J z?H7A5x#!DV@6DQW1tGoEtM@kf@Bn6q5Dg@_EBJYrc{xkJ-{!iXa>Ub(dV5A6?b7A~ zjCWYnfs8iGY%623Q131Cb`yKMPW;`M87wt=so&dOQ%4&xKLpWWWuQSdh#G=OW}t*t zYGNGN{pSB3dT?CleuT>ghIqQw+nO@RTWWL8PPFg7Kk(n*+*w!Ph(kA>;70MI5)bFD zyWaA8`n`{L-pTRZpP%3TyL)}_9ys3%XuQF!^wpefn8OuX901f>YGW3DIIT!t=2wYfF;6$w?atI(ZmI2Q7;6H71Z0~6s#<34NT9gI zPr2l1?zI|tL!IsKyqx{`x&5A=zs=|Rh_UUZL$$_R?QOW+@Xpq7wgV(9A+;S+AS~@1 zO=T=psAh4xYS5g?u#iVZAKt>j51*^kr#x|jo?2|gSZV0l=K8ax+Ur%lJAtUdl)LA) z1MQ!8XJR$k0QHPnUgkOWPEZb!Py_l4Q>tc^7%2ZSvJeudryCp3XX+m|%=rRLGy($% z(*Ec@pnT`tS67lrD;0ChiMlDRCP_$_KJNMA}F|YcIC3JTKjP7DLwrLJ+d@hn= zQ}D+166FGGedjypfOeRCMJjE~S)n4i^*T>w$d!=26w?f`gPga}B2!RJOwGw?)TO<~ zEwWtoznc~P#5H#5h4c4RRArGw7ST+j#DWP^&V(4`3B?G+Vn)n>DAh6`a+{K16Ed^> zP3R*XpM_c&Os>5H(^XA#b-R7;PF%V4lJmDBc`GNJB1KJ*tT%7d_!gL=$!Up@k>O z2Q8pm$Jt3bJ$yL8bdHL*OsdL9ReAqDe9zFiM~*I2rh4OH*DcedB`GPflz+4ay30vp zopkLy5b#zxO}21a#imr#>WmZvT`CneAt5Pp%YjGH4(u+|wG8$8^{09y)y5$~K?ItL znF`c8eakn$JL!C?J+V`JS{CCDwYtk#%bepEp?dY|*1PaAN8UUaMLxZlF8@26yKVj3 zVW&|_Pf$V`sVAu1o^N{h&9_q3smaO{x!{*q6DN(iQ?JN91;?wa_Zgv7-47Y5%(-aG zNHlWy)Oxyhz9yI6_EhVde(Hv_tjLqkpZ`Dk4+5FD+1R<{?bp0r>Qj^Ed3C{+@j-Hx zT!ZuBz4kjbydSb7eD(f)c<$Ue1m{Ko@{#GTa6S&@X)!N`o2?JNdi13UzisS0%L6yw za^oGze<%OBNxmvyhO6{W`hTH=EuE(b%UUbxM*1-Ygz1@wSB*?jJF}MT>EY$Eb8Pf3 z8~0M%YaffRlbbrhwi`n?%8#-RI8xhHR1GSHEJE0`E$foi##{)N!`!cD1+SqQcbD_{ z`0v|o7{_hv3}oUkqEZA|AgsndlgFVDVz(w(X>%i##im-$S)s7~_wWC`U0bmd+r_9N z7U6NBAZ%#`hC+xyh=dHQS-?@}45PNoWo0ymc5%$CgG7LwRSJ`!Kp7x+F+ef0y$rD? zi$&~0w=CxIWEjH`DWn3cpTcU>!Z2o&S0X3}pk&tD$|?YbveI!eFB;T=h4tk4T$pN; zbC=T$p!gZP7+9Z?i;X@hluaqhCGUHkqe7u4OlAQRmINohYyc^$PbeQYKrzm`PMy?s zoiz4<0l{o?xHzUvDJzfJEi0iuu`iKFY{jUw6x|`>#~0w3IH}8N+b=7F5|5-FC53)7 z6#CXBs>!&lMF<2VKWc*R|5Mg?7IOfiB2wzLnFAhA)M-iADG0!z#WvBHtk0&6K#Dm) zuax%Vm@?gb#?zTb#82-AYohI9H)XP($3zQb(xFmM>dJ8t6ot?w5c&x}Hr#EODO<*s z^*I!V)b~Pt%5+(*N0UHgp#2GJ0+XpJ>)ZaZDXwBjBJ}K&W{d+Ar6d_WKnSeXWHQ`6 zGUX#=9veng+|ru*UP@ZLac~6mLIQzBe(XZ{B(du#EhTmtwB{BwnS`)zZ7R7tNx~!( z1kCuccB=Q1 zmCek|6iNJuv010HB8?)N0ogJui-Z{3m(mt>vGDV!X4|Fgt5!2J%z7nBF#2JHawZYf zG2*9@-yDXPV$65YUs~GUWnEnUe|hi!_azTpa2GEu?@O3u#Ws-`iX;qW%XzT;=9?w= z{cy|v%4PB?_eul2;|}xl?0AcZYqq$Wht<*GiVc6HH}K)CDl>B0%x9^io72rxm(or* zzEZ!ya0@AN;;_T)EgZh+emiJ~Jgknh471spECW~}&6!ttus?5F-(mgf4L2b0u~cFYed0SfjkvuKCxs$VzVcqnul7<}*JV`X=MISzZ|v!rnPyXjos|p4zR^3fZbb>q~>K>NYW#|oqUnEr$N;akn& z9?PrweR<3KlRX)sI`nkqb{*!`e?9fe{jRU(>t!advu9(tDMwp+8%4c-n{N*WzX_&r z76(>^fE3Jt3|3J!6W_5C4+{uX4P*b|X#xk4gp6;@d#BFrFbSo)hOdQdu*ER)*WlrS zxRC+^5&_~D{_&upjs|Ot>fqoG+>cWqI}1liNEGlX`h=aCMTJqTYk*=}{+Smj&H_Zu zFb0T2G@knY*c3}30fkU9KwJz+n)p@b6*&QM)zzemf8Qli7%=!hoa%Q3&%id3oABJ$#G)pGw(n0n+h^!l362-W~mCwB0C=Pn+f$?fb|6ZwlRP#IJY&AyNLp>Z4Z6EoozQ~ zK>)qAGy78n_gs5UeSJCS>?tXMmjfVW#2dg`$|(447mi$8Ta%l*{P}~se8{L_|Lb7^ z?$8!SB;P+`?8uRARXMoB#r@@AUteCn;tu;?3PZw(xUFp~R*vu{9uJmgWB+yi5{L|4 z{ht89-`oJd%m-V<#qS1abY=tv08CaKHCRT?Z(vyJ;pUx(n-*!*)0U&*6voRvWq=b9 z1c4LmW0EA~>-3xMp4S`%09yU7uW^!Lvr%TbmD!blj~Sc;K?OCSb-08TIA*+Rn4GAx zI_)yoSO6^+Sjst#l?I+DZ^&fplc+|)BUxqwS3#ii4r|I=TA(}|L{Tjn70+qV0BZAv z^FSLkmeOLfcZ`WlX69L{Lxi=VgL{-(ph$gxmv{NqDZo>r0gf>od9g7G$%il-tl3~& zZzXzoX27l?klVSJ>w)}{3mne80ADKqB?d06|6&V*L zUC<3fpY#zG7K{5qKv3lWXo?(3N*Z@=EARqs(EqP?8%cjS|3jC=vSp6K%s5QT%*@Qp z%*@Qp%rwk1X@-Df$sh~wy}ESH`SbF=lIHCh@>KH+t@hSkxZAXpcBMwEzEhfBEjGDb zrS+s#+q4V~UJc%1YVd&9-3uN}bGe$dIG9X1J>b#SdT|(>CS^$56{y;V8q#RHN{?;Z zs%_g*YkkbM_XROCCjf1E$`tF9EtaLsuoRJm@WN$!diTF`_8J|N07!}?NfHrNGxvy$ ztjwyOs;OmWX2u8XS9TvlU)m4so|u`MYN|3bB0S7ZB^bDEq$tbBd_ym=?Ear4NlN@P zs~7LR_b z;cl$oEo?jiz7*KR`%z1yR^H}_hg55nc<)_m{q7MrW^-F3IcVERkdiKz=TGo&BC(Am zN0K74XHWa@>dVdyMQ$4@nVIF?8^Z?-Qn7;NKbHS|U?+fI|K9h4$`ee83KiU-E|3W~ znG^HJj)+wCz!WNHWqhr|ye;e{N{y~i>&;-ewVKzG{0NlleXX^%n$O+cuQM4J$@E(? zjyS2@w0iqw^!Qx7O1JM>Ge7j($BMW@q{*_=q`lq*9=g*>4u^hzSavOaP>R=6vJS(H zkv*?kYpkr=w&mne(`)Xhmb<#;`)DZ#!??()w0&t*UkQPck<2GniP&gKBK2qD-@@x5 zs~AOQqI1^zo{uP~0YjMp5mx{ml!iddVnc|b9O?}V*QT>`H~~3@L=~m%>w%=FVJnp8 zijMw21OGOpD4-JH0^#?xq&Q0Y8Ul#CZp%OXVEw$xynirdvm3;V%XN`H1$W4vIMTb4 zN6I+8>A-gZ^=#XI-f+Ho^r!ExJBJI>TeAA+xPp-a3&G=si|9PCWKO&iv#_XrEGki( z<)o~%4t0Ux1^vAK<9F0P9>3~Y4w_>gM7d$B34K4Vu&!VWxuY?>H<1jq5_KvF4!`T@ zD4X!2)!2vt25SFpo6mh@4q*J%s6}s#F2#jI_Vx<~!b0Lt@Pha=>!WXW^>2P@1^q?7 z*;I@wR+J#%#RW~1(|bXGcLR;VBGiFRE`Q#6RS>wSJW__3~=(+~Uyt=eI2eh6zxhev?LX_+jL+$gA+0+bd?59fAkeViH+*%Qhh z+i};_)!g^-3W8|^l>XQPu%wRun_oKf^V|IC$*a9W~DXce_IIl0{HR!TK@d!?WCagv#RrT<=M3nSw_hq1gemP#gLe812 z{f|sO?wzL(>h+|DPQ^!Mvm{OP_K6#l$Ib!McDkde^8WuqdiL1sUIYi88I?d7C^OtU& z=#JjwZ#p}y9R}kaak;nrsrwt=BT?QEbi8kXeHOylbxQZar@@AeSr;;1e?`M%=3AiT zZM>N;+}s^k1m)D`sUkHnsFStHx~!6u;r25B@%ME^Mxp}M_6~>PG7_(=wImc-P8myG zl2oGl<`0Obw=k59lFdRB3Qk=>hRgJ6gH>72d3{90B_h^T?>Q}=BcOmpz^}DDc<0Ka z_^iq$%X0TaUY~oj^q4c)v;#{!meXnPo^`pINk!JUG?sgH_5G7S=coVkh_m?bBmLS6 zRc;ANOoqb4AkXnDT;D-j>-PmD1XQ@c(Um-KD_@+D_Dvt}qK}@v4*gk!UH$YwU6|D~ z3~3Bdch08SYh|-b;shDW?Y@m{CidnoV2P_ddXdD>{P}*w0BdSaC8%#r|JsjtHP^=v( z$=0n&&~hCU$tBkz9%9f38(&-fT2=gE^_D@F@AI>VA7CWE+_GQ~W*Mwj;pHfoMw0 zJ4cg?9~l|8e`!bVQ{3q%U<~d&|9be+KZI|6e}!Lz2M(mY$CX@sHNeg(e-_zb(Aob&yEdpYKJOv1;Tj^~k06J#)J&m1?>)8Gn?l~q-RXKnv$lC7{)sR(u+tMPo5 ze%m^~yhOliUS+q=;>D#zlsreqviievFwZ}5w}$k&#KBv?9l%g(nn~cda*f>=w|=&3 zMU)Zd@|@;F&;8->&NJ8k1fNoY3g_DRjx~LorcsNxXp0tJVd)co;MH+I__{e_hw}SR z*Zu#`zxDq;9sC3DfAnw8E+XTac|W(^MLxZ6yo3_%KiD%@w+j>a@yhV{eiosmgkW%^ z#4^J$v>L~?zIL+Zd2)BSR1{pUdhL6C%=HDZv{onMAZ=tPM9*#O=;$NsWQ)5$_F@iQ zc+!u2Ps^uM?9@`XRzA9%amK6u-+809AM%s`eZp6>`O}@qxZYPEYaVy4Kk&`2PmP}D zK&vvbY5B&IADZ9r#};M{Y8wVpQx0*;yWNyowziG}%d%vicO4%dYwq1`iH^*@1v>#@ zoJ{I7?oARq5!}9~v+nP%yK|u}Aa*Gfi&{nf%c>v#tS*h0gIfc|>F@X&%p(p+F4=kP zp6}>8hYgq3!;Tknz?vgYBWOeD?T(d35KDmqzsjz0CQy~IvfxCE4|He@tVug?EFLvx z`*Qcc)$EHtich(+J^KBJYu5P!AFh19i#$&l67{**YFPgC|NECe<-c7c5yXSsWSSW+ zrM1pdcMg8mAQ^d_%xjH%tjjCHLO}0{3xfDQ{Us#FwZx->jLZ_x-NHPC03y*adCS^< zUGtz3XsAkUDWjI{to~>HeY1Bq-sj`HopIr~@WD4q(EH^Z@;=7i@C_4hw073bJd(E! z&!w}treXjD2D6E~bo^ME3Rk$C@$tR+c&xixZH`vfDXCr;I`?Mogw_9fhOG@VewM|) zMx@YHC^b%`E#vt8MJzi~)`EM@WBih{&KjVZj4&3heK+|5dR?Y=m@eT7%V-e&z< z)qW%LO&;<({>mTx);G(x0tQ6E@+~E?m>RtD76yp;3XfMOKHqmiBS-Zof*$WmR&m!GJ4og-}K`*@{pYhPQWDyCp6(pvty9&|r7?$yYYh8`V09YkuVLmf;)uf*pKL3`V^6&a_{n#H}Es-y>l%OPW%dtVHhXfPhiWio@m2uPAO1ucVi_G*s zn{=vLsFwg?d&dv>x0iD>jy($tFcYBO4h>5NDa^!ZaU@#?MsNzKNmx#!Xb)0jHzKzu z_rBforq+~wnA`x8NM{`f`n>0vw~fUFsNs^7&0i^aqS-j&UHYD4CeYZvO)Gzv=(~S$jG# z`HWP?1&?a~kmOUa=k>bZ{^K1$;0Oh)G0{>SRi0uVH(5KCdOX6~8>Su!P9%DCdvZLG z^kN}C`5iX}KkRcPVEJ)*1A)Q-?h#k9<3^P{u6 zi}jK3esk{*q$fZT6Tj`{@(q6OADE#)Yu?mnEiH2XeNY4^RS_hn$%)AVZHKKpWnbK z^ygdG(LO!@_9AzP*VTk$GXN$3Go!|7>c!5o{M<+8#IHMVmdu3nHu>w^dw;q9?St3N zoh8E2>S3~qY$WZ4I>5@1L?SER5|hv%q-42udKRp3LaH{WFqFDRmJ(>-5K3xjsPYi9 zB}@>!ZNqk=-#^mO*nYw!0^4_M8DRIU$xGK|a4L4)(~jJICKcW7jNwO70dxpoKGA~E>3O8ML>(jxHxi7S5(XMX#zd=3D?g^S|bVI(ih+TQ^U!;za) z%3uUW{1UQGKf3r_;|b% z$Q=`Vhn|3oy_FpkN)=^-C%H*o<#jrJ(6Uz_e%aUmyy%y|X48fgCG1l{U^Qp`QupPQ zu`BNHy4Nw{!Yp~HqAU}MA*h+zeZ4vMiIjIk9oJoUV(b6h`B`uSXf0*@F7=2vBu$Y} zNMobl=+6;nf{IX|ZF;l15r)}GG%7xS?`B;*5>->5zXO!F{e_)VUjO-HUpivF zdrJSTS=$>=Przz_Ndc(y;>|6S5uZMt?J>=9LKDM86YF0(dqrkCOAnDP5PKb3dfX&T z11=P$Qm}*)89G6e{h&+s-gpgo4%La|^V^s8*|(Jk6*-$pVI8Wz;m2d^b?TZ&RYdPC zeqT*?8EK^CBa>9ICOzLB*TBN9z;z{V8Wv_9&DquPvoP2XK`4X{q{x7{O)G|;nd>T{ zLK?mh9T*m2S4LZNZHq6aU^u>|Hdro}>6*YMrdZL3H-HYExxwIvbc2j_woBpp)|%#> z!`?w;tq-B8+Tv@U`DLDqnqzlfd)MmRV@MgLPy-lI+1veSnNk8HQ7+nCMI2R6h`e^s zHUE%7{XZQ|V?~kBI-txvjwWyR_xS3L!)l-rk~n}kDDM!3Cd6oZ>m4Z$C`DP||7`Zr zBVG`(xzI>{$mw%hW}cmsdw#+86_v*F_Vez&hY4}MALFWs{yzISIAOr{R zLIlAEfu#{BtU^#uU;&j;Z<&_W9d&qfL(YuCTEzgZw0~*LJakSgWWn_y5G-uS#PqNf zG*xt}m#)4M*TWxM`tc@{mFEz6x2^EVoAIkjqy8Z1*o+igC+t0#7RbwYd8tRoQ2fx-Lqwk7xrFlG6^$wKb`RZ{~`+! zE)H}wzOr>7mZoR~ON&F{QDEi3^;S5C^rIPDvDbV9MT~;%hP(MnIm%62SFLWTj`}oi zF7N!RKk$PF)8F%k`-#}@eecRBD8e@|z|^_wl|{_%PTW@Eg{SrhsJqhPZpyYF!m#K) znMD8j?>(~P+`Z+U-9^kjzK9f;9)RUV5TltEW#PnY#z{Id%api@zWYG*H~h%&@WZp= zz4!y$x6?=DuMCb`)V`k2)_-4n1pmK> z=Z`SH?A1#=%GHrah~K5od=wjho87|QAf5Z z6P9N8??Z4e&}iYkolTTS5h5XN(cQxkRzOTvv@Fh^6r(c9fXEEvZOxBk{o}L<)+jSJ zI<+^|UAd!maF6Kkqv`pcdfikp!TLFTHEne$jVV%-R?LbkllB?JoGg{g<@us=qBM6- zuB%EPKN*PhK53$IWt(7*Ftxp}(fY}I8`4S>chP%?s$3k5OnS4R5|+R-x$gSie;c1^ zq>-zktK&ysG!L~u`V)ow{HX|yB8nxB>^OQi&qi8?Wp-NZQD>v&24-3$jU*L%WD)3M zQCS#8Ty6W4&YLk+1q2t);r_Q2(u+y!r}bIxMC%LkNq5)|9CkhNXoYtD<9`x%4{m(~~OG1``IfA++m4i8+mw zHAnH{&SQY%7qR~rH)aMJHB)7!`pXchNsYAh-vL0BF`(u09s*k7qsbchKz z3n82?3DZ(@6NAiU)M9HGRw_Wu@j_;XO~gsFop{BfIpwdVcOqkCT`1`~oIucd;|*YS zmr&u^`2a}V0$LOSf&e7~DuTkoCLs9Au$Sp~H;U5c%9s>3PDl)^`&j5%u$-C=fePJ( zLs;!DQA0LQS8#ezL4k3sN2?Mjs~7^f2pwmf`sl|!j_&2&53iFsWwPcj6%yO`>qC!& z2zQQMGBdC0+3Kx@l@9p2v1ka4v24=-mG7XH-5I%WE=A0A-Ai3GR0YM{hrlonY^^n} zy@b#xL~>$oEZ(r`jAPZPkphN_!AOyPlAquNPX@g0NjXIZlbW_9irgHd8MO=g+ws+KR z397v_5CkYy{1+Ns934hSJ0SAa9w;jz#Q(r-zN;fJ`|{z5C7n40GP z#uRqQjew?NwzzQEwM~j0xP0C}vbwi{-q73|sKfGvh|H))M05el;pcDL3}h|%^Ka?4 zT!xTe=~Xp1h1i3<^s=Jq_{aT3d#P;svx?#wJmMp9BqtutO_nZ9HjQQRPYVvciT-Kb zW_Nn8$S?{N%ebpz?h5uy_saLidy~xhdnlXULI0d7JF(QGCBEUh)x)WsSAJTh@h zBno1KY}3gYn>8Tb^NgaPj`h-!Z@b%HW6_-hpS!slxVbkiXMgv+k0s zaJLB+-ybZ1Lm5RakQf40NjrBbAUj4N7*?{1wTWjl;d-$F2df0pz~yg?(%MmLAsJr$ zl!aNKRHBXv+NJ5-`&fJ?I(#~YWxVLm{V|VsKk;`Tn-$ZugGipkwFhuY3SL{|S!>8o{>z5>Whwz@0MHVn_yey^4eRGHUHoc$cKrBeQcOJfFmTwmbT^U@w^VMJ` zYOD;7oOR_a&ehZ`lunyoqYyrsb<&paEq7PGJ1Lr(s~St;BFaq~)0G*Bf0w!0-RkPz zdyo8%#{!K6u!>qj3V;eQ5&ASk{f|x=!1Y@u!`V&3O}q3E8AB+-28ax!LAx`I_}y)A zU}_XqUXBgt{>! zX?>&aX<5S$X*##@Bxj)lm7Ww5gV`_~g&|6WKtAr%0^@bV*C?}y%q3S} zvTGNXUxXo!_Bn7V=U6U&u*Iym0H~B!{^?}qH)Fzb&~awZLO3q5)H7&_sZS0`eb(YD zRHuZi&-DiICbTZi@3zEU zcwi*_|JR+^*lDynt$9eH=|o|O6NWO7Jy^*XU{VXSuDtNJz|75>^YAiWjs#Q;LIDVs z1tcgC&Zfqf0$&jyzB^{-=5Af?ZlzvlCwMx8&5M4Ik#znatmE zGh2Ms-Al8B5BpdwGM7|e1$_CkCD*`X)-^cYe=KNQNm~Ge1-+yyu7{kR@!c&ztfG<_ zTt-i4HYQbCB;c?M2>18VPLwof8G#{2*hD5wSclxmOzXI#17L??bFw_`9Z5t+WcBi| z$_J)+chZ7D5GMu=>f8O7I-coN0u4GtSo$+-%dh+8@|9te*Fx?BgPk7C8f2xD2K&1| zW;+ijLLLP)CWSUzjrXYSBtS}@#?pn!Cb@YtJW{sK_nW`-Zpvw9CDR}r*^CXG#5R*8 z(<9_7#bgln905h9LO(FNIntD|LA8QJalb7QvKn1S*i1 z{|%05;Yu3=3e=M%%N87k5Wz}A9oD?z7yJgk@qfL`WGPB^nm6{!)Um=BJA}uxWf!%TN>25D7X8#zA;5+2jKu zX>=zcJ_M8!B@^eOt|BjK@I(r!aJUeG$2M5D8o_+ph{_^v;@0t*{GIGB2!1K zyyL>cxGL#gyyokm^Y1eF*zvcKrbzDE2$_HyB@({3dyt|G;>n3Q7vPc47-6Z%S?yuO zdF#93&{WA$+r@?&t`@h#+u}&Z2(Ns>V={e?zrp6O?8`1B5(R*`qk>9I;=m|(&1em) zeZ{dkg#lXq^@qZJLpCJ^wdwu}(3V)sPTqQNUWh`LUo6t40gQs#uCS6S#s4h!2XQ^4 zQE_hP-?U+Y4JSW=z`E{EHzOd5m?qlQb|oibOHFPZw;a747yso}M)GKQ*zs_Xw~w+8 zf{BEahF$bTaHXHf1(`-~st5FU`e4Y=qr0C`ELO_tJ+JxZi;nlNMEM^@t${9Cr`*XY z!BiF~ctfI(E8`YVl45<)FAS0Ehr&EB;YU;lDl`I?8W7=#T>J^xWU|iba3P@?SOig* zQrd&??vP5vmA`yM^<9#9x z*0Fc)$g~t5DuHrj9$CTFUaq(CQ7Zv>EsGf9;; zr3FT1RcF~;Vb?ZgG2a$j5oHi_@0u->I9d~?wRV8l@jKr?x$OCmEto~r{cs!<1AeW$ zsLW;MS9kxiS4L)Jc<@Fdou}QIn?k8T1oyv2h@1V}PnH=k$ZRPq7JBUl5$J_fmp2=U z#)&}wlJ2!Na=mOQ7lcXAVkC32v!x=K)W9U0?5doyr-knewJ5vS$1yVrute#=t zFfG`9i8{NN-*Z1%kIlQ*EVEDVD-CoBfX=k5mur2gA~IXr2X9g*xs9gXnb`!%2Xf3p z9tbIgtUe^8RK>3L%B6=aB@hV92)c$j!^&8ry^4l6$TRR5mp3rWB@b1ERv4wMG`Kve zseoz*!weH)n`yG+_)Q%65D1|(R2Qiik-Pq{bm^0axn_N!HZjTV^d#@fOnOKYLJ7c>(3`jrr4XBvbBjc|O{yO@Pl=RNKw2UZDNEc^ z=dpa!mv7yek{Rsu9%d$>v{Xv% zv|qb(kH}tZc-xoX;mq^7K)4TVixHG}GON=>>%hyga7kRER}-`+`lr(gAz8rCLjfT) zTRxYqI1q(^Wbsux5>a9SS|c*nVnhLxs1B{()Xl8D%CqNM8IZpb!)5OT@@*!D3s|&# z`J6s>9D;KD13j_FNg18y0>v;w1}03Tr=^fB4d)*Dj4jkHu@UX!K@f!gNgEeRcHtbszC z-{47v_@ZthpD4E8HU5LC=RKkbadfB*VPca)&r~-lOo8xVk4p~==jf+@F{kq`Z^1^-b0_ISj)r(bp%gB-rUL@LOj4wxTc zpo$lF%Gsx!q;V2v5aCXh)*ov&{l}~?Oh6fZQ_Qu5LvJs(co}Lb^v*}g3>E{JUM9}j z{g2fD{f-}0!pN8s4tig1_;@F(od=(n6+&1@fN%Y|zT==$iKt=X`2h>f@-dubV=f>1 z(D!DQ4(_`__W%t5R^_JFY}3TjxUBGYrCx7KQ;vymVf(A0+4|bL!LWH`_6*O{m@txD zRsM>;q=c=VUWR6x&KqcPZ8Ah5G;o8l1zc|O@ijA5^8^8wTvrCNY!f=;$d&%AG%c9$ zPWWR=TyX_QR9wMD0j#~5#}}$XLS;$a&mZ5NsbTHpiMq>;S?M;P;ybb2#o$^8M;Qz? zwncN<$Fw}fNcJudG?$^aXH)ZRiJ#JMnh+yp(cMIG)5im+*^DDZKSZ!JkXu_BCvrJ4 z`}_I_!GK!6_|&TeR)9A$H`li=+3{y*$F;lCWS)|fnnFTbrI0M4wI_|{-SjeLJb+1F zoy&k-gKkv(`NtFTR=xbJe~LQ`2ir8WWG}rJSrqOp49x~k`dk>h!sk3+J$OaW7N)6( z4CLYrgRIoX54O525Nh_PS z=)AnORL+1zHi8p^HBq1rlq9CoGf@aWF_u z5ka}-t-nlFh+%+%yePMOAIXrOEzg~{YdVI*qwy9vmh8D1ifG+g{vA08-nZO+MhXp5 zb6ocJB2Zo%azGQ1|M2mF5w!WF7Yg`B?=Bj_D%j%LCA-K?f$^%gp0RUWrC`OkQgxlJ zX3CVlYE<^3gkeP$h%>@%?8{!r2c^B5+tJjug@dm#;Lvh==$b=r(wst>ov*LLafdLE z>cBZ@HXP6h;~(CP8_b|6P;a>}FWBq$x&7f8Yf#eLyhzlCxLAa~;$BDKUf9q+L>5Fa za)kZCSE^*Q(YI;Bn$ZK|hd6TH?c4WR6zH(+{0~(6b%E zcmPxb8yaU#(#L5I-tKB6{I11~^2mT9x?!9@yg9*v}|-NviEKmYFYaH=S7 z4F@(s+CRMfEjgmmfB3**9aU|08}4fAN0vaPQV%FOzF!4vkicT7YI7DvLnX|mkpOXh zfb>=AilV}oH7V#Mx4Qb4N~U2^hs6&ZkrN_KF08EfwJ7J<0a##unI8=$mKV|T- zOuXq;tYx%C&6@dIXc=fdVcfsNy;l&a4J3_)aSBFdT5TxZDJSMO^H$YrBpg{S7RH9=}}T3DPxFcl02 zrpgBhAZtl+sq5j=#|#Uh)6TewXG2JA6w(us`-!hug0KRKDrLef$Rc=Jb9RZL6A`Eq zbZaS(E6y&Sq4RDPSjFOFp`i^N7pTfi7#6owN&_E>CAC{v@1o`Al7XnV{UK_mMPaP~ ze^F=V5M9q1yM~2>AhJlv#AhrBf=lKwsP32!kicKex*>M2qxIZn8-E>bZh@JWV*jLRSrBy$48fE zCTgn!?_UH%`lBJA@FMdehlKs&nozc~nftH^<)(-TYQXy$YN@@56Dg8R+EHHf_)9rm zK6d`kyJu636Bbfuu_&T&Tm<1NMiF+xna=`*#FeoUw-A8@S2rT{Y-$Fe5YEXuB$4z~ zW9Tjvu~u)p>O6rhj1@K+g)j_8)i?$hf)6a>>L`!^#uK%4E<{jE;iZPH3(Wk~3(&wO z#w=fXO8r(r_4~GU7&AC_zGCLsp9p=$GtTl1kUR)#7O7m0njyaRWr;+RN+3amgJj@R3czFC2_TpPEdU^Yq69z{iza#Q UW_n;tfV#tzEV2B@@}JKH0F1B~{#WNtX7@$JY#T{ZRMs=I`T0lo0WivqB-^Ue-+{>8CDi>d zhWa6qyH@`v0ROfmPo^pZ6kc3jNmPH{Jb3~tK>ytDTtkm66_m!{>(XxXhY@g8eY5lX zmKBPkzfPJGYt6{g7swd9PIafna9R!f(@+H1sz*2iKt^K-69D~g8u?5C@0oI%&y9X0 zQ~If~iD9} zL;;9?#wT}o2;H>+?oJiHyWV^5UUSm1ZCkaij5+r{-~E5wN#UnN77{wSLqsJg0fixR z_sHGd<>`HA?=>kwvTfS7avy!$wr$(CZU5$P*|zF!sCRTx`82omcPu#79mnPXbdNZ=6J6%fH}`q9 z4nHy+db+~lbHGV55f@CsY^_7)purcq=#~P2cqDP1SKmv&=zpELxbZ^Sx~pE6gFuSF zf)WJGU=l~kmdM;vr2i?m9-RTuG*Y<2uJ`wO*?e=)^2QStmWy4yGZ-I-#Kl`LQhxh2W!y}`IzK3z`()XXtW&5K*W%a zV<}i1p&)wuRm+P({}Zna>b{o3IBA7vi@_tu4PlpZgq?yX1P-?JhR zB5nbj%tuF+wN`hK=wyydCo0j-;!+~v0A#u3h{|_SqsGb(8c}Q@M zUO5w>)n8rb5q5pW>BHB(anyq~bh{gE@0<&{;>IpuOjxyxI?SrbYMVt_>-X>4>-P?b zneh8gt99&N%nAijTr7;5S871%nv0tNV!t%_a1zhb4Q@v3H8|Wth$rs%<;}V?~uLr&A(@vY=JqqzhlS=w`LMRvmd(M zm+$ZMls#M54$+^lX0CK;yGn4$6_?0-G@r=tO4n(}#7H7_MjY=P`peD{Bx{39d@OT( zx6rDpuQI%^pZ{O#x|=rx=zrY$07W14BZKd}n0nT)hc8@2dv!>;$qnzHNO_!$RFsTvHTsuas$6o6^lP{$ zEwc3I`Hn!gAbUoW8DG z!^_R%W&2ESrKL(#BBjlBo^T_Vxyt2ns*l%X%NX-zCLasI1&#?Fn&|Fq$ApePqN5Rs zSx9V{5*LOPIb$0#up|H8?B@qdKjdg3N-bHN|K)dj6`$FIA z1!eD^haC9uO+0bc9YvOiMf?l{F@=*8Xq%)Uztg%^L;eh z6yu_3L?y5l?pZlIo=**G`R?51}sdN*Gb)S!3FptrIW zN3pdm1zlO7MlA01K0t}6yfZ$qnl?mKW^uwH78da$YGDWb8;UV3Buc5nLnfwMhV?vP zA|-V#|LDgTi-w6y=rTW_k7Xy%c8hG+{0Vf&v-Mgk$(>{0^vcfKQ70O&H7uR5#9jZe z4gh#kRN%=I>dkmVm9AVdP_Zz?DNzLsiy5+^oC;Eu%y2}J>^7fyaopO9o+H^jiCUKi0TM8 z1ajh~sk?X*E-BaI)NWz5LP*WhQmJW&t2OL-fw%-Lk#PyJoa^_y=|{3th~q?@oi38^ z-^riv9cm;C)enn|FP!19!w^fEky&F} zndX290)d^{l@??q;CQUxeoR`QOA_%SMAX*A9GTH5IUQnhX_SbLdrsHAdh4gneXGQoV6Ntr~PN!u%96+F%MwB++SHRSu=|*+N@!d3^gnYsYLKPVU&Bh-YvJUKMhX>fI=B>6V|^z zwy#IAxo7J2J1rI3u)098*qp(iUJzlyZgMGhK`JimmI6+&7 zl4uG9Cj(`@8BJ(2ZrZXYi-~$S0n_wO+l{YZpWb>rNnYeD71AWE_r0Hr?K(V+SjrHS zj)A+%WKOZUGa2ViI;|`V)#Pe6;DnjtcB=8XE_?kLr7yfTySQ^eP6cX;Bo8w^i!yD> zw#8t`;njkre0A#{b7|f?_hfzR5BwA;9lM6?3EoeegMILmO^6v4cNl`U3FbhW%G9V?D<}lM2w@zd z@yWL8UZ-;7`)S3y5XnS3^rDN}L6-v)svbsD7ZzhnjCuqzFiMw28D|kayIpe&|KiiQ zXGXd4kO&Hm?qaW9STdK-eDBHgTe%=+jWUd8Mok#CDt0G$4YNitS$SR%^FqJ~LYm?` z6MVb&xi{0rV+Hi6Xqv*6n~p=pvQy0>;d?v^GBv*r5!>liW>quRtHvub?j5_{f(xaLmb3J_1^U1a`h#7{Zk+nM74sFbmyGt2ZDJMJUs2|tPOrH$j#f_aaHQq@a z-d$!cA|`;Gar17I0`}GP*NaZ#4M)&7n}8uQlUPdgh+c0yy&Y17HmOY*n4vgydP~H!2ppaN#}E zT5mTU?8d1R=UuS*=ZzM=TXyrx-?>OvTCQ=~YHg>&|HcS`6szM1N%1!*q)JVi4Ee z3a?t99VA^di#DdRN&3<{Kd&UUlsRI}Lp<9jik4Cew334Y($J>2(4&XMRfac6-XORx z>#URgj2CRjEY#D}c1OlFM*Ls&34mS9=c~sEKzG3|0|>&}9kvHkz*WtHzZ8;7xq{|R zBNN)3BJ~f&WfkFVB?+`}wcy!Elp*-~lDc}Wur!2aiPq^6MNQq*kyg!U=ect}#RvWL z2+gZWs;TQj843HXtLy*m9FzeZt-nN+_X6gkq%r2L^3idY;Mj7EA@k?OZJpN^wUpO8 zUguJ`{Pv&POa^~svRFrPY_qs&`t=$S#5pDdt#=4I-Kj!#5EoD1dn%V;|8W;Wo2Fu2 zN|9<0l`_g;hy|G)XNkX9*EjN(9%A(v<66fU>pk(Uj$nYmKwl}d*)FcP$I)1y^E3pt*rmFpN_rtu zqUgP5X)Zdbd|cwpx?XW80><_Bb{%7Nzc<%)9XA6Q=yaeH6?%y4&wn%CjYd~9-MFt6 zyB4Jv&>|zX4J`+$p4PRS((A3(^?Ehkgt57|!mhMYWb<%_+aklvyQD5x=#%pW1mf@yqLazFt?4i#NG;F6gp7TtHTevLtM2Ws!=@!d=g21guURIeUz8yE!xPIykQp03DXHM^JC! z)&t_Y_nA6C*Xfoasx{7bq`Vp9>eRAXI%Jvc)4U$MmIKIrbQ`d97)dVJj@xAgf8e01js%V3+zv}`{q8Z z3Z@jx1ySd8vC^t$aXH$a2@??>tKA_Y%%#(^^$vqiwo0g_6>IGW#l_d{LIG{XvMDY& z)o~RpWg+hw`h^SRL}ZJg@eIic*BBks0dh|dC_qRdWJ%mlF6EvPUStD{5S0yy1sBp= z`H~rAU*$Pi?Qe3XH7YG=0$iwj=FJTf&{o0(_QTD95}Trm3qo0nmGdH3lErnnUSVDx zP)KNPA^?^B=m5O|{UHG%kwV$7xXfo;IJgZDb0s4&3A3`7XcHVac2 zFvbRu3o0u`Wfk>MN7~H6z=eV#RzqO+4c%|j$?UIs_5gwHc&c6Cn3Sa;wuR!QAc`eZ z#9Bt;tw$nj4aYF+YA~Ou#Qr=3y^{jK>1E|;y}+KVYCsflRI{*@rC8fW$^x+H3E(ib zn@?C6&j6zF#+D#pk?!I8f0e*qJs;&J5_QszoKtJ5cvcA^st7knHk!^@cf?@$>uYDqc9s-^x@_-|d!0-3i+h|4>1vW~t3@n9;7F2FUt} z><7eN08;@dtq~q02<-2RT*}cDmMXES3b}|Z$W;?YSQScD&CH8cu+pGZDorPGin0|ba}XHlLAC*=0em0Y z0}nRZdqqZJIHMqE$ii&27*nXTgyph`0^}H;<)XFTJ9Y&~-q?T!Tp+2KtgzKx3uo54 zMOGX-A_`UYtSYF0XH-Epq6il3kwKG^de79D3pUQNX9>iEm7Y)qu+`k*Sv~RJW|0w* zkrt9$NwkSgb*A`BAYm1jIajdJd>`u?wNn6M#_S)1c*98hVxR&$mI|}OL1;>~XCy#S zBq#voOIQX3HQ*+)$LgM0qnH59eglLivX_hm5<{XpBocXFEDYG_FtHsAN~k&Glw<@T zq(#UAI7$%iumG7z(AXCZNcQl8+1RxND-hZ2L0Oc0jWP&Q6p1+tq!FN^J?&9RsI}VA z$JGGljSZmjU|KjSb-BX_)nk$2%B@AS;B`zFKq@HMg`hx{jOI$QkN^Q5QK?;gX*OAW z05E|VAZRqcf7H<=G$=_ex$ST~>GhX2iVPqI_{W{+Tz*Ecxl0Omn)E106{uP^w2)ws zkc2OVO+|5oMisr&a>pL8X4;`TXp2U-Q}&FE|F^ zXg~>4q)19BLrGe)5K9VF*&s!&EBK8%C2CV=ISYWBi1X9b0V+z%3 z5PrpNOebFmkONqY{W6p(DI{lelnyB*6^@aN<;M5ZU}T)Cz01a!{XjgJv;r8RB{fHz z(xxn(h3da6-F83njR4t)e(}`wGhgxYBo-Wop%XZYByk66sYD=o*9cVh{uwHZYz+Cx zzCg_&C_o_!LK#U5ayJGe>MP^tJN})QrS9}*2rdG&S4bqKwWN+%i0ZT}H@R{MIKm<|crkn_u!x-Rj#(>(b`H%#x7QaZ+WdCrJIH^2Yhd%_ zDEH)61;^(@@gABZ3$T=u(wt(J@k=`Ttkoo-XE=#gj>tlRb{EAa5yco;3%%Z{c{2l` zkNhb>FI##VpETQBy3fl-N+na75_p+640gI?0WjEJ4N2VwQL1HQ!>G|9wDC}YnCnxM3frhGk-^xs)e9d8DAGz&L!xEPkN^Wo$PQ^>z|v_LkW8Ct5|9KFz;g!- zeCMt*=v(A#0rDq3mjy%fy;R*gm*d?uNtrS;1sE`p=eZyjScezPoJKrCQA^7-IBY|p z3Z1BLO4Wk^+Q|2AJD*lrrVg)XP6m_;q>NONWnnsLC=g&{&nQS`AZcv1u}?#(VyJvO z4+iW?zWAPBKhXBDZ$53PwVY6QjsTnplO>TF821IlEapZi*j?1e8d2KnhTH^<6k}iC z&A0mRO1`;VRJHu@R%cC|<--11B!q1YP}bG$i0nhOKWMK*H&TxD66|J`Gvv!sto;C5 z$xm-nI(xikc-r0LW50H$G_L`(u%N8b7AEF(yR}@=eJKp65D|M&eJv@)@^yVU+Ds!tfChkJ=eU*^3OUB`)E?Yq+8YLG;yGw5#QEZS ztt{1iIVWhNk>YOviU7Vn_0GIp@LbMY+s8x6_9v0Z!NkSYxwN#&cQ72Ur;+5g0Bg>C z%f)x*@c&zkv<{seSGz%S&;FHBGjD6&-07__u K|5x~b#k2vrSFs2H diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp index 3f7c7e295b16cb772abfe5dd8e148ec163a38edf..40674eff5930185c4d19a84ea906fe8fb558b92c 100644 GIT binary patch literal 8112 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 literal 6174 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 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp index e5cef34d874ddc1c48ab61d08c31f2080ffe8611..6f5be441e1226e0fdee0c7e51411b7562a296d66 100644 GIT binary patch literal 16426 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 Gk^ulXqXg3c literal 5602 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 I0juce5K+2pjsO4v literal 9896 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 a2U9s%D1#|Np>Q2pNh(PyNg+ugDQswF8MBoD diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp index 90341396e3d808a9d36250e78f53934a8bedd2b0..1cf49fb6cad65c7e2a834f4c728bd8a5101bcd8d 100644 GIT binary patch literal 25246 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