Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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<Int>()
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() )



Expand All @@ -43,4 +55,10 @@ class VMixRepositoryImpl @Inject constructor(
withContext(Dispatchers.IO) {
vMixApi.getData()?.active ?: -1
}

private suspend fun getOverlays() : List<MainOverlay> =
withContext(Dispatchers.IO) {
vMixApi.getData()?.overlay ?: listOf()
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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<Input> = mutableListOf(),

@field:ElementList(name = "overlays")
var overlay: MutableList<MainOverlay> = mutableListOf(),

@field:Element(name = "preview")
var preview: Int = -1,

Expand All @@ -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<Overlay> = 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 = ""
)
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,45 @@ class WorkingScenesUseCase @Inject constructor(
private val vMixRepository: VMixRepository
) : BaseUseCase<UiState, Scene>() {

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()
Expand Down
3 changes: 2 additions & 1 deletion app/src/main/java/com/jerubrin/tallyflash/entity/Scene.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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<Int> = listOf()
) : Parcelable
Original file line number Diff line number Diff line change
@@ -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<MainOverlay>
)
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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_"
Expand Down