Merge branch 'marcus/exp-casting-device-pinning-fix' into 'master'

casting(experimental): ignore devices that are unsupported or fails to parse

See merge request videostreaming/grayjay!150
This commit is contained in:
Koen
2025-10-14 07:10:45 +00:00
3 changed files with 28 additions and 21 deletions
@@ -90,8 +90,7 @@ abstract class StateCasting {
abstract fun start(context: Context)
abstract fun stop()
@Throws
abstract fun deviceFromInfo(deviceInfo: CastingDeviceInfo): CastingDevice
abstract fun deviceFromInfo(deviceInfo: CastingDeviceInfo): CastingDevice?
abstract fun startUpdateTimeJob(
onTimeJobTimeChanged_s: Event1<Long>, setTime: (Long) -> Unit
): Job?
@@ -1288,9 +1287,11 @@ abstract class StateCasting {
return listOf()
}
fun addRememberedDevice(deviceInfo: CastingDeviceInfo): CastingDeviceInfo {
val device = deviceFromInfo(deviceInfo);
return addRememberedDevice(device);
fun addRememberedDevice(deviceInfo: CastingDeviceInfo): CastingDeviceInfo? {
return when (val device = deviceFromInfo(deviceInfo)) {
null -> null
else -> addRememberedDevice(device)
}
}
fun addRememberedDevice(device: CastingDevice): CastingDeviceInfo {
@@ -1299,7 +1300,7 @@ abstract class StateCasting {
}
fun getRememberedCastingDevices(): List<CastingDevice> {
return _storage.getDevices().map { deviceFromInfo(it) }
return _storage.getDevices().map { deviceFromInfo(it) }.filterNotNull()
}
fun getRememberedCastingDeviceNames(): List<String> {
@@ -151,21 +151,25 @@ class StateCastingExp : StateCasting() {
setTime: (Long) -> Unit
): Job? = null
override fun deviceFromInfo(deviceInfo: CastingDeviceInfo): CastingDeviceExp {
val rsAddrs =
deviceInfo.addresses.map { org.fcast.sender_sdk.tryIpAddrFromStr(it) } // Throws!
val rsDeviceInfo = RsDeviceInfo(
name = deviceInfo.name,
protocol = when (deviceInfo.type) {
com.futo.platformplayer.casting.CastProtocolType.CHROMECAST -> ProtocolType.CHROMECAST
com.futo.platformplayer.casting.CastProtocolType.FCAST -> ProtocolType.F_CAST
else -> throw IllegalArgumentException()
},
addresses = rsAddrs,
port = deviceInfo.port.toUShort(),
)
override fun deviceFromInfo(deviceInfo: CastingDeviceInfo): CastingDeviceExp? {
try {
val rsAddrs =
deviceInfo.addresses.map { org.fcast.sender_sdk.tryIpAddrFromStr(it) }
val rsDeviceInfo = RsDeviceInfo(
name = deviceInfo.name,
protocol = when (deviceInfo.type) {
com.futo.platformplayer.casting.CastProtocolType.CHROMECAST -> ProtocolType.CHROMECAST
com.futo.platformplayer.casting.CastProtocolType.FCAST -> ProtocolType.F_CAST
else -> throw IllegalArgumentException()
},
addresses = rsAddrs,
port = deviceInfo.port.toUShort(),
)
return CastingDeviceExp(_context.createDeviceFromInfo(rsDeviceInfo))
return CastingDeviceExp(_context.createDeviceFromInfo(rsDeviceInfo))
} catch (_: Throwable) {
return null
}
}
companion object {
@@ -55,7 +55,9 @@ class StateCastingLegacy : StateCasting() {
)
)
connectDevice(deviceFromInfo(foundInfo))
if (foundInfo != null) {
connectDevice(deviceFromInfo(foundInfo))
}
}
override fun onStop() {