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(
|
||||
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
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user