From 984af6c1b83c24b231b74eb919f503fc6e0732f3 2022-06-18 14:19:33
From: Branko Majic <branko@majic.rs>
Date: 2022-06-18 14:19:33
Subject: [PATCH] [factorio_manager.sh] Sort instance info mod output list by title.

---

diff --git a/games/factorio_manager.sh b/games/factorio_manager.sh
index 415ec7fcf764d50a98768a37838107866caf5ff7..159a630d66d2eba515da939da5cc3870c68204b9 100755
--- a/games/factorio_manager.sh
+++ b/games/factorio_manager.sh
@@ -1941,16 +1941,15 @@ elif [[ $command == info ]]; then
         # shellcheck disable=SC2016 # The $enable_new_mods is meant to be interpreted by jq, not bash.
         jq_is_enabled_query='.mods | map(select(.name==$mod_name))[0] // {"name": "default", "enabled": $enable_new_mods} | .enabled'
 
+        # Store information for sorting by title.
+        declare -A basic_information
+        declare -A extended_information
+
         # Process every mod found.
         for mod_file in "${mod_files[@]}"; do
 
             if [[ -f $mod_file ]]; then
 
-                # Extract internal name of the mod (used for URL paths
-                # etc). Differs from data stored in info.json.
-                mod_basename=$(basename "$mod_file" .zip)
-                mod_internal_name="${mod_basename%_*}"
-
                 # Extract mod information.
                 mod_info_file=$(unzip -Z1 "$mod_file" | grep "info\.json" | head -n1)
                 mod_info=$(unzip -p "$mod_file" "$mod_info_file")
@@ -1974,16 +1973,21 @@ elif [[ $command == info ]]; then
                 fi
 
                 # Show colored-information for the mod.
-                printf "$color  - %-48s %8s $_text_reset\n" "$mod_title" "$mod_version"
-                if (( verbose == 1 )); then
-                    echo
-                    echo "    ($mod_url)"
-                    echo
-                    echo "$mod_description"
-                    echo
-                fi
+                basic_information[$mod_title]=$(printf "$color  - %-48s %8s $_text_reset\n" "$mod_title" "$mod_version")
+                extended_information[$mod_title]=$(printf "    (%s)\n\n%s" "$mod_url" "$mod_description")
             fi
         done
+
+        # Output information, sorted by title.
+        while read -r mod_title; do
+            echo "${basic_information[$mod_title]}"
+
+            if (( verbose == 1 )); then
+                echo
+                echo "${extended_information[$mod_title]}"
+                echo
+            fi
+        done < <(IFS=$'\n'; echo "${!extended_information[*]}" | sort)
     fi
     echo