From 4437bd7d511479a3a76c2743ac5cb3e628496a64 Mon Sep 17 00:00:00 2001 From: Koen Date: Tue, 26 Sep 2023 14:43:31 +0200 Subject: [PATCH] Fixed build error due to gitVersionName being null. Fixed jmDNS crash when stop was called before start. Added check that makes volume slider only perform calls when change volume is implemented. Fixed crash in onProgress whenever the HTTP request fails. --- app/build.gradle | 2 +- .../platformplayer/casting/StateCasting.kt | 37 +++++++++++-------- .../dialogs/ConnectedCastingDialog.kt | 12 +++++- .../mainactivity/main/VideoDetailView.kt | 6 ++- 4 files changed, 38 insertions(+), 19 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 40ce21c2..d9922658 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,7 +9,7 @@ plugins { ext { gitVersionName = grgit.describe() - gitVersionCode = gitVersionName.isInteger() ? gitVersionName.toInteger() : 1 + gitVersionCode = gitVersionName != null && gitVersionName.isInteger() ? gitVersionName.toInteger() : 1 } println("Version Name: $gitVersionName") diff --git a/app/src/main/java/com/futo/platformplayer/casting/StateCasting.kt b/app/src/main/java/com/futo/platformplayer/casting/StateCasting.kt index 63b9dfe3..197232ac 100644 --- a/app/src/main/java/com/futo/platformplayer/casting/StateCasting.kt +++ b/app/src/main/java/com/futo/platformplayer/casting/StateCasting.kt @@ -29,7 +29,7 @@ import javax.jmdns.ServiceTypeListener class StateCasting { private val _scopeIO = CoroutineScope(Dispatchers.IO); private val _scopeMain = CoroutineScope(Dispatchers.Main); - private lateinit var _jmDNS: JmDNS; + private var _jmDNS: JmDNS? = null; private val _storage: CastingDeviceInfoStorage = FragmentedStorage.get(); private val _castServer = ManagedHttpServer(9999); @@ -162,14 +162,16 @@ class StateCasting { _scopeIO.launch { try { - _jmDNS = JmDNS.create(InetAddress.getLocalHost()); - _jmDNS.addServiceListener("_googlecast._tcp.local.", _chromecastServiceListener); - _jmDNS.addServiceListener("_airplay._tcp.local.", _airPlayServiceListener); - _jmDNS.addServiceListener("_fastcast._tcp.local.", _fastCastServiceListener); + val jmDNS = JmDNS.create(InetAddress.getLocalHost()); + jmDNS.addServiceListener("_googlecast._tcp.local.", _chromecastServiceListener); + jmDNS.addServiceListener("_airplay._tcp.local.", _airPlayServiceListener); + jmDNS.addServiceListener("_fastcast._tcp.local.", _fastCastServiceListener); if (BuildConfig.DEBUG) { - _jmDNS.addServiceTypeListener(_serviceTypeListener); + jmDNS.addServiceTypeListener(_serviceTypeListener); } + + _jmDNS = jmDNS; } catch (e: Throwable) { Logger.e(TAG, "Failed to start casting service.", e); } @@ -189,18 +191,21 @@ class StateCasting { Logger.i(TAG, "CastingService stopping.") - _scopeIO.launch { - try { - _jmDNS.removeServiceListener("_googlecast._tcp.local.", _chromecastServiceListener); - _jmDNS.removeServiceListener("_airplay._tcp", _airPlayServiceListener); + val jmDNS = _jmDNS; + if (jmDNS != null) { + _scopeIO.launch { + try { + jmDNS.removeServiceListener("_googlecast._tcp.local.", _chromecastServiceListener); + jmDNS.removeServiceListener("_airplay._tcp", _airPlayServiceListener); - if (BuildConfig.DEBUG) { - _jmDNS.removeServiceTypeListener(_serviceTypeListener); + if (BuildConfig.DEBUG) { + jmDNS.removeServiceTypeListener(_serviceTypeListener); + } + + jmDNS.close(); + } catch (e: Throwable) { + Logger.e(TAG, "Failed to stop mDNS.", e); } - - _jmDNS.close(); - } catch (e: Throwable) { - Logger.e(TAG, "Failed to stop mDNS.", e); } } diff --git a/app/src/main/java/com/futo/platformplayer/dialogs/ConnectedCastingDialog.kt b/app/src/main/java/com/futo/platformplayer/dialogs/ConnectedCastingDialog.kt index 878a14d9..612c7a8c 100644 --- a/app/src/main/java/com/futo/platformplayer/dialogs/ConnectedCastingDialog.kt +++ b/app/src/main/java/com/futo/platformplayer/dialogs/ConnectedCastingDialog.kt @@ -53,7 +53,17 @@ class ConnectedCastingDialog(context: Context?) : AlertDialog(context) { dismiss(); }; - _sliderVolume.addOnChangeListener(OnChangeListener { _, value, _ -> StateCasting.instance.activeDevice?.changeVolume(value.toDouble()); }); + //TODO: Check if volume slider is properly hidden in all cases + _sliderVolume.addOnChangeListener(OnChangeListener { _, value, _ -> + val activeDevice = StateCasting.instance.activeDevice ?: return@OnChangeListener; + if (activeDevice.canSetVolume) { + try { + activeDevice.changeVolume(value.toDouble()); + } catch (e: Throwable) { + Logger.e(TAG, "Failed to change volume.", e); + } + } + }); setLoading(false); updateDevice(); diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt index 0a72510c..031d98f3 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt @@ -1869,7 +1869,11 @@ class VideoDetailView : ConstraintLayout { } fragment.lifecycleScope.launch(Dispatchers.IO) { - playbackTracker.onProgress(positionMs.toDouble() / 1000, isPlaying); + try { + playbackTracker.onProgress(positionMs.toDouble() / 1000, isPlaying); + } catch (e: Throwable) { + Logger.e(TAG, "Failed to notify progress.", e); + } } }