Do not compute live broadcast on last message if the feature is disabled in the lab

This commit is contained in:
Florian Renaud 2023-01-30 17:24:27 +01:00
parent 66e8b5bf7a
commit 2152c1d7ba
3 changed files with 19 additions and 3 deletions

View File

@ -17,6 +17,7 @@
package im.vector.app.features.home.room.list.usecase package im.vector.app.features.home.room.list.usecase
import im.vector.app.core.di.ActiveSessionHolder import im.vector.app.core.di.ActiveSessionHolder
import im.vector.app.features.settings.VectorPreferences
import im.vector.app.features.voicebroadcast.isLive import im.vector.app.features.voicebroadcast.isLive
import im.vector.app.features.voicebroadcast.isVoiceBroadcast import im.vector.app.features.voicebroadcast.isVoiceBroadcast
import im.vector.app.features.voicebroadcast.model.asVoiceBroadcastEvent import im.vector.app.features.voicebroadcast.model.asVoiceBroadcastEvent
@ -35,14 +36,21 @@ import javax.inject.Inject
class GetLatestPreviewableEventUseCase @Inject constructor( class GetLatestPreviewableEventUseCase @Inject constructor(
private val sessionHolder: ActiveSessionHolder, private val sessionHolder: ActiveSessionHolder,
private val getRoomLiveVoiceBroadcastsUseCase: GetRoomLiveVoiceBroadcastsUseCase, private val getRoomLiveVoiceBroadcastsUseCase: GetRoomLiveVoiceBroadcastsUseCase,
private val vectorPreferences: VectorPreferences,
) { ) {
fun execute(roomId: String): TimelineEvent? { fun execute(roomId: String): TimelineEvent? {
val room = sessionHolder.getSafeActiveSession()?.getRoom(roomId) ?: return null val room = sessionHolder.getSafeActiveSession()?.getRoom(roomId) ?: return null
val roomSummary = room.roomSummary() ?: return null val roomSummary = room.roomSummary() ?: return null
return getCallEvent(roomSummary) // FIXME Observing live broadcasts results in many db requests,
// to prevent performances issues, we only enable this mechanism if the voice broadcast flag is enabled
return if (vectorPreferences.isVoiceBroadcastEnabled()) {
getCallEvent(roomSummary)
?: getLiveVoiceBroadcastEvent(room) ?: getLiveVoiceBroadcastEvent(room)
?: getDefaultLatestEvent(room, roomSummary) ?: getDefaultLatestEvent(room, roomSummary)
} else {
roomSummary.latestPreviewableEvent
}
} }
private fun getCallEvent(roomSummary: RoomSummary): TimelineEvent? { private fun getCallEvent(roomSummary: RoomSummary): TimelineEvent? {

View File

@ -23,6 +23,7 @@ import im.vector.app.features.voicebroadcast.model.asVoiceBroadcastEvent
import im.vector.app.features.voicebroadcast.usecase.GetRoomLiveVoiceBroadcastsUseCase import im.vector.app.features.voicebroadcast.usecase.GetRoomLiveVoiceBroadcastsUseCase
import im.vector.app.test.fakes.FakeActiveSessionHolder import im.vector.app.test.fakes.FakeActiveSessionHolder
import im.vector.app.test.fakes.FakeRoom import im.vector.app.test.fakes.FakeRoom
import im.vector.app.test.fakes.FakeVectorPreferences
import io.mockk.every import io.mockk.every
import io.mockk.mockk import io.mockk.mockk
import org.amshove.kluent.shouldBe import org.amshove.kluent.shouldBe
@ -46,10 +47,12 @@ internal class GetLatestPreviewableEventUseCaseTest {
private val fakeSessionHolder = FakeActiveSessionHolder() private val fakeSessionHolder = FakeActiveSessionHolder()
private val fakeRoomSummary = mockk<RoomSummary>() private val fakeRoomSummary = mockk<RoomSummary>()
private val fakeGetRoomLiveVoiceBroadcastsUseCase = mockk<GetRoomLiveVoiceBroadcastsUseCase>() private val fakeGetRoomLiveVoiceBroadcastsUseCase = mockk<GetRoomLiveVoiceBroadcastsUseCase>()
private val fakeVectorPreferences = FakeVectorPreferences()
private val getLatestPreviewableEventUseCase = GetLatestPreviewableEventUseCase( private val getLatestPreviewableEventUseCase = GetLatestPreviewableEventUseCase(
fakeSessionHolder.instance, fakeSessionHolder.instance,
fakeGetRoomLiveVoiceBroadcastsUseCase, fakeGetRoomLiveVoiceBroadcastsUseCase,
fakeVectorPreferences.instance,
) )
@Before @Before
@ -62,6 +65,7 @@ internal class GetLatestPreviewableEventUseCaseTest {
every { eventId } returns firstArg() every { eventId } returns firstArg()
} }
} }
fakeVectorPreferences.givenIsVoiceBroadcastEnabled(true)
} }
@Test @Test

View File

@ -85,4 +85,8 @@ class FakeVectorPreferences {
fun verifySetIpAddressVisibilityInDeviceManagerScreens(isVisible: Boolean) { fun verifySetIpAddressVisibilityInDeviceManagerScreens(isVisible: Boolean) {
verify { instance.setIpAddressVisibilityInDeviceManagerScreens(isVisible) } verify { instance.setIpAddressVisibilityInDeviceManagerScreens(isVisible) }
} }
fun givenIsVoiceBroadcastEnabled(isEnabled: Boolean) {
every { instance.isVoiceBroadcastEnabled() } returns isEnabled
}
} }