Also search on name when setting midi port

This commit is contained in:
2024-07-02 19:17:35 +02:00
parent 6554fd746a
commit f2269c8865
5 changed files with 41 additions and 6 deletions

View File

@@ -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 {

View File

@@ -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")

View File

@@ -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?) {

View File

@@ -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)}")
} }

View File

@@ -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()
} }