mirror of
https://github.com/TermoraDev/termora.git
synced 2026-01-16 02:12:58 +08:00
fix: Keymap sync override (#493)
This commit is contained in:
@@ -1,7 +1,6 @@
|
|||||||
package app.termora.keymap
|
package app.termora.keymap
|
||||||
|
|
||||||
import app.termora.Application.ohMyJson
|
import app.termora.Application.ohMyJson
|
||||||
import kotlinx.serialization.encodeToString
|
|
||||||
import kotlinx.serialization.json.*
|
import kotlinx.serialization.json.*
|
||||||
import javax.swing.KeyStroke
|
import javax.swing.KeyStroke
|
||||||
|
|
||||||
@@ -12,6 +11,10 @@ open class Keymap(
|
|||||||
*/
|
*/
|
||||||
private val parent: Keymap?,
|
private val parent: Keymap?,
|
||||||
val isReadonly: Boolean = false,
|
val isReadonly: Boolean = false,
|
||||||
|
/**
|
||||||
|
* 修改时间
|
||||||
|
*/
|
||||||
|
var updateDate: Long = 0L,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@@ -23,7 +26,8 @@ open class Keymap(
|
|||||||
val shortcuts = mutableListOf<Keymap>()
|
val shortcuts = mutableListOf<Keymap>()
|
||||||
val name = json["name"]?.jsonPrimitive?.content ?: return null
|
val name = json["name"]?.jsonPrimitive?.content ?: return null
|
||||||
val readonly = json["readonly"]?.jsonPrimitive?.booleanOrNull ?: return null
|
val readonly = json["readonly"]?.jsonPrimitive?.booleanOrNull ?: return null
|
||||||
val keymap = Keymap(name, null, readonly)
|
val updateDate = json["updateDate"]?.jsonPrimitive?.longOrNull ?: 0
|
||||||
|
val keymap = Keymap(name, null, readonly, updateDate)
|
||||||
|
|
||||||
for (shortcut in (json["shortcuts"]?.jsonArray ?: emptyList()).map { it.jsonObject }) {
|
for (shortcut in (json["shortcuts"]?.jsonArray ?: emptyList()).map { it.jsonObject }) {
|
||||||
val keyStroke = shortcut["keyStroke"]?.jsonPrimitive?.contentOrNull ?: continue
|
val keyStroke = shortcut["keyStroke"]?.jsonPrimitive?.contentOrNull ?: continue
|
||||||
@@ -40,6 +44,9 @@ open class Keymap(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 最后设置修改时间
|
||||||
|
keymap.updateDate = updateDate
|
||||||
|
|
||||||
shortcuts.add(keymap)
|
shortcuts.add(keymap)
|
||||||
return keymap
|
return keymap
|
||||||
}
|
}
|
||||||
@@ -51,6 +58,7 @@ open class Keymap(
|
|||||||
val actionIds = shortcuts.getOrPut(shortcut) { mutableListOf() }
|
val actionIds = shortcuts.getOrPut(shortcut) { mutableListOf() }
|
||||||
actionIds.removeIf { it == actionId }
|
actionIds.removeIf { it == actionId }
|
||||||
actionIds.add(actionId)
|
actionIds.add(actionId)
|
||||||
|
updateDate = System.currentTimeMillis()
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun removeAllActionShortcuts(actionId: Any) {
|
open fun removeAllActionShortcuts(actionId: Any) {
|
||||||
@@ -62,6 +70,7 @@ open class Keymap(
|
|||||||
iterator.remove()
|
iterator.remove()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
updateDate = System.currentTimeMillis()
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun getShortcut(actionId: Any): List<Shortcut> {
|
open fun getShortcut(actionId: Any): List<Shortcut> {
|
||||||
@@ -102,6 +111,7 @@ open class Keymap(
|
|||||||
return buildJsonObject {
|
return buildJsonObject {
|
||||||
put("name", name)
|
put("name", name)
|
||||||
put("readonly", isReadonly)
|
put("readonly", isReadonly)
|
||||||
|
put("updateDate", updateDate)
|
||||||
parent?.let { put("parent", it.name) }
|
parent?.let { put("parent", it.name) }
|
||||||
put("shortcuts", buildJsonArray {
|
put("shortcuts", buildJsonArray {
|
||||||
for (entry in shortcuts.entries) {
|
for (entry in shortcuts.entries) {
|
||||||
|
|||||||
@@ -390,7 +390,15 @@ abstract class SafetySyncer : Syncer {
|
|||||||
|
|
||||||
protected fun decodeKeymaps(text: String, deletedData: List<DeletedData>, config: SyncConfig) {
|
protected fun decodeKeymaps(text: String, deletedData: List<DeletedData>, config: SyncConfig) {
|
||||||
|
|
||||||
for (keymap in ohMyJson.decodeFromString<List<JsonObject>>(text).mapNotNull { Keymap.fromJSON(it) }) {
|
val localKeymaps = keymapManager.getKeymaps().associateBy { it.name }
|
||||||
|
val remoteKeymaps = ohMyJson.decodeFromString<List<JsonObject>>(text).mapNotNull { Keymap.fromJSON(it) }
|
||||||
|
for (keymap in remoteKeymaps) {
|
||||||
|
val localKeymap = localKeymaps[keymap.name]
|
||||||
|
if (localKeymap != null) {
|
||||||
|
if (localKeymap.updateDate > keymap.updateDate) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
keymapManager.addKeymap(keymap)
|
keymapManager.addKeymap(keymap)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user