Merge branch 'master' of gitlab.futo.org:videostreaming/grayjay

This commit is contained in:
Kelvin 2025-05-06 13:23:10 +02:00
commit 1aa45c2156
2 changed files with 20 additions and 5 deletions

View file

@ -66,6 +66,7 @@ import java.time.OffsetDateTime
import java.time.ZoneOffset
import java.util.Base64
import java.util.Locale
import kotlin.math.min
import kotlin.system.measureTimeMillis
class StateSync {
@ -372,6 +373,9 @@ class StateSync {
if (Settings.instance.synchronization.discoverThroughRelay) {
_threadRelay = Thread {
var backoffs: Array<Long> = arrayOf(1000, 5000, 10000, 20000)
var backoffIndex = 0;
while (_started) {
try {
Log.i(TAG, "Starting relay session...")
@ -417,6 +421,8 @@ class StateSync {
},
onClose = { socketClosed = true },
onHandshakeComplete = { relaySession ->
backoffIndex = 0
Thread {
try {
while (_started && !socketClosed) {
@ -484,7 +490,7 @@ class StateSync {
} finally {
_relaySession?.stop()
_relaySession = null
Thread.sleep(5000)
Thread.sleep(backoffs[min(backoffs.size - 1, backoffIndex++)])
}
}
}.apply { start() }

View file

@ -18,6 +18,7 @@ import com.futo.platformplayer.casting.StateCasting
import com.futo.platformplayer.constructs.Event1
import com.futo.platformplayer.constructs.Event2
import androidx.core.view.isVisible
import com.futo.platformplayer.UIDialogs
class DeviceViewHolder : ViewHolder {
private val _layoutDevice: FrameLayout;
@ -55,9 +56,17 @@ class DeviceViewHolder : ViewHolder {
val connect = {
device?.let { dev ->
StateCasting.instance.activeDevice?.stopCasting();
StateCasting.instance.connectDevice(dev);
onConnect.emit(dev);
if (dev.isReady) {
StateCasting.instance.activeDevice?.stopCasting()
StateCasting.instance.connectDevice(dev)
onConnect.emit(dev)
} else {
try {
view.context?.let { UIDialogs.toast(it, "Device not ready, may be offline") }
} catch (e: Throwable) {
//Ignored
}
}
}
}
@ -84,7 +93,7 @@ class DeviceViewHolder : ViewHolder {
}
_textName.text = d.name;
_imageOnline.visibility = if (isOnlineDevice) View.VISIBLE else View.GONE
_imageOnline.visibility = if (isOnlineDevice && d.isReady) View.VISIBLE else View.GONE
if (!d.isReady) {
_imageLoader.visibility = View.GONE;