diff --git a/app/src/main/java/com/jerubrin/tallyflash/data/VMixRepositoryImpl.kt b/app/src/main/java/com/jerubrin/tallyflash/data/VMixRepositoryImpl.kt index 0ed1350..743318a 100644 --- a/app/src/main/java/com/jerubrin/tallyflash/data/VMixRepositoryImpl.kt +++ b/app/src/main/java/com/jerubrin/tallyflash/data/VMixRepositoryImpl.kt @@ -1,5 +1,6 @@ package com.jerubrin.tallyflash.data +import com.jerubrin.tallyflash.data.retrofit.MainOverlay import com.jerubrin.tallyflash.entity.Scene import com.jerubrin.tallyflash.entity.WorkingScenes import com.jerubrin.tallyflash.data.retrofit.VMixApi @@ -19,18 +20,29 @@ class VMixRepositoryImpl @Inject constructor( withContext(Dispatchers.IO) { vMixApi.renewRetrofit(connectionData) } - return vMixApi.getData()?.inputs?.map { - Scene( - it.key, - it.number, - it.type, - it.shortTitle - ) + vMixApi.getData()?.inputs?.also { inputsList -> + + return inputsList.map { currentIn -> + val overList = mutableListOf() + inputsList.forEach { searchIn -> + if (searchIn.overlays.find { it.key == currentIn.key } != null ) { + overList.add(searchIn.number) + } + } + Scene( + currentIn.key, + currentIn.number, + currentIn.type, + currentIn.shortTitle, + overList + ) + } } + return listOf() } override suspend fun getWorkingScenes() = - WorkingScenes( getActive(), getPreview() ) + WorkingScenes( getActive(), getPreview(), getOverlays() ) @@ -43,4 +55,10 @@ class VMixRepositoryImpl @Inject constructor( withContext(Dispatchers.IO) { vMixApi.getData()?.active ?: -1 } + + private suspend fun getOverlays() : List = + withContext(Dispatchers.IO) { + vMixApi.getData()?.overlay ?: listOf() + } + } \ No newline at end of file diff --git a/app/src/main/java/com/jerubrin/tallyflash/data/retrofit/XmlConverter.kt b/app/src/main/java/com/jerubrin/tallyflash/data/retrofit/XmlConverter.kt index 0b0e666..c6464df 100644 --- a/app/src/main/java/com/jerubrin/tallyflash/data/retrofit/XmlConverter.kt +++ b/app/src/main/java/com/jerubrin/tallyflash/data/retrofit/XmlConverter.kt @@ -4,12 +4,16 @@ import org.simpleframework.xml.Attribute import org.simpleframework.xml.Element import org.simpleframework.xml.ElementList import org.simpleframework.xml.Root +import org.simpleframework.xml.Text @Root(strict = false, name = "vmix") data class VMix @JvmOverloads constructor( @field:ElementList(name = "inputs") var inputs: MutableList = mutableListOf(), + @field:ElementList(name = "overlays") + var overlay: MutableList = mutableListOf(), + @field:Element(name = "preview") var preview: Int = -1, @@ -29,5 +33,26 @@ data class Input( var type: String = "", @field:Attribute(name = "shortTitle") - var shortTitle: String = "" + var shortTitle: String = "", + + @field:ElementList(inline = true, entry = "overlay", required = false) + var overlays: MutableList = mutableListOf() +) + +@Root(strict = false, name = "overlay") +data class MainOverlay( + @field:Text(required = false) + var value: Int = -1, + + @field:Attribute(required = false, name = "preview") + var isPreview: Boolean = false +) + +@Root(strict = false, name = "overlay") +data class Overlay( + @field:Attribute(name = "index") + var index: Int = -1, + + @field:Attribute(name = "key") + var key: String = "" ) \ No newline at end of file diff --git a/app/src/main/java/com/jerubrin/tallyflash/domain/usecase/WorkingScenesUseCase.kt b/app/src/main/java/com/jerubrin/tallyflash/domain/usecase/WorkingScenesUseCase.kt index c4a7a29..b38f46b 100644 --- a/app/src/main/java/com/jerubrin/tallyflash/domain/usecase/WorkingScenesUseCase.kt +++ b/app/src/main/java/com/jerubrin/tallyflash/domain/usecase/WorkingScenesUseCase.kt @@ -13,21 +13,45 @@ class WorkingScenesUseCase @Inject constructor( private val vMixRepository: VMixRepository ) : BaseUseCase() { - override suspend fun run(params: Scene): UiState = + override suspend fun run(params: Scene): UiState{ try { - val workingScenes = vMixRepository.getWorkingScenes() - val active = workingScenes.active - val preview = workingScenes.preview - val sceneState: SceneState - = when(params.number) { - active -> SceneState.ACTIVE - preview -> SceneState.PREVIEW + vMixRepository.getWorkingScenes().also { wScenes -> + + //Check main outputs + var sceneState: SceneState + = when(params.number) { + wScenes.active -> SceneState.ACTIVE + wScenes.preview -> SceneState.PREVIEW else -> SceneState.OFF } - UiState.Ready(sceneState) + + //Check main overlays + if (sceneState != SceneState.ACTIVE) { + wScenes.overlays.forEach { + if (it.value == params.number) { + sceneState = + if (it.isPreview) SceneState.PREVIEW else SceneState.ACTIVE + } + } + } + + //Check input overlays + params.overlayList.forEach { + when (it) { + wScenes.active -> sceneState = SceneState.ACTIVE + wScenes.preview -> + if (sceneState != SceneState.ACTIVE) { + sceneState = SceneState.PREVIEW + } + } + } + + return UiState.Ready(sceneState) + } } catch (e: Exception) { - UiState.Error(e.localizedMessage ?: "") + return UiState.Error(e.localizedMessage ?: "") } + } override suspend fun start(params: Scene?): UiState = UiState.Loading() diff --git a/app/src/main/java/com/jerubrin/tallyflash/entity/Scene.kt b/app/src/main/java/com/jerubrin/tallyflash/entity/Scene.kt index 86c5678..29f5f8c 100644 --- a/app/src/main/java/com/jerubrin/tallyflash/entity/Scene.kt +++ b/app/src/main/java/com/jerubrin/tallyflash/entity/Scene.kt @@ -9,5 +9,6 @@ data class Scene ( val key: String = "", val number: Int = -1, val type: String = "", - val shortTitle: String = "" + val shortTitle: String = "", + val overlayList: List = listOf() ) : Parcelable \ No newline at end of file diff --git a/app/src/main/java/com/jerubrin/tallyflash/entity/WorkingScenes.kt b/app/src/main/java/com/jerubrin/tallyflash/entity/WorkingScenes.kt index c3a5300..69c8123 100644 --- a/app/src/main/java/com/jerubrin/tallyflash/entity/WorkingScenes.kt +++ b/app/src/main/java/com/jerubrin/tallyflash/entity/WorkingScenes.kt @@ -1,6 +1,9 @@ package com.jerubrin.tallyflash.entity +import com.jerubrin.tallyflash.data.retrofit.MainOverlay + data class WorkingScenes( val active: Int, - val preview: Int + val preview: Int, + val overlays: List ) diff --git a/app/src/test/java/com/jerubrin/tallyflash/data/TestVMixRepository.kt b/app/src/test/java/com/jerubrin/tallyflash/data/TestVMixRepository.kt index 2d89a8a..d0a50d2 100644 --- a/app/src/test/java/com/jerubrin/tallyflash/data/TestVMixRepository.kt +++ b/app/src/test/java/com/jerubrin/tallyflash/data/TestVMixRepository.kt @@ -1,5 +1,6 @@ package com.jerubrin.tallyflash.data +import com.jerubrin.tallyflash.data.retrofit.MainOverlay import com.jerubrin.tallyflash.entity.ConnectionData import com.jerubrin.tallyflash.entity.Scene import com.jerubrin.tallyflash.entity.WorkingScenes @@ -11,11 +12,15 @@ class TestVMixRepository : VMixRepository { } override suspend fun getWorkingScenes() = - WorkingScenes(active = ACTIVE_SCENE, preview = PREVIEW_SCENE) + WorkingScenes(active = ACTIVE_SCENE, preview = PREVIEW_SCENE, overlays = OVERLAYS) companion object { const val ACTIVE_SCENE = 1 const val PREVIEW_SCENE = 2 + val OVERLAYS = listOf( + MainOverlay(value = 3, isPreview = true), + MainOverlay(value = 4) + ) private const val KEY = "fake_key_" private const val TYPE = "fake_type_"