From 6bc2ecd9f637046ebe219732554e8a62b98ea07f Mon Sep 17 00:00:00 2001
From: graduad <107927859+graduad@users.noreply.github.com>
Date: Tue, 12 Sep 2023 09:53:54 +0200
Subject: [PATCH] Add ListenType enum (#293)
Also adding ui for joining as a streaming listener
---
example/src/screens/JoinScreen/JoinScreen.tsx | 20 ++++++++---
ios/Services/Models/ListenTypeExtension.swift | 34 +++++++++++++++++++
.../Models/VTListenOptionsExtension.swift | 5 +--
3 files changed, 52 insertions(+), 7 deletions(-)
create mode 100644 ios/Services/Models/ListenTypeExtension.swift
diff --git a/example/src/screens/JoinScreen/JoinScreen.tsx b/example/src/screens/JoinScreen/JoinScreen.tsx
index 4f2f41c9..0531846c 100644
--- a/example/src/screens/JoinScreen/JoinScreen.tsx
+++ b/example/src/screens/JoinScreen/JoinScreen.tsx
@@ -13,7 +13,7 @@ import Space from '@ui/Space';
import Text from '@ui/Text';
import styles from './JoinScreen.style';
-import { SpatialAudioStyle } from '@dolbyio/comms-sdk-react-native/models';
+import { ListenType, SpatialAudioStyle } from '@dolbyio/comms-sdk-react-native/models';
import { View } from 'react-native';
import { MenuOptionsButton, type Options } from '@ui/MenuOptionsButton/MenuOptionsButton';
import ExtendedOptions from '@ui/ExtendedOptions';
@@ -36,8 +36,12 @@ const JoinScreen: FunctionComponent = () => {
await createAndJoin(alias, { dolbyVoice: isDolbyVoice, liveRecording: isLiveRecording, spatialAudioStyle: spatialAudioStyle });
}
- const listenConference = () => {
- listen(alias);
+ const joinAsRegularListener = () => {
+ listen(alias, ListenType.REGULAR);
+ };
+
+ const joinAsStreamingListener = () => {
+ listen(alias, ListenType.MIXED);
};
const replayLastConference = () => {
@@ -133,8 +137,14 @@ const JoinScreen: FunctionComponent = () => {
+
+
+
diff --git a/ios/Services/Models/ListenTypeExtension.swift b/ios/Services/Models/ListenTypeExtension.swift
new file mode 100644
index 00000000..47e7a783
--- /dev/null
+++ b/ios/Services/Models/ListenTypeExtension.swift
@@ -0,0 +1,34 @@
+import Foundation
+import VoxeetSDK
+
+// MARK: - ReactModelValueMappable
+extension ListenType: ReactModelValueMappable {
+
+ typealias ReactModelValueType = String?
+
+ static func create(with value: String?) -> ListenType? {
+ guard let value = value else {
+ return nil
+ }
+ switch value {
+ case "MIXED":
+ return .mixed
+ case "REGULAR":
+ return .regular
+ default:
+ return nil
+ }
+ }
+
+ func toReactModelValue() -> ReactModelValueType {
+ switch self {
+ case .mixed:
+ return "MIXED"
+ case .regular:
+ return "REGULAR"
+ @unknown default:
+ return nil
+ }
+ }
+}
+
diff --git a/ios/Services/Models/VTListenOptionsExtension.swift b/ios/Services/Models/VTListenOptionsExtension.swift
index b1739f77..618dbcb0 100644
--- a/ios/Services/Models/VTListenOptionsExtension.swift
+++ b/ios/Services/Models/VTListenOptionsExtension.swift
@@ -15,7 +15,8 @@ internal extension VTListenOptions {
listenOptions.spatialAudio = spatialAudio?.boolValue ?? false
let strategy: String? = dictionary.value(for: Keys.videoForwardingStrategy)
listenOptions.videoForwardingStrategy = VideoForwardingStrategy.fromReactModel(value: strategy)
-
+ let listenType: String? = dictionary.value(for: Keys.listenType)
+ listenOptions.type = ListenType.create(with: listenType) ?? .regular
return listenOptions
}
}
@@ -34,5 +35,5 @@ extension VTListenOptions: ReactModelMappable {
// MARK: - ReactModel Keys
private enum Keys: String {
- case maxVideoForwarding, conferenceAccessToken, spatialAudio, videoForwardingStrategy
+ case maxVideoForwarding, conferenceAccessToken, spatialAudio, videoForwardingStrategy, listenType
}