PlaybackProfilePolicy should not require server version

This commit is contained in:
2026-06-01 20:06:05 +02:00
parent b1b154800c
commit 0eea3165de
3 changed files with 6 additions and 30 deletions

View File

@@ -74,7 +74,6 @@ internal object JellyfinAndroidTvDeviceProfile {
fun create(
capabilities: DeviceProfileCapabilities,
serverVersion: ServerVersion,
config: JellyfinAndroidTvProfileConfig = fixedConfig,
): DeviceProfile = buildDeviceProfile {
val allowedAudioCodecs = when {
@@ -108,7 +107,7 @@ internal object JellyfinAndroidTvDeviceProfile {
val supportsHevcDolbyVisionEl = capabilities.supportsHevcDolbyVisionEl()
val supportsHevcHdr10 = capabilities.supportsHevcHdr10()
val supportsHevcHdr10Plus = capabilities.supportsHevcHdr10Plus()
val supportsExtendedRangeTypes = serverVersion >= extendedRangeTypesServerVersion
val supportsExtendedRangeTypes = true
name = "AndroidTV-Default"
maxStaticBitrate = config.maxBitrate

View File

@@ -5,10 +5,8 @@ import hu.bbara.purefin.data.jellyfin.client.JellyfinApiClient
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.withContext
import org.jellyfin.sdk.model.ServerVersion
import timber.log.Timber
import java.util.UUID
import java.util.concurrent.ConcurrentHashMap
import javax.inject.Inject
import javax.inject.Singleton
@@ -18,7 +16,6 @@ class JellyfinPlaybackResolver @Inject constructor(
private val userSessionRepository: UserSessionRepository,
private val playbackProfilePolicy: PlaybackProfilePolicy,
) {
private val serverVersionCache = ConcurrentHashMap<String, ServerVersion>()
suspend fun getPlaybackDecision(mediaId: UUID): PlaybackDecision? = withContext(Dispatchers.IO) {
val serverUrl = userSessionRepository.serverUrl.first().trim()
@@ -26,10 +23,9 @@ class JellyfinPlaybackResolver @Inject constructor(
return@withContext null
}
val serverVersion = getServerVersion(serverUrl)
val playbackInfo = jellyfinApiClient.getPlaybackInfo(
mediaId = mediaId,
deviceProfile = playbackProfilePolicy.create(serverVersion),
deviceProfile = playbackProfilePolicy.create(),
) ?: return@withContext null
if (playbackInfo.errorCode != null) {
@@ -60,19 +56,6 @@ class JellyfinPlaybackResolver @Inject constructor(
decision
}
private suspend fun getServerVersion(serverUrl: String): ServerVersion {
serverVersionCache[serverUrl]?.let { return it }
val resolvedVersion = runCatching {
jellyfinApiClient.getPublicSystemInfoVersion()?.let(ServerVersion::fromString)
}.onFailure { error ->
Timber.tag(TAG).w(error, "Unable to fetch server version for $serverUrl")
}.getOrNull() ?: PlaybackProfileDefaults.fallbackServerVersion
serverVersionCache[serverUrl] = resolvedVersion
return resolvedVersion
}
private companion object {
private const val TAG = "PlaybackResolver"
}

View File

@@ -1,29 +1,23 @@
package hu.bbara.purefin.data.jellyfin.playback
import org.jellyfin.sdk.model.ServerVersion
import org.jellyfin.sdk.model.api.DeviceProfile
interface PlaybackProfilePolicy {
fun create(serverVersion: ServerVersion): DeviceProfile
}
internal object PlaybackProfileDefaults {
val fallbackServerVersion = ServerVersion(10, 10, 0)
fun create(): DeviceProfile
}
internal class MobilePlaybackProfilePolicy(
private val capabilities: DeviceProfileCapabilities,
) : PlaybackProfilePolicy {
override fun create(serverVersion: ServerVersion): DeviceProfile =
override fun create(): DeviceProfile =
JellyfinAndroidMobileDeviceProfile.create(capabilities = capabilities)
}
internal class TvPlaybackProfilePolicy(
private val capabilities: DeviceProfileCapabilities,
) : PlaybackProfilePolicy {
override fun create(serverVersion: ServerVersion): DeviceProfile =
override fun create(): DeviceProfile =
JellyfinAndroidTvDeviceProfile.create(
capabilities = capabilities,
serverVersion = serverVersion,
capabilities = capabilities
)
}