@@ -28,6 +28,7 @@ import im.vector.app.features.voicebroadcast.model.VoiceBroadcastState
28
28
import im.vector.app.features.voicebroadcast.recording.VoiceBroadcastRecorder
29
29
import im.vector.app.features.voicebroadcast.usecase.GetOngoingVoiceBroadcastsUseCase
30
30
import im.vector.lib.multipicker.utils.toMultiPickerAudioType
31
+ import org.jetbrains.annotations.VisibleForTesting
31
32
import org.matrix.android.sdk.api.query.QueryStringValue
32
33
import org.matrix.android.sdk.api.session.Session
33
34
import org.matrix.android.sdk.api.session.events.model.EventType
@@ -57,28 +58,8 @@ class StartVoiceBroadcastUseCase @Inject constructor(
57
58
58
59
Timber .d(" ## StartVoiceBroadcastUseCase: Start voice broadcast requested" )
59
60
60
- val powerLevelsHelper = room.getStateEvent(EventType .STATE_ROOM_POWER_LEVELS , QueryStringValue .IsEmpty )
61
- ?.content
62
- ?.toModel<PowerLevelsContent >()
63
- ?.let { PowerLevelsHelper (it) }
64
-
65
- when {
66
- powerLevelsHelper?.isUserAllowedToSend(session.myUserId, true , VoiceBroadcastConstants .STATE_ROOM_VOICE_BROADCAST_INFO ) != true -> {
67
- Timber .d(" ## StartVoiceBroadcastUseCase: Cannot start voice broadcast: no permission" )
68
- throw VoiceBroadcastFailure .RecordingError .NoPermission
69
- }
70
- voiceBroadcastRecorder?.state == VoiceBroadcastRecorder .State .Recording || voiceBroadcastRecorder?.state == VoiceBroadcastRecorder .State .Paused -> {
71
- Timber .d(" ## StartVoiceBroadcastUseCase: Cannot start voice broadcast: another voice broadcast" )
72
- throw VoiceBroadcastFailure .RecordingError .UserAlreadyBroadcasting
73
- }
74
- getOngoingVoiceBroadcastsUseCase.execute(roomId).isNotEmpty() -> {
75
- Timber .d(" ## StartVoiceBroadcastUseCase: Cannot start voice broadcast: user already broadcasting" )
76
- throw VoiceBroadcastFailure .RecordingError .BlockedBySomeoneElse
77
- }
78
- else -> {
79
- startVoiceBroadcast(room)
80
- }
81
- }
61
+ assertCanStartVoiceBroadcast(room)
62
+ startVoiceBroadcast(room)
82
63
}
83
64
84
65
private suspend fun startVoiceBroadcast (room : Room ) {
@@ -124,4 +105,36 @@ class StartVoiceBroadcastUseCase @Inject constructor(
124
105
)
125
106
)
126
107
}
108
+
109
+ private fun assertCanStartVoiceBroadcast (room : Room ) {
110
+ assertHasEnoughPowerLevels(room)
111
+ assertNoOngoingVoiceBroadcast(room)
112
+ }
113
+
114
+ @VisibleForTesting
115
+ fun assertHasEnoughPowerLevels (room : Room ) {
116
+ val powerLevelsHelper = room.getStateEvent(EventType .STATE_ROOM_POWER_LEVELS , QueryStringValue .IsEmpty )
117
+ ?.content
118
+ ?.toModel<PowerLevelsContent >()
119
+ ?.let { PowerLevelsHelper (it) }
120
+
121
+ if (powerLevelsHelper?.isUserAllowedToSend(session.myUserId, true , VoiceBroadcastConstants .STATE_ROOM_VOICE_BROADCAST_INFO ) != true ) {
122
+ Timber .d(" ## StartVoiceBroadcastUseCase: Cannot start voice broadcast: no permission" )
123
+ throw VoiceBroadcastFailure .RecordingError .NoPermission
124
+ }
125
+ }
126
+
127
+ @VisibleForTesting
128
+ fun assertNoOngoingVoiceBroadcast (room : Room ) {
129
+ when {
130
+ voiceBroadcastRecorder?.state == VoiceBroadcastRecorder .State .Recording || voiceBroadcastRecorder?.state == VoiceBroadcastRecorder .State .Paused -> {
131
+ Timber .d(" ## StartVoiceBroadcastUseCase: Cannot start voice broadcast: another voice broadcast" )
132
+ throw VoiceBroadcastFailure .RecordingError .UserAlreadyBroadcasting
133
+ }
134
+ getOngoingVoiceBroadcastsUseCase.execute(room.roomId).isNotEmpty() -> {
135
+ Timber .d(" ## StartVoiceBroadcastUseCase: Cannot start voice broadcast: user already broadcasting" )
136
+ throw VoiceBroadcastFailure .RecordingError .BlockedBySomeoneElse
137
+ }
138
+ }
139
+ }
127
140
}
0 commit comments