Compare commits

..

2 Commits

Author SHA1 Message Date
tiny-craft ec7a7f18e9 fix: HSET command causes error when accepts multiple field and value #44 2023-10-05 20:40:32 +08:00
tiny-craft aad4bcf17b fix: incorrect status display in connection dialog. 2023-10-05 20:40:31 +08:00
5 changed files with 28 additions and 10 deletions

View File

@ -662,11 +662,17 @@ func (c *connectionService) SetKeyValue(connName string, db int, key, keyType st
resp.Msg = "invalid hash value"
return
} else {
if len(strs) > 1 {
err = rdb.HSet(ctx, key, strs).Err()
if err == nil && expiration > 0 {
rdb.Expire(ctx, key, expiration)
}
total := len(strs)
if total > 1 {
_, err = rdb.Pipelined(ctx, func(pipe redis.Pipeliner) error {
for i := 0; i < total; i += 2 {
pipe.HSet(ctx, key, strs[i], strs[i+1])
}
if expiration > 0 {
pipe.Expire(ctx, key, expiration)
}
return nil
})
}
}
case "set":
@ -795,9 +801,17 @@ func (c *connectionService) AddHashField(connName string, db int, key string, ac
}
default:
// overwrite duplicated fields
_, err = rdb.HSet(ctx, key, fieldItems...).Result()
for i := 0; i < len(fieldItems); i += 2 {
updated[fieldItems[i].(string)] = fieldItems[i+1]
total := len(fieldItems)
if total > 1 {
_, err = rdb.Pipelined(ctx, func(pipe redis.Pipeliner) error {
for i := 0; i < total; i += 2 {
rdb.HSet(ctx, key, fieldItems[i], fieldItems[i+1])
}
return nil
})
for i := 0; i < total; i += 2 {
updated[fieldItems[i].(string)] = fieldItems[i+1]
}
}
}
if err != nil {

View File

@ -126,6 +126,7 @@ const onSaveConnection = async () => {
const resetForm = () => {
generalForm.value = connectionStore.newDefaultConnection()
generalFormRef.value?.restoreValidation()
testing.value = false
showTestResult.value = false
testResult.value = ''
tab.value = 'general'
@ -135,6 +136,7 @@ watch(
() => dialogStore.connDialogVisible,
(visible) => {
if (visible) {
resetForm()
editName.value = get(dialogStore.connParam, 'name', '')
generalForm.value = dialogStore.connParam || connectionStore.newDefaultConnection()
generalForm.value.ssh.loginType = generalForm.value.ssh.loginType || 'pwd'
@ -286,7 +288,7 @@ const onClose = () => {
<n-form-item :label="$t('dialogue.connection.addr')" required>
<n-input
v-model:value="generalForm.ssh.addr"
:placeholder="$t('dialogue.connection.addr_tip')" />
:placeholder="$t('dialogue.connection.ssh_addr_tip')" />
<n-text style="width: 40px; text-align: center">:</n-text>
<n-input-number
v-model:value="generalForm.ssh.port"

View File

@ -187,7 +187,7 @@ const onClose = () => {
{{ $t('common.second') }}
</template>
</n-input-number>
<n-button secondary type="primary" :focusable="false" @click="newForm.ttl = -1">
<n-button secondary type="primary" :focusable="false" @click="() => (newForm.ttl = -1)">
{{ $t('dialogue.key.persist_key') }}
</n-button>
</n-input-group>

View File

@ -139,6 +139,7 @@
"login_type": "Login Type",
"pkfile": "Private Key File",
"passphrase": "Passphrase",
"ssh_addr_tip": "SSH Server Host",
"ssh_usr_tip": "SSH Username",
"ssh_pwd_tip": "SSH Password",
"pkfile_tip": "SSH Private Key File Path",

View File

@ -139,6 +139,7 @@
"login_type": "登录类型",
"pkfile": "私钥文件",
"passphrase": "私钥密码",
"ssh_addr_tip": "SSH地址",
"ssh_usr_tip": "SSH登录用户名",
"ssh_pwd_tip": "SSH登录密码",
"pkfile_tip": "SSH私钥文件路径",