mirror of
https://github.com/bbara04/Purefin.git
synced 2026-07-23 19:26:50 +00:00
PlaybackProfilePolicy should not require server version
This commit is contained in:
@@ -74,7 +74,6 @@ internal object JellyfinAndroidTvDeviceProfile {
|
|||||||
|
|
||||||
fun create(
|
fun create(
|
||||||
capabilities: DeviceProfileCapabilities,
|
capabilities: DeviceProfileCapabilities,
|
||||||
serverVersion: ServerVersion,
|
|
||||||
config: JellyfinAndroidTvProfileConfig = fixedConfig,
|
config: JellyfinAndroidTvProfileConfig = fixedConfig,
|
||||||
): DeviceProfile = buildDeviceProfile {
|
): DeviceProfile = buildDeviceProfile {
|
||||||
val allowedAudioCodecs = when {
|
val allowedAudioCodecs = when {
|
||||||
@@ -108,7 +107,7 @@ internal object JellyfinAndroidTvDeviceProfile {
|
|||||||
val supportsHevcDolbyVisionEl = capabilities.supportsHevcDolbyVisionEl()
|
val supportsHevcDolbyVisionEl = capabilities.supportsHevcDolbyVisionEl()
|
||||||
val supportsHevcHdr10 = capabilities.supportsHevcHdr10()
|
val supportsHevcHdr10 = capabilities.supportsHevcHdr10()
|
||||||
val supportsHevcHdr10Plus = capabilities.supportsHevcHdr10Plus()
|
val supportsHevcHdr10Plus = capabilities.supportsHevcHdr10Plus()
|
||||||
val supportsExtendedRangeTypes = serverVersion >= extendedRangeTypesServerVersion
|
val supportsExtendedRangeTypes = true
|
||||||
|
|
||||||
name = "AndroidTV-Default"
|
name = "AndroidTV-Default"
|
||||||
maxStaticBitrate = config.maxBitrate
|
maxStaticBitrate = config.maxBitrate
|
||||||
|
|||||||
@@ -5,10 +5,8 @@ import hu.bbara.purefin.data.jellyfin.client.JellyfinApiClient
|
|||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.flow.first
|
import kotlinx.coroutines.flow.first
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import org.jellyfin.sdk.model.ServerVersion
|
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
import java.util.concurrent.ConcurrentHashMap
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
@@ -18,7 +16,6 @@ class JellyfinPlaybackResolver @Inject constructor(
|
|||||||
private val userSessionRepository: UserSessionRepository,
|
private val userSessionRepository: UserSessionRepository,
|
||||||
private val playbackProfilePolicy: PlaybackProfilePolicy,
|
private val playbackProfilePolicy: PlaybackProfilePolicy,
|
||||||
) {
|
) {
|
||||||
private val serverVersionCache = ConcurrentHashMap<String, ServerVersion>()
|
|
||||||
|
|
||||||
suspend fun getPlaybackDecision(mediaId: UUID): PlaybackDecision? = withContext(Dispatchers.IO) {
|
suspend fun getPlaybackDecision(mediaId: UUID): PlaybackDecision? = withContext(Dispatchers.IO) {
|
||||||
val serverUrl = userSessionRepository.serverUrl.first().trim()
|
val serverUrl = userSessionRepository.serverUrl.first().trim()
|
||||||
@@ -26,10 +23,9 @@ class JellyfinPlaybackResolver @Inject constructor(
|
|||||||
return@withContext null
|
return@withContext null
|
||||||
}
|
}
|
||||||
|
|
||||||
val serverVersion = getServerVersion(serverUrl)
|
|
||||||
val playbackInfo = jellyfinApiClient.getPlaybackInfo(
|
val playbackInfo = jellyfinApiClient.getPlaybackInfo(
|
||||||
mediaId = mediaId,
|
mediaId = mediaId,
|
||||||
deviceProfile = playbackProfilePolicy.create(serverVersion),
|
deviceProfile = playbackProfilePolicy.create(),
|
||||||
) ?: return@withContext null
|
) ?: return@withContext null
|
||||||
|
|
||||||
if (playbackInfo.errorCode != null) {
|
if (playbackInfo.errorCode != null) {
|
||||||
@@ -60,19 +56,6 @@ class JellyfinPlaybackResolver @Inject constructor(
|
|||||||
decision
|
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 companion object {
|
||||||
private const val TAG = "PlaybackResolver"
|
private const val TAG = "PlaybackResolver"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,29 +1,23 @@
|
|||||||
package hu.bbara.purefin.data.jellyfin.playback
|
package hu.bbara.purefin.data.jellyfin.playback
|
||||||
|
|
||||||
import org.jellyfin.sdk.model.ServerVersion
|
|
||||||
import org.jellyfin.sdk.model.api.DeviceProfile
|
import org.jellyfin.sdk.model.api.DeviceProfile
|
||||||
|
|
||||||
interface PlaybackProfilePolicy {
|
interface PlaybackProfilePolicy {
|
||||||
fun create(serverVersion: ServerVersion): DeviceProfile
|
fun create(): DeviceProfile
|
||||||
}
|
|
||||||
|
|
||||||
internal object PlaybackProfileDefaults {
|
|
||||||
val fallbackServerVersion = ServerVersion(10, 10, 0)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class MobilePlaybackProfilePolicy(
|
internal class MobilePlaybackProfilePolicy(
|
||||||
private val capabilities: DeviceProfileCapabilities,
|
private val capabilities: DeviceProfileCapabilities,
|
||||||
) : PlaybackProfilePolicy {
|
) : PlaybackProfilePolicy {
|
||||||
override fun create(serverVersion: ServerVersion): DeviceProfile =
|
override fun create(): DeviceProfile =
|
||||||
JellyfinAndroidMobileDeviceProfile.create(capabilities = capabilities)
|
JellyfinAndroidMobileDeviceProfile.create(capabilities = capabilities)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class TvPlaybackProfilePolicy(
|
internal class TvPlaybackProfilePolicy(
|
||||||
private val capabilities: DeviceProfileCapabilities,
|
private val capabilities: DeviceProfileCapabilities,
|
||||||
) : PlaybackProfilePolicy {
|
) : PlaybackProfilePolicy {
|
||||||
override fun create(serverVersion: ServerVersion): DeviceProfile =
|
override fun create(): DeviceProfile =
|
||||||
JellyfinAndroidTvDeviceProfile.create(
|
JellyfinAndroidTvDeviceProfile.create(
|
||||||
capabilities = capabilities,
|
capabilities = capabilities
|
||||||
serverVersion = serverVersion,
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user