diff --git a/src/logic_events.sh b/src/logic_events.sh index 6c4449f..58be68c 100644 --- a/src/logic_events.sh +++ b/src/logic_events.sh @@ -77,13 +77,48 @@ event_count() { else local eventsJSON=$(dotenv-tool parse -r -f "${EVENTS_DB}") local eventsKeysStr=$(echo "${eventsJSON}" | jq -r ".values | keys[]") - local eventsCount=${#eventsKeysStr} - if ((eventsCount > 0)); then - mapfile -t eventList < <(echo "${eventsKeysStr}") - echo "${#eventList[@]}" - else + + if [[ -z "$eventsKeysStr" ]]; then echo "0" + return fi + + mapfile -t eventList < <(echo "${eventsKeysStr}") + local count=0 + local processedNames=() + + for eventId in "${eventList[@]}"; do + # Parse eventName and eventTail (suffix) + mapfile -t -d '_' eventIdSplit <<<"${eventId}" + local eventTail=$(echo "${eventIdSplit[-1]}" | tr -d '\n') + unset "eventIdSplit[-1]" + printf -v eventBase '%s_' "${eventIdSplit[@]}" + local eventName="${eventBase%_}" + if [ ${#eventIdSplit[@]} -eq 0 ]; then + eventName="$eventTail" + eventTail="" + fi + + if [[ "$eventTail" == "start" ]] || [[ "$eventTail" == "end" ]]; then + # Group start/end as one + if [[ ! " ${processedNames[*]} " =~ [[:space:]]${eventName}[[:space:]] ]]; then + processedNames+=("${eventName}") + ((count++)) + fi + elif [[ "$eventTail" == "set" ]]; then + ((count++)) + elif [[ "$eventTail" == "clear" ]]; then + # Count clear only if set exists + local hasSet=$(echo "$eventsJSON" | jq -r ".values.${eventName}_set") + if [[ "$hasSet" != "null" ]]; then + ((count++)) + fi + else + # Lone event (no suffix) + ((count++)) + fi + done + echo "$count" fi }