gistfile1.txt
· 1.7 KiB · Text
Raw
function cmd::group::show() {
local name=""
while [[ $# -gt 0 ]]; do
case "$1" in
--name) util::require_flag "--name" "${2:-}" || return 1; name="$2"; shift 2 ;;
--help) cmd::group::help; return ;;
*) log::error "Unknown flag: $1"; return 1 ;;
esac
done
[[ -z "$name" ]] && log::error "Missing required flag: --name" && return 1
group::require_exists "$name" || return 1
local group_file
group_file="$(group::path "$name")"
log::section "Group: ${name}"
printf "\n"
local desc
desc=$(json::get "$group_file" "desc")
ui::row "Description" "${desc:-—}"
# Load and filter peers
local peers_list=()
mapfile -t peers_list < <(json::get "$group_file" "peers") || true
local filtered=()
for p in "${peers_list[@]:-}"; do
[[ -n "$p" ]] && filtered+=("$p")
done
peers_list=("${filtered[@]:-}")
local peer_count=${#peers_list[@]}
[[ -z "${peers_list[0]:-}" ]] && peer_count=0
# Count valid peers (data logic stays in command)
local valid_count=0
for p in "${peers_list[@]}"; do
[[ -z "$p" ]] && continue
peers::require_exists "$p" > /dev/null 2>&1 && (( valid_count++ )) || true
done
local peer_word="peers"
[[ "$valid_count" -eq 1 ]] && peer_word="peer"
ui::row "Peers" "${valid_count} ${peer_word}"
printf "\n"
if [[ "$peer_count" -gt 0 ]]; then
# Measure widths (data logic stays in command)
local w_name=16 w_ip=13
for peer_name in "${peers_list[@]}"; do
[[ -z "$peer_name" ]] && continue
(( ${#peer_name} > w_name )) && w_name=${#peer_name}
done
(( w_name += 2 ))
# Delegate rendering to ui::
ui::group::show_peers peers_list "$w_name" "$w_ip"
else
printf " \033[2m—\033[0m\n"
fi
printf "\n"
}
| 1 | function cmd::group::show() { |
| 2 | local name="" |
| 3 | |
| 4 | while [[ $# -gt 0 ]]; do |
| 5 | case "$1" in |
| 6 | --name) util::require_flag "--name" "${2:-}" || return 1; name="$2"; shift 2 ;; |
| 7 | --help) cmd::group::help; return ;; |
| 8 | *) log::error "Unknown flag: $1"; return 1 ;; |
| 9 | esac |
| 10 | done |
| 11 | |
| 12 | [[ -z "$name" ]] && log::error "Missing required flag: --name" && return 1 |
| 13 | group::require_exists "$name" || return 1 |
| 14 | |
| 15 | local group_file |
| 16 | group_file="$(group::path "$name")" |
| 17 | |
| 18 | log::section "Group: ${name}" |
| 19 | printf "\n" |
| 20 | |
| 21 | local desc |
| 22 | desc=$(json::get "$group_file" "desc") |
| 23 | ui::row "Description" "${desc:-—}" |
| 24 | |
| 25 | # Load and filter peers |
| 26 | local peers_list=() |
| 27 | mapfile -t peers_list < <(json::get "$group_file" "peers") || true |
| 28 | local filtered=() |
| 29 | for p in "${peers_list[@]:-}"; do |
| 30 | [[ -n "$p" ]] && filtered+=("$p") |
| 31 | done |
| 32 | peers_list=("${filtered[@]:-}") |
| 33 | local peer_count=${#peers_list[@]} |
| 34 | [[ -z "${peers_list[0]:-}" ]] && peer_count=0 |
| 35 | |
| 36 | # Count valid peers (data logic stays in command) |
| 37 | local valid_count=0 |
| 38 | for p in "${peers_list[@]}"; do |
| 39 | [[ -z "$p" ]] && continue |
| 40 | peers::require_exists "$p" > /dev/null 2>&1 && (( valid_count++ )) || true |
| 41 | done |
| 42 | local peer_word="peers" |
| 43 | [[ "$valid_count" -eq 1 ]] && peer_word="peer" |
| 44 | ui::row "Peers" "${valid_count} ${peer_word}" |
| 45 | printf "\n" |
| 46 | |
| 47 | if [[ "$peer_count" -gt 0 ]]; then |
| 48 | # Measure widths (data logic stays in command) |
| 49 | local w_name=16 w_ip=13 |
| 50 | for peer_name in "${peers_list[@]}"; do |
| 51 | [[ -z "$peer_name" ]] && continue |
| 52 | (( ${#peer_name} > w_name )) && w_name=${#peer_name} |
| 53 | done |
| 54 | (( w_name += 2 )) |
| 55 | |
| 56 | # Delegate rendering to ui:: |
| 57 | ui::group::show_peers peers_list "$w_name" "$w_ip" |
| 58 | else |
| 59 | printf " \033[2m—\033[0m\n" |
| 60 | fi |
| 61 | |
| 62 | printf "\n" |
| 63 | } |