Skip to content

Commit 162651a

Browse files
committed
#1688 fix: do not crash when inserting key maps if they already exist
1 parent d9462bd commit 162651a

2 files changed

Lines changed: 10 additions & 8 deletions

File tree

app/src/main/java/io/github/sds100/keymapper/actions/Action.kt

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,7 @@ data class Action(
3333

3434
val multiplier: Int? = null,
3535
val delayBeforeNextAction: Int? = null,
36-
) {
37-
companion object {
38-
const val REPEAT_DELAY_MIN = 0
39-
}
40-
}
36+
)
4137

4238
object ActionEntityMapper {
4339
fun fromEntity(entity: ActionEntity): Action? {
@@ -108,7 +104,7 @@ object ActionEntityMapper {
108104
)
109105
}
110106

111-
fun toEntity(keyMap: KeyMap): List<ActionEntity> = keyMap.actionList.mapNotNull { action ->
107+
fun toEntity(keyMap: KeyMap): List<ActionEntity> = keyMap.actionList.map { action ->
112108
val base = ActionDataEntityMapper.toEntity(action.data)
113109

114110
val extras = mutableListOf<EntityExtra>().apply {
@@ -187,7 +183,7 @@ object ActionEntityMapper {
187183
flags = flags.withFlag(ActionEntity.ACTION_FLAG_HOLD_DOWN)
188184
}
189185

190-
return@mapNotNull ActionEntity(
186+
return@map ActionEntity(
191187
type = base.type,
192188
data = base.data,
193189
extras = base.extras.plus(extras),

app/src/main/java/io/github/sds100/keymapper/mappings/keymaps/ConfigKeyMapUseCase.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.github.sds100.keymapper.mappings.keymaps
22

3+
import android.database.sqlite.SQLiteConstraintException
34
import io.github.sds100.keymapper.actions.Action
45
import io.github.sds100.keymapper.actions.ActionData
56
import io.github.sds100.keymapper.actions.RepeatMode
@@ -851,7 +852,12 @@ class ConfigKeyMapUseCaseController(
851852
val keyMap = keyMap.value.dataOrNull() ?: return
852853

853854
if (keyMap.dbId == null) {
854-
keyMapRepository.insert(KeyMapEntityMapper.toEntity(keyMap, 0))
855+
val entity = KeyMapEntityMapper.toEntity(keyMap, 0)
856+
try {
857+
keyMapRepository.insert(entity)
858+
} catch (e: SQLiteConstraintException) {
859+
keyMapRepository.update(entity)
860+
}
855861
} else {
856862
keyMapRepository.update(KeyMapEntityMapper.toEntity(keyMap, keyMap.dbId))
857863
}

0 commit comments

Comments
 (0)