@@ -293,6 +293,21 @@ proxy_group_is_selector() {
293293 esac
294294}
295295
296+ proxy_group_is_manual_selector () {
297+ local type
298+
299+ type=" $( proxy_group_type " $1 " ) "
300+
301+ case " $type " in
302+ Selector)
303+ return 0
304+ ;;
305+ * )
306+ return 1
307+ ;;
308+ esac
309+ }
310+
296311proxy_group_list () {
297312 proxy_groups_json \
298313 | " $( yq_bin) " -p=json eval '
@@ -360,6 +375,32 @@ proxy_group_selectable_nodes() {
360375 done < <( proxy_group_nodes " $group " )
361376}
362377
378+ proxy_group_supports_manual_pick () {
379+ local group=" $1 "
380+ local node
381+
382+ [ -n " ${group:- } " ] || return 1
383+ proxy_group_exists " $group " || return 1
384+ proxy_group_is_manual_selector " $group " || return 1
385+
386+ while IFS= read -r node; do
387+ [ -n " ${node:- } " ] || continue
388+ return 0
389+ done < <( proxy_group_selectable_nodes " $group " )
390+
391+ return 1
392+ }
393+
394+ proxy_group_manual_list () {
395+ local group
396+
397+ while IFS= read -r group; do
398+ [ -n " ${group:- } " ] || continue
399+ proxy_group_supports_manual_pick " $group " || continue
400+ echo " $group "
401+ done < <( proxy_group_list)
402+ }
403+
363404proxy_group_select () {
364405 local group=" $1 "
365406 local node=" $2 "
@@ -371,7 +412,7 @@ proxy_group_select() {
371412 [ -n " ${node:- } " ] || die " 节点名称不能为空"
372413
373414 proxy_group_exists " $group " || die " 策略组不存在:$group "
374- proxy_group_is_selector " $group " || die " 该策略组不支持手动切换:$group "
415+ proxy_group_supports_manual_pick " $group " || die " 该策略组不支持手动切换:$group "
375416
376417 found=false
377418 while IFS= read -r available_node; do
@@ -510,7 +551,7 @@ ensure_default_proxy_group_relay_selected() {
510551 else
511552 switched=" ${group} |${current} |${relay} "
512553 fi
513- done < <( proxy_group_list )
554+ done < <( proxy_group_manual_list )
514555
515556 [ -n " ${switched:- } " ] && echo " $switched "
516557}
0 commit comments