110 lines
3.5 KiB
Bash
Executable File
110 lines
3.5 KiB
Bash
Executable File
#!/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() {
|
|
filename=$1
|
|
app_url=$2
|
|
|
|
echo "Processing $filename..."
|
|
|
|
# Create temp directory
|
|
mkdir -p ./temp
|
|
|
|
# Download to temp file
|
|
wget -q -O "./temp/${filename}.new" "$app_url"
|
|
|
|
# Check if download was successful
|
|
if [ ! -f "./temp/${filename}.new" ] || [ ! -s "./temp/${filename}.new" ]; then
|
|
echo " ✗ $filename: Download failed, skipping..."
|
|
rm -f "./temp/${filename}.new"
|
|
return
|
|
fi
|
|
|
|
# Extract version info from the new APK
|
|
new_version=$(get_version "./temp/${filename}.new")
|
|
echo " Downloaded version: $new_version"
|
|
|
|
# Check if app exists and if it's different
|
|
if [ -f "./repo/${filename}" ]; then
|
|
# Extract version info from the existing APK
|
|
current_version=$(get_version "./repo/${filename}")
|
|
echo " Current version: $current_version"
|
|
|
|
# Compare files (binary comparison to be absolutely sure)
|
|
if ! cmp -s "./temp/${filename}.new" "./repo/${filename}"; then
|
|
echo " ✓ $filename: New version detected ($current_version → $new_version), updating..."
|
|
mv "./temp/${filename}.new" "./repo/${filename}"
|
|
touch -d "$(date +%Y-%m-%d)" "./repo/${filename}"
|
|
else
|
|
echo " ✓ $filename: No changes detected (version $current_version), keeping existing version"
|
|
rm "./temp/${filename}.new"
|
|
fi
|
|
else
|
|
echo " ✓ $filename: File does not exist yet, adding version $new_version..."
|
|
mv "./temp/${filename}.new" "./repo/${filename}"
|
|
touch -d "$(date +%Y-%m-%d)" "./repo/${filename}"
|
|
fi
|
|
}
|
|
|
|
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")
|
|
update_app "$filename" "$url"
|
|
fi
|
|
done
|
|
|
|
# Clean up temp directory
|
|
rm -rf ./temp
|
|
|
|
echo "Updating F-Droid repository..."
|
|
/root/.local/bin/fdroid update --allow-disabled-algorithms
|
|
|
|
echo "Done! Repository updated with all available apps." |