From ad60e75d85d5b701a1309b903c541a5247ebd897 Mon Sep 17 00:00:00 2001 From: Niels van Velzen Date: Wed, 6 Jul 2022 11:32:37 +0200 Subject: [PATCH] Fix BrandingOptions for servers using JF < 10.8.1 --- .../auth/repository/ServerRepository.kt | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/jellyfin/androidtv/auth/repository/ServerRepository.kt b/app/src/main/java/org/jellyfin/androidtv/auth/repository/ServerRepository.kt index f545b0138a..163a47b317 100644 --- a/app/src/main/java/org/jellyfin/androidtv/auth/repository/ServerRepository.kt +++ b/app/src/main/java/org/jellyfin/androidtv/auth/repository/ServerRepository.kt @@ -16,11 +16,14 @@ import org.jellyfin.androidtv.auth.model.UnableToConnectState import org.jellyfin.androidtv.auth.store.AuthenticationStore import org.jellyfin.androidtv.util.sdk.toServer import org.jellyfin.sdk.Jellyfin +import org.jellyfin.sdk.api.client.ApiClient import org.jellyfin.sdk.api.client.exception.ApiClientException +import org.jellyfin.sdk.api.client.exception.InvalidContentException import org.jellyfin.sdk.api.client.extensions.brandingApi import org.jellyfin.sdk.api.client.extensions.systemApi import org.jellyfin.sdk.discovery.RecommendedServerInfo import org.jellyfin.sdk.discovery.RecommendedServerInfoScore +import org.jellyfin.sdk.model.api.BrandingOptions import org.jellyfin.sdk.model.api.ServerDiscoveryInfo import org.jellyfin.sdk.model.serializer.toUUID import timber.log.Timber @@ -119,8 +122,8 @@ class ServerRepositoryImpl( val systemInfo = chosenRecommendation.systemInfo.getOrThrow() // Get branding info - val api = jellyfin.createApi(chosenRecommendation.address).brandingApi - val branding by api.getBrandingOptions() + val api = jellyfin.createApi(chosenRecommendation.address) + val branding = api.getBrandingOptionsOrDefault() val id = systemInfo.id!!.toUUID() @@ -161,7 +164,7 @@ class ServerRepositoryImpl( return try { val api = jellyfin.createApi(server.address) // Get login disclaimer - val branding by api.brandingApi.getBrandingOptions() + val branding = api.getBrandingOptionsOrDefault() val systemInfo by api.systemApi.getPublicSystemInfo() authenticationStore.putServer(server.id, serverInfo.copy( @@ -192,4 +195,19 @@ class ServerRepositoryImpl( loginDisclaimer = loginDisclaimer, dateLastAccessed = Date(lastUsed), ) + + /** + * Try to retrieve the branding options. If the response JSON is invalid it will return a default value. + * This makes sure we can still work with older Jellyfin versions. + */ + private suspend fun ApiClient.getBrandingOptionsOrDefault() = try { + brandingApi.getBrandingOptions().content + } catch (exception: InvalidContentException) { + Timber.w(exception, "Invalid branding options response, using default value") + BrandingOptions( + loginDisclaimer = null, + customCss = null, + splashscreenEnabled = false, + ) + } }