From cbfb71ab5fdc4181afc2cdec7f64884ebd25c042 Mon Sep 17 00:00:00 2001 From: TheJarAiCyberCode-id Date: Sat, 8 Nov 2025 22:55:23 +0700 Subject: [PATCH 1/2] termux-info: Add Termux APK update status check (Requires curl and jq) --- scripts/termux-info.in | 88 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/scripts/termux-info.in b/scripts/termux-info.in index 9cfc07f..1ad3e08 100644 --- a/scripts/termux-info.in +++ b/scripts/termux-info.in @@ -21,6 +21,89 @@ if [ "$#" != "0" ]; then show_usage fi +check_apk_update () { + # Check if curl and jq are installed + if ! command -v curl &> /dev/null || ! command -v jq &> /dev/null; then + echo "Warning: 'curl' or 'jq' not found. Install with 'pkg install curl jq' to enable this feature." + return + fi + + # Check if TERMUX_VERSION and TERMUX_APK_RELEASE are available + if [ -z "${TERMUX_VERSION:-}" ] || [ -z "${TERMUX_APK_RELEASE:-}" ]; then + echo "Info: TERMUX_VERSION or TERMUX_APK_RELEASE not set. APK check skipped." + return + fi + + local CURRENT_VERSION="${TERMUX_VERSION}" # Current Termux version installed + local RELEASE_DATA + local LATEST_VERSION="" + local URL_API + local DOWNLOAD_URL + local SOURCE_NAME="${TERMUX_APK_RELEASE}" # Store source name for output + + # --- FETCH DATA BASED ON APK SOURCE --- + + if [[ "$TERMUX_APK_RELEASE" == "GITHUB" ]]; then + URL_API="https://api.github.com/repos/termux/termux-app/releases/latest" + DOWNLOAD_URL="https://github.com/termux/termux-app/releases/latest" + + # Fetch latest release data from GitHub API. + RELEASE_DATA=$(curl --fail -s "$URL_API") + + # Check curl success status + if [ $? -ne 0 ]; then + echo "# API URL Source: $URL_API" + echo "[!] Failed to connect to the internet or fetch $SOURCE_NAME release data." + return + fi + + # Extract version tag using jq. + LATEST_VERSION=$(echo "$RELEASE_DATA" | jq -r '.tag_name' | sed 's/^v//') + + elif [[ "$TERMUX_APK_RELEASE" == "F_DROID" ]]; then + URL_API="https://f-droid.org/api/v1/packages/com.termux" + DOWNLOAD_URL="https://f-droid.org/en/packages/com.termux" + + # Fetch latest release data from F-Droid API + RELEASE_DATA=$(curl --fail -s "$URL_API") + + # Check curl success status + if [ $? -ne 0 ]; then + echo "# API URL Source: $URL_API" + echo "[!] Failed to connect to the internet or fetch $SOURCE_NAME release data." + return + fi + + # Find versionName matching suggestedVersionCode + LATEST_VERSION=$(echo "$RELEASE_DATA" | \ + jq -r '. as $data | $data.packages[] | select(.versionCode == $data.suggestedVersionCode) | .versionName') + else + echo "Info: Termux APK Source ('$TERMUX_APK_RELEASE') is unknown. Check skipped." + return + fi + + # --- VERSION COMPARISON LOGIC --- + + # Check if version extraction failed or returned null/empty + if [ -z "$LATEST_VERSION" ] || [ "$LATEST_VERSION" == "null" ]; then + echo "Warning: Failed to get the latest version number from $SOURCE_NAME." + return + fi + + # Compare versions + if [[ "$LATEST_VERSION" == "$CURRENT_VERSION" ]]; then + echo "# API URL Source: $URL_API" + echo "Termux APK version $CURRENT_VERSION from $SOURCE_NAME is up to date." + else + # If new version is available, show the information + echo "# API URL Source: $URL_API" + echo "[!]New version available ($SOURCE_NAME)" + echo "Latest version: $LATEST_VERSION" + echo "Current version: $CURRENT_VERSION" + echo "Download from: $DOWNLOAD_URL" + fi +} + updates() { local updatable @@ -108,6 +191,11 @@ unsupported " fi +# ADDED APK UPDATE CHECK HERE +output+="Termux APK Update Status: +$(check_apk_update) +" + output+="Packages CPU architecture: $( if [ "$TERMUX_APP_PACKAGE_MANAGER" = "apt" ]; then From 040f0039c6bc2c2652e05fde6c2b6e66b32b0fb7 Mon Sep 17 00:00:00 2001 From: TheJarAiCyberCode-id Date: Sun, 9 Nov 2025 02:51:02 +0700 Subject: [PATCH 2/2] fix(termux-info): Refactor APK update check, update variable names. Create a new local variable: local TERMUX_SOURCE="${TERMUX_APP__APK_RELEASE:-$TERMUX_APK_RELEASE}" If the new name `TERMUX_APP__APK_RELEASE` variable exists, use it. Otherwise, use the old name `TERMUX_APK_RELEASE` variable as a fallback. - Separated curl and jq checking to make error messages more specific. - Using case statements to condense and de-duplicate API data retrieval code, avoiding repeating if/elif blocks. - Use the recommended syntax: if ! RELEASE_DATA=$(curl ...); then ... for more reliable error handling. - Replace echo "..." | jq ... with the more modern herestring (<<<): jq ... <<< "$RELEASE_DATA". - Consider using the bash [[...]] test instead of the old [...] test. Its definition is clearer, and it supports the internal || operator. --- scripts/termux-info.in | 78 ++++++++++++++++-------------------------- 1 file changed, 30 insertions(+), 48 deletions(-) diff --git a/scripts/termux-info.in b/scripts/termux-info.in index 1ad3e08..0efcee5 100644 --- a/scripts/termux-info.in +++ b/scripts/termux-info.in @@ -22,80 +22,63 @@ if [ "$#" != "0" ]; then fi check_apk_update () { - # Check if curl and jq are installed - if ! command -v curl &> /dev/null || ! command -v jq &> /dev/null; then - echo "Warning: 'curl' or 'jq' not found. Install with 'pkg install curl jq' to enable this feature." + if ! command -v curl &> /dev/null; then + echo "Warning: 'curl' not found. Install with 'pkg install curl' to enable APK update check." return fi - # Check if TERMUX_VERSION and TERMUX_APK_RELEASE are available - if [ -z "${TERMUX_VERSION:-}" ] || [ -z "${TERMUX_APK_RELEASE:-}" ]; then - echo "Info: TERMUX_VERSION or TERMUX_APK_RELEASE not set. APK check skipped." + if ! command -v jq &> /dev/null; then + echo "Warning: 'jq' not found. Install with 'pkg install jq' to enable APK update check." return fi - local CURRENT_VERSION="${TERMUX_VERSION}" # Current Termux version installed + local TERMUX_SOURCE="${TERMUX_APP__APK_RELEASE:-$TERMUX_APK_RELEASE}" + local CURRENT_VERSION="${TERMUX_VERSION}" local RELEASE_DATA local LATEST_VERSION="" local URL_API local DOWNLOAD_URL - local SOURCE_NAME="${TERMUX_APK_RELEASE}" # Store source name for output + local SOURCE_NAME="${TERMUX_APK_RELEASE}" - # --- FETCH DATA BASED ON APK SOURCE --- + case "$TERMUX_SOURCE" in + "GITHUB") + URL_API="https://api.github.com/repos/termux/termux-app/releases/latest" + DOWNLOAD_URL="https://github.com/termux/termux-app/releases/latest" + ;; - if [[ "$TERMUX_APK_RELEASE" == "GITHUB" ]]; then - URL_API="https://api.github.com/repos/termux/termux-app/releases/latest" - DOWNLOAD_URL="https://github.com/termux/termux-app/releases/latest" + "F_DROID") + URL_API="https://f-droid.org/api/v1/packages/com.termux" + DOWNLOAD_URL="https://f-droid.org/en/packages/com.termux" + ;; - # Fetch latest release data from GitHub API. - RELEASE_DATA=$(curl --fail -s "$URL_API") - - # Check curl success status - if [ $? -ne 0 ]; then - echo "# API URL Source: $URL_API" - echo "[!] Failed to connect to the internet or fetch $SOURCE_NAME release data." - return - fi - - # Extract version tag using jq. - LATEST_VERSION=$(echo "$RELEASE_DATA" | jq -r '.tag_name' | sed 's/^v//') - - elif [[ "$TERMUX_APK_RELEASE" == "F_DROID" ]]; then - URL_API="https://f-droid.org/api/v1/packages/com.termux" - DOWNLOAD_URL="https://f-droid.org/en/packages/com.termux" - - # Fetch latest release data from F-Droid API - RELEASE_DATA=$(curl --fail -s "$URL_API") - - # Check curl success status - if [ $? -ne 0 ]; then - echo "# API URL Source: $URL_API" - echo "[!] Failed to connect to the internet or fetch $SOURCE_NAME release data." + *) + echo "Info: Termux APK Source ('$TERMUX_SOURCE') is unknown. Check skipped." return - fi + ;; + esac - # Find versionName matching suggestedVersionCode - LATEST_VERSION=$(echo "$RELEASE_DATA" | \ - jq -r '. as $data | $data.packages[] | select(.versionCode == $data.suggestedVersionCode) | .versionName') - else - echo "Info: Termux APK Source ('$TERMUX_APK_RELEASE') is unknown. Check skipped." + if ! RELEASE_DATA=$(curl --fail -s "$URL_API"); then + echo "# API URL Source: $URL_API" + echo "[!] Failed to connect to the internet or fetch $SOURCE_NAME release data." return fi - # --- VERSION COMPARISON LOGIC --- + if [[ "$TERMUX_SOURCE" == "GITHUB" ]]; then + LATEST_VERSION=$(jq -r '.tag_name' <<< "$RELEASE_DATA" | sed 's/^v//') + elif [[ "$TERMUX_SOURCE" == "F_DROID" ]]; then + # Find versionName matching suggestedVersionCode + LATEST_VERSION=$(jq -r '. as $data | $data.packages[] | select(.versionCode == $data.suggestedVersionCode) | .versionName' <<< "$RELEASE_DATA") + fi - # Check if version extraction failed or returned null/empty - if [ -z "$LATEST_VERSION" ] || [ "$LATEST_VERSION" == "null" ]; then + if [[ -z "$LATEST_VERSION" || "$LATEST_VERSION" == "null" ]]; then echo "Warning: Failed to get the latest version number from $SOURCE_NAME." return fi - # Compare versions if [[ "$LATEST_VERSION" == "$CURRENT_VERSION" ]]; then echo "# API URL Source: $URL_API" echo "Termux APK version $CURRENT_VERSION from $SOURCE_NAME is up to date." else - # If new version is available, show the information echo "# API URL Source: $URL_API" echo "[!]New version available ($SOURCE_NAME)" echo "Latest version: $LATEST_VERSION" @@ -191,7 +174,6 @@ unsupported " fi -# ADDED APK UPDATE CHECK HERE output+="Termux APK Update Status: $(check_apk_update) "