From 203edaed50b99d8d723455376879b807bca8db2a Mon Sep 17 00:00:00 2001 From: t0ng7u Date: Sat, 12 Jul 2025 23:57:59 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix:=20synchronize=20`MultiKeySi?= =?UTF-8?q?ze`=20after=20editing=20multi-key=20channels?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Recalculate `ChannelInfo.MultiKeySize` based on the current key list when a multi-key channel is updated. 2. Purge any indexes in `MultiKeyStatusList` that exceed the new key count to avoid stale or out-of-range data. This ensures the front-end display (`enabled x/x`) always reflects the real number of keys after users add or remove keys in edit mode. --- model/channel.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/model/channel.go b/model/channel.go index b792c87e..5e6dceda 100644 --- a/model/channel.go +++ b/model/channel.go @@ -396,6 +396,19 @@ func (channel *Channel) Insert() error { } func (channel *Channel) Update() error { + // 如果是多密钥渠道,则根据当前 key 列表重新计算 MultiKeySize,避免编辑密钥后数量未同步 + if channel.ChannelInfo.IsMultiKey { + keys := channel.getKeys() + channel.ChannelInfo.MultiKeySize = len(keys) + // 清理超过新 key 数量范围的状态数据,防止索引越界 + if channel.ChannelInfo.MultiKeyStatusList != nil { + for idx := range channel.ChannelInfo.MultiKeyStatusList { + if idx >= channel.ChannelInfo.MultiKeySize { + delete(channel.ChannelInfo.MultiKeyStatusList, idx) + } + } + } + } var err error err = DB.Model(channel).Updates(channel).Error if err != nil {