Also search on name when setting midi port
This commit is contained in:
@@ -1,3 +1,7 @@
|
|||||||
|
@file:OptIn(ExperimentalKotlinGradlePluginApi::class, ExperimentalDistributionDsl::class)
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalDistributionDsl
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackOutput
|
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackOutput
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ data class PatchDTO(
|
|||||||
val waveform: Int = 0,
|
val waveform: Int = 0,
|
||||||
@JsName("midiId")
|
@JsName("midiId")
|
||||||
val midiId: String = "",
|
val midiId: String = "",
|
||||||
|
@JsName("midiName")
|
||||||
|
val midiName: String = "",
|
||||||
@JsName("midiChannel")
|
@JsName("midiChannel")
|
||||||
var midiChannel: Int = 0,
|
var midiChannel: Int = 0,
|
||||||
@JsName("volume")
|
@JsName("volume")
|
||||||
|
|||||||
@@ -74,11 +74,37 @@ object Midi {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setInput(id: String) {
|
fun setInput(id: String, name: String = "") {
|
||||||
val selected = inputs.find { it.id == id }
|
var selected = inputs.find { it.id == id }
|
||||||
if (selected != null) {
|
if (selected == null) {
|
||||||
setInput(selected)
|
var maxMatchChar = 0
|
||||||
|
inputs.forEach {
|
||||||
|
val matchChars = matchChars(it.name, name)
|
||||||
|
if (matchChars > maxMatchChar) {
|
||||||
|
selected = it
|
||||||
|
maxMatchChar = matchChars
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
setInput(selected)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun matchChars(str1: String, str2: String): Int {
|
||||||
|
var result = 0
|
||||||
|
if (str1.length > str2.length) {
|
||||||
|
for (ch in str1.toCharArray()) {
|
||||||
|
if (str2.contains(ch)) {
|
||||||
|
result++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (ch in str2.toCharArray()) {
|
||||||
|
if (str1.contains(ch)) {
|
||||||
|
result++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setInput(input: MIDIInput?) {
|
fun setInput(input: MIDIInput?) {
|
||||||
|
|||||||
@@ -175,7 +175,10 @@ object MainView : Komponent(), CssName {
|
|||||||
span(ButtonBarCss.name) {
|
span(ButtonBarCss.name) {
|
||||||
+"SAVE"
|
+"SAVE"
|
||||||
onClickFunction = {
|
onClickFunction = {
|
||||||
val patch = VstChipWorklet.save().copy(midiId = Midi.currentInput?.id ?: "")
|
val patch = VstChipWorklet.save().copy(
|
||||||
|
midiId = Midi.currentInput?.id ?: "",
|
||||||
|
midiName = Midi.currentInput?.name ?: ""
|
||||||
|
)
|
||||||
|
|
||||||
WebsocketClient.send("SAVE\n${JSON.stringify(patch)}")
|
WebsocketClient.send("SAVE\n${JSON.stringify(patch)}")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ object WebsocketClient {
|
|||||||
val patchJson = data.substring(5)
|
val patchJson = data.substring(5)
|
||||||
val patch = JSON.parse<PatchDTO>(patchJson)
|
val patch = JSON.parse<PatchDTO>(patchJson)
|
||||||
|
|
||||||
Midi.setInput(patch.midiId)
|
Midi.setInput(patch.midiId, patch.midiName)
|
||||||
VstChipWorklet.load(patch)
|
VstChipWorklet.load(patch)
|
||||||
MainView.requestUpdate()
|
MainView.requestUpdate()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user