#!/bin/bash cd /var/www/html || exit 1 # First, let's clear the F-Droid index rm -f repo/index* rm -f repo/entry.jar # Make sure we have the tools we need command -v aapt >/dev/null 2>&1 || { echo "Error: aapt is required but not installed. Please install Android SDK build tools."; exit 1; } command -v jq >/dev/null 2>&1 || { echo "Error: jq is required but not installed. Please install jq for JSON parsing."; exit 1; } # Configuration GITEA_URL="https://git.felo.gg" REPO_OWNER="FeloStore" REPO_NAME="Data" RELEASE_TAG="latest" # Function to extract version from APK get_version() { apk_file=$1 version=$(aapt dump badging "$apk_file" 2>/dev/null | grep versionName | awk -F"'" '{print $4}') echo "$version" } # Function to download and update only if changed update_app() { app_name=$1 app_url=$2 echo "Processing $app_name..." # Create temp directory mkdir -p ./temp # Download to temp file wget -q -O "./temp/${app_name}.apk.new" "$app_url" # Check if download was successful if [ ! -f "./temp/${app_name}.apk.new" ] || [ ! -s "./temp/${app_name}.apk.new" ]; then echo " ✗ $app_name: Download failed, skipping..." rm -f "./temp/${app_name}.apk.new" return fi # Extract version info from the new APK new_version=$(get_version "./temp/${app_name}.apk.new") echo " Downloaded version: $new_version" # Check if app exists and if it's different if [ -f "./repo/${app_name}.apk" ]; then # Extract version info from the existing APK current_version=$(get_version "./repo/${app_name}.apk") echo " Current version: $current_version" # Compare files (binary comparison to be absolutely sure) if ! cmp -s "./temp/${app_name}.apk.new" "./repo/${app_name}.apk"; then echo " ✓ $app_name: New version detected ($current_version → $new_version), updating..." mv "./temp/${app_name}.apk.new" "./repo/${app_name}.apk" touch -d "$(date +%Y-%m-%d)" "./repo/${app_name}.apk" else echo " ✓ $app_name: No changes detected (version $current_version), keeping existing version" rm "./temp/${app_name}.apk.new" fi else echo " ✓ $app_name: File does not exist yet, adding version $new_version..." mv "./temp/${app_name}.apk.new" "./repo/${app_name}.apk" touch -d "$(date +%Y-%m-%d)" "./repo/${app_name}.apk" fi } # Function to get app name from filename get_app_name() { filename=$1 # Remove .apk extension and convert to proper case app_name=$(basename "$filename" .apk) # Convert first letter to uppercase app_name=$(echo "$app_name" | sed 's/^\(.\)/\U\1/') echo "$app_name" } echo "Fetching release information from Gitea..." # Get release information from Gitea API RELEASE_API_URL="${GITEA_URL}/api/v1/repos/${REPO_OWNER}/${REPO_NAME}/releases/tags/${RELEASE_TAG}" release_info=$(wget -q -O - "$RELEASE_API_URL") if [ -z "$release_info" ]; then echo "Error: Could not fetch release information from Gitea API" exit 1 fi # Extract APK download URLs from the release apk_urls=$(echo "$release_info" | jq -r '.assets[] | select(.name | endswith(".apk")) | .browser_download_url') if [ -z "$apk_urls" ]; then echo "Error: No APK files found in the latest release" exit 1 fi echo "Found APK files in release:" echo "$apk_urls" | while read -r url; do filename=$(basename "$url") echo " - $filename" done # Process each APK echo "$apk_urls" | while read -r url; do if [ -n "$url" ]; then filename=$(basename "$url") app_name=$(get_app_name "$filename") update_app "$app_name" "$url" fi done # Clean up temp directory rm -rf ./temp echo "Updating F-Droid repository..." /root/.local/bin/fdroid update -c --allow-disabled-algorithms echo "Done! Repository updated with all available apps."