From 0997e067d976c185cbf499da8df0382646b90f4f Mon Sep 17 00:00:00 2001 From: minie4 Date: Wed, 28 Aug 2024 23:04:57 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Don't=20break=20references=20whe?= =?UTF-8?q?n=20updating=20a=20port?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/main.dart | 17 ++++++++--------- lib/utils.dart | 14 ++++++++++++++ 2 files changed, 22 insertions(+), 9 deletions(-) create mode 100644 lib/utils.dart diff --git a/lib/main.dart b/lib/main.dart index fd65950..a0e4a61 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -9,6 +9,7 @@ import 'package:gomix_flutter/mixing_tab.dart'; import 'package:gomix_flutter/ports_tab.dart'; import 'package:gomix_flutter/settings_tab.dart'; import 'package:gomix_flutter/error_page.dart'; +import 'package:gomix_flutter/utils.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:web_socket_channel/web_socket_channel.dart'; @@ -97,17 +98,15 @@ class _GoMixHomeState extends State { } // Update a single port if (data["type"] == "portChange") { - int index = mixerState.inputs.indexWhere( - (element) => element.uuid == data["responseData"]["UUID"]); - int index2 = mixerState.outputs.indexWhere( - (element) => element.uuid == data["responseData"]["UUID"]); - mixer.Port newPort = mixer.Port.fromJson(data["responseData"]); setState(() { - if (index >= 0) { - mixerState.inputs[index] = newPort; - } else if (index2 >= 0) { - mixerState.outputs[index2] = newPort; + mixer.Port? affectedPort = + findPort(mixerState, data["responseData"]["UUID"]); + if (affectedPort != null) { + affectedPort.name = newPort.name; + affectedPort.state = newPort.state; + affectedPort.properties = newPort.properties; + affectedPort.route = newPort.route; } }); } diff --git a/lib/utils.dart b/lib/utils.dart new file mode 100644 index 0000000..0982f27 --- /dev/null +++ b/lib/utils.dart @@ -0,0 +1,14 @@ +import 'package:gomix_flutter/mixer_state.dart' as mixer; + +mixer.Port? findPort(mixer.MixerState mixerState, String uuid) { + int index = mixerState.inputs.indexWhere((element) => element.uuid == uuid); + if (index >= 0) { + return mixerState.inputs[index]; + } + index = mixerState.outputs.indexWhere((element) => element.uuid == uuid); + if (index >= 0) { + return mixerState.outputs[index]; + } + + return null; +}