Files
2026-06-02 23:14:41 +08:00

68 lines
1.4 KiB
Go

package feishu
import (
"encoding/hex"
"sort"
"strings"
)
const deleteModeCheckerNamePrefix = "delete_sel_"
func deleteModeCheckerName(sessionID string) string {
return deleteModeCheckerNamePrefix + hex.EncodeToString([]byte(sessionID))
}
func parseDeleteModeCheckerName(name string) (string, bool) {
if !strings.HasPrefix(name, deleteModeCheckerNamePrefix) {
return "", false
}
raw := strings.TrimPrefix(name, deleteModeCheckerNamePrefix)
if raw == "" {
return "", false
}
b, err := hex.DecodeString(raw)
if err != nil {
return "", false
}
return string(b), true
}
func collectDeleteModeSelectedFromFormValue(formValue map[string]any) []string {
if len(formValue) == 0 {
return nil
}
ids := make([]string, 0, len(formValue))
seen := make(map[string]struct{}, len(formValue))
for key, val := range formValue {
sessionID, ok := parseDeleteModeCheckerName(key)
if !ok || !isTruthyFormValue(val) {
continue
}
if _, exists := seen[sessionID]; exists {
continue
}
seen[sessionID] = struct{}{}
ids = append(ids, sessionID)
}
sort.Strings(ids)
return ids
}
func isTruthyFormValue(v any) bool {
switch x := v.(type) {
case bool:
return x
case string:
s := strings.ToLower(strings.TrimSpace(x))
return s == "true" || s == "1" || s == "yes" || s == "on"
case float64:
return x != 0
case int:
return x != 0
case int64:
return x != 0
default:
return false
}
}