Implemented support for automatically connecting using QR code.

This commit is contained in:
Koen 2023-12-13 12:36:16 +01:00
commit 627b8c2b5d
2 changed files with 16 additions and 10 deletions

View file

@ -182,14 +182,14 @@ class StateCasting {
val networkConfig = Json.decodeFromString<FCastNetworkConfig>(json) val networkConfig = Json.decodeFromString<FCastNetworkConfig>(json)
val tcpService = networkConfig.services.first { v -> v.type == 0 } val tcpService = networkConfig.services.first { v -> v.type == 0 }
addRememberedDevice(CastingDeviceInfo( val foundInfo = addRememberedDevice(CastingDeviceInfo(
name = networkConfig.name, name = networkConfig.name,
type = CastProtocolType.FCAST, type = CastProtocolType.FCAST,
addresses = networkConfig.addresses.toTypedArray(), addresses = networkConfig.addresses.toTypedArray(),
port = tcpService.port port = tcpService.port
)) ))
UIDialogs.toast(context,"FCast device '${networkConfig.name}' added") connectDevice(deviceFromCastingDeviceInfo(foundInfo))
} }
fun onStop() { fun onStop() {
@ -335,15 +335,20 @@ class StateCasting {
Logger.i(TAG, "Connect to device ${device.name}"); Logger.i(TAG, "Connect to device ${device.name}");
} }
fun addRememberedDevice(deviceInfo: CastingDeviceInfo) { fun addRememberedDevice(deviceInfo: CastingDeviceInfo): CastingDeviceInfo {
val device = deviceFromCastingDeviceInfo(deviceInfo); val device = deviceFromCastingDeviceInfo(deviceInfo);
addRememberedDevice(device); return addRememberedDevice(device);
} }
fun addRememberedDevice(device: CastingDevice) { fun addRememberedDevice(device: CastingDevice): CastingDeviceInfo {
if (_storage.addDevice(device.getDeviceInfo())) { val deviceInfo = device.getDeviceInfo()
val foundInfo = _storage.addDevice(deviceInfo)
if (foundInfo == deviceInfo) {
rememberedDevices.add(device); rememberedDevices.add(device);
return foundInfo;
} }
return foundInfo;
} }
fun removeRememberedDevice(device: CastingDevice) { fun removeRememberedDevice(device: CastingDevice) {

View file

@ -20,10 +20,11 @@ class CastingDeviceInfoStorage : FragmentedStorageFileJson() {
} }
@Synchronized @Synchronized
fun addDevice(castingDeviceInfo: CastingDeviceInfo): Boolean { fun addDevice(castingDeviceInfo: CastingDeviceInfo): CastingDeviceInfo {
if (deviceInfos.any { d -> d.name == castingDeviceInfo.name }) { val foundDeviceInfo = deviceInfos.firstOrNull { d -> d.name == castingDeviceInfo.name }
if (foundDeviceInfo != null) {
Logger.i("CastingDeviceInfoStorage", "Device '${castingDeviceInfo.name}' already existed in device storage.") Logger.i("CastingDeviceInfoStorage", "Device '${castingDeviceInfo.name}' already existed in device storage.")
return false; return foundDeviceInfo;
} }
if (deviceInfos.size >= 5) { if (deviceInfos.size >= 5) {
@ -32,7 +33,7 @@ class CastingDeviceInfoStorage : FragmentedStorageFileJson() {
deviceInfos.add(castingDeviceInfo); deviceInfos.add(castingDeviceInfo);
save(); save();
return true; return castingDeviceInfo;
} }
@Synchronized @Synchronized