From 627b8c2b5d7f885f5f76c23925af579ac9a2ade4 Mon Sep 17 00:00:00 2001 From: Koen Date: Wed, 13 Dec 2023 12:36:16 +0100 Subject: [PATCH] Implemented support for automatically connecting using QR code. --- .../futo/platformplayer/casting/StateCasting.kt | 17 +++++++++++------ .../stores/CastingDeviceInfoStorage.kt | 9 +++++---- 2 files changed, 16 insertions(+), 10 deletions(-) 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 9ecb7b9d..2340e1f5 100644 --- a/app/src/main/java/com/futo/platformplayer/casting/StateCasting.kt +++ b/app/src/main/java/com/futo/platformplayer/casting/StateCasting.kt @@ -182,14 +182,14 @@ class StateCasting { val networkConfig = Json.decodeFromString(json) val tcpService = networkConfig.services.first { v -> v.type == 0 } - addRememberedDevice(CastingDeviceInfo( + val foundInfo = addRememberedDevice(CastingDeviceInfo( name = networkConfig.name, type = CastProtocolType.FCAST, addresses = networkConfig.addresses.toTypedArray(), port = tcpService.port )) - UIDialogs.toast(context,"FCast device '${networkConfig.name}' added") + connectDevice(deviceFromCastingDeviceInfo(foundInfo)) } fun onStop() { @@ -335,15 +335,20 @@ class StateCasting { Logger.i(TAG, "Connect to device ${device.name}"); } - fun addRememberedDevice(deviceInfo: CastingDeviceInfo) { + fun addRememberedDevice(deviceInfo: CastingDeviceInfo): CastingDeviceInfo { val device = deviceFromCastingDeviceInfo(deviceInfo); - addRememberedDevice(device); + return addRememberedDevice(device); } - fun addRememberedDevice(device: CastingDevice) { - if (_storage.addDevice(device.getDeviceInfo())) { + fun addRememberedDevice(device: CastingDevice): CastingDeviceInfo { + val deviceInfo = device.getDeviceInfo() + val foundInfo = _storage.addDevice(deviceInfo) + if (foundInfo == deviceInfo) { rememberedDevices.add(device); + return foundInfo; } + + return foundInfo; } fun removeRememberedDevice(device: CastingDevice) { diff --git a/app/src/main/java/com/futo/platformplayer/stores/CastingDeviceInfoStorage.kt b/app/src/main/java/com/futo/platformplayer/stores/CastingDeviceInfoStorage.kt index 40d375b2..3ecff95a 100644 --- a/app/src/main/java/com/futo/platformplayer/stores/CastingDeviceInfoStorage.kt +++ b/app/src/main/java/com/futo/platformplayer/stores/CastingDeviceInfoStorage.kt @@ -20,10 +20,11 @@ class CastingDeviceInfoStorage : FragmentedStorageFileJson() { } @Synchronized - fun addDevice(castingDeviceInfo: CastingDeviceInfo): Boolean { - if (deviceInfos.any { d -> d.name == castingDeviceInfo.name }) { + fun addDevice(castingDeviceInfo: CastingDeviceInfo): CastingDeviceInfo { + val foundDeviceInfo = deviceInfos.firstOrNull { d -> d.name == castingDeviceInfo.name } + if (foundDeviceInfo != null) { Logger.i("CastingDeviceInfoStorage", "Device '${castingDeviceInfo.name}' already existed in device storage.") - return false; + return foundDeviceInfo; } if (deviceInfos.size >= 5) { @@ -32,7 +33,7 @@ class CastingDeviceInfoStorage : FragmentedStorageFileJson() { deviceInfos.add(castingDeviceInfo); save(); - return true; + return castingDeviceInfo; } @Synchronized