Files
XDA/generate_xda_thread.sh
2025-03-23 14:44:54 +09:00

321 lines
14 KiB
Bash
Executable File

#!/bin/bash
GREEN='\033[0;32m'
BLUE='\033[0;34m'
RED='\033[0;31m'
ENDCOLOR='\033[0m'
display_header() {
echo -e "${GREEN}===========================================================${ENDCOLOR}"
echo -e "${BLUE} ______ __ __ _ _ __ ${ENDCOLOR}"
echo -e "${BLUE} / ____/ ______ / /_ __/ /_(_)___ ____ | |/ / ${ENDCOLOR}"
echo -e "${BLUE} / __/ | | / / __ \/ / / / / __/ / __ \/ __ \ | / ${ENDCOLOR}"
echo -e "${BLUE} / /___ | |/ / /_/ / / /_/ / /_/ / /_/ / / / / / | ${ENDCOLOR}"
echo -e "${BLUE} /_____/ |___/\____/_/\__,_/\__/_/\____/_/ /_/ /_/|_| ${ENDCOLOR}"
echo -e "${BLUE} ${ENDCOLOR}"
echo -e "${BLUE} XDA thread generator ${ENDCOLOR}"
echo -e "${BLUE} ${ENDCOLOR}"
echo -e "${BLUE} #KeepEvolving ${ENDCOLOR}"
echo -e "${GREEN}===========================================================${ENDCOLOR}"
}
generate_thread() {
clear && display_header
# Device manufacturer
while true; do
read -p "Manufacturer name: " manufacturer
if [[ $manufacturer =~ [0-9] ]]; then
echo "Manufacturer name should not contain numbers. Please try again."
continue
fi
manufacturer_lowercase=$(echo "$manufacturer" | tr '[:upper:]' '[:lower:]')
case $manufacturer_lowercase in
"google")
manufacturer_name="[SIZE=6][B][COLOR=rgb(0, 96, 255)]G[/COLOR][COLOR=rgb(184, 49, 47)]o[/COLOR][COLOR=rgb(250, 197, 28)]o[/COLOR][COLOR=rgb(0, 96, 255)]g[/COLOR][COLOR=rgb(97, 189, 109)]l[/COLOR][COLOR=rgb(184, 49, 47)]e[/COLOR][/B][/SIZE]"
;;
"oneplus")
manufacturer_name="[B][COLOR=rgb(226, 80, 65)][SIZE=6]OnePlus[/SIZE][/COLOR][/B]"
;;
"xiaomi")
manufacturer_name="[B][COLOR=rgb(251, 160, 38)][SIZE=6]Xiaomi[/SIZE][/COLOR][/B]"
;;
*)
manufacturer_name="[B][COLOR=rgb(0, 96, 255)][SIZE=6]$(tr '[:lower:]' '[:upper:]' <<< ${manufacturer:0:1})${manufacturer:1}[/SIZE][/COLOR][/B]"
;;
esac
break
done
# Device name & codename
if [ ! -z "$manufacturer_name" ]; then
echo "Device names (separated by ',' and/or '&' e.g Pixel 7, 7 Pro & 7a): "
read -r devices
devices=$(echo "$devices" | sed 's/\s*\(,\|&\)\s*/\1/g')
IFS=',&' read -ra device_array <<< "$devices"
device_count=${#device_array[@]}
if [ $device_count -eq 1 ]; then
device="${device_array[0]}"
device_name="[COLOR=rgb(0, 96, 255)][B][SIZE=6]$device[/SIZE][/B][/COLOR]"
echo "Codename for $device: "
read codename
codenames="[COLOR=rgb(0, 96, 255)][B][SIZE=6][$codename][/SIZE][/B][/COLOR]"
else
device_name="[COLOR=rgb(0, 96, 255)][B][SIZE=6]"
codenames="[COLOR=rgb(0, 96, 255)][B][SIZE=6]"
for ((i=0; i<$device_count; i++)); do
device="${device_array[i]}"
device_name+="$device"
echo "Codename for $device: "
read codename
codenames+="[$codename]"
if [ $i -ne $(($device_count - 1)) ]; then
if [ $i -eq $(($device_count - 2)) ]; then
device_name+=" & "
codenames+=""
else
device_name+=", "
codenames+=""
fi
fi
done
device_name+="[/SIZE][/B][/COLOR]"
codenames+="[/SIZE][/B][/COLOR]"
fi
# Banner styles
while true; do
echo "Choose the banner style:"
echo "1. Center punch-hole notch"
echo "2. Left side punch-hole notch"
echo "3. No notch"
echo "4. Pop up camera"
echo "5. Tablet"
read -p "Enter your choice (1-5): " banner_style
case $banner_style in
1) banner_image="banner_style_1.png"; break;;
2) banner_image="banner_style_2.png"; break;;
3) banner_image="banner_style_3.png"; break;;
4) banner_image="banner_style_4.png"; break;;
5) banner_image="banner_style_5.png"; break;;
*) echo "Invalid choice. Please enter a number between 1 and 5.";;
esac
done
# Security patch URL/Name
while true; do
read -p "Security patch level (mm/yyyy): " security_patch_level
patch_month=${security_patch_level%%/*}
patch_year=${security_patch_level##*/}
if [[ $security_patch_level =~ ^[0-9]{2}/[0-9]{4}$ && $patch_month -ge 1 && $patch_month -le 12 ]]; then
patch_month_full=$(date -d "$patch_month/1" +%B)
security_patch_level_date="$patch_month_full $patch_year"
security_patch_url="https://source.android.com/security/bulletin/$patch_year-$patch_month-01"
current_date=$(date +%Y%m)
provided_date=$(printf "%d%02d" "$patch_year" "$patch_month")
if [[ $provided_date -le $current_date ]]; then
break
else
echo -e "${RED}The provided date is in the future. Please enter a valid date.${ENDCOLOR}"
fi
else
echo -e "${RED}Invalid format or out of range. Please use mm/yyyy format with a valid month and year.${ENDCOLOR}"
fi
done
# XDA second post URL
while true; do
read -p "XDA thread second post URL (this is where your download links should reside): " installation_images_url
if [[ $installation_images_url =~ ^https://xdaforums\.com/t/ ]]; then
break
else
echo -e "${RED}Invalid format. Please enter a URL starting with 'https://xdaforums.com/t/'.${ENDCOLOR}"
fi
done
# Manifest URL & Android version
while true; do
branches=($(curl -s "https://api.github.com/repos/Evolution-X/manifest/branches" | jq -r '.[].name'))
echo "Available branches:"
for index in "${!branches[@]}"; do
printf "%s) %s\n" "$((index+1))" "${branches[index]}"
done
read -p "Select the manifest branch used for compilation: " branch_index
if [[ ! "$branch_index" =~ ^[0-9]+$ || $branch_index -le 0 || $branch_index -gt ${#branches[@]} ]]; then
echo -e "${RED}Invalid selection. Please enter a valid option (1-${#branches[@]}).${ENDCOLOR}"
continue
fi
selected_branch=${branches[$((branch_index-1))]}
raw_manifest_url="https://raw.githubusercontent.com/Evolution-X/manifest/$selected_branch/default.xml"
xml_data=$(curl -s "$raw_manifest_url")
tree_url="https://github.com/Evolution-X/manifest/tree/$selected_branch"
if [[ ! -z "$xml_data" ]]; then
android_version=$(echo "$xml_data" | grep -oP '(?<=revision="refs/tags/android-)[^"]+')
if [[ ! -z "$android_version" ]]; then
echo -e "${GREEN}Android version detected: $android_version${ENDCOLOR}"
blob_manifest_url="https://github.com/Evolution-X/manifest/blob/$selected_branch/"
break
else
echo -e "${RED}Android version not found in the XML.${ENDCOLOR}"
fi
else
echo -e "${RED}Failed to fetch XML data from $raw_manifest_url.${ENDCOLOR}"
fi
done
# Kernel source URL
while true; do
read -p "Kernel Source URL: " kernel_source_url
if [[ $kernel_source_url =~ ^(https?://)?(www\.)?(github\.com|gitlab\.com|bitbucket\.org|git\.com|android.googlesource\.com)(.*) ]]; then
break
else
echo -e "${RED}Invalid format. Please enter a valid URL from GitHub, GitLab, Bitbucket, or any other Git hosting service.${ENDCOLOR}"
fi
done
# Clang version
while true; do
read -p "Clang Version: " clang_version
if [[ $clang_version =~ ^[0-9]+(\.[0-9]+)*$ ]]; then
break
else
echo -e "${RED}Invalid format. Please enter a Clang version in the format of only numbers with optional decimal points (e.g., 14.0.7).${ENDCOLOR}"
fi
done
# Maintainer name
while true; do
read -p "Your full name: " maintainer_name
if [[ ! $maintainer_name =~ [0-9] ]]; then
break
else
echo -e "${RED}Invalid name. Please enter your full name without numbers.${ENDCOLOR}"
fi
done
# XDA profile URL
while true; do
read -p "XDA profile URL: " xda_profile_url_full
if [[ $xda_profile_url_full =~ ^https://xdaforums\.com/m/[[:alnum:]._%-]+.[[:digit:]]+/ ]]; then
break
else
echo -e "${RED}Invalid format. Please enter a URL in the format: https://xdaforums.com/m/username.123456/${ENDCOLOR}"
fi
done
xda_username=$(echo "$xda_profile_url_full" | awk -F'/' '{print $(NF-1)}')
xda_profile_url="https://xdaforums.com/m/$xda_username/"
# Donation URL
while true; do
read -p "Donation URL: " donation_url
if [[ $donation_url =~ ^https?:// ]]; then
break
else
echo -e "${RED}Invalid format. Please enter a valid URL starting with 'http://' or 'https://'.${ENDCOLOR}"
fi
done
cat << EOF > /tmp/generated_xda_thread.txt
[CENTER]
$manufacturer_name $device_name
$codenames
[IMG]https://raw.githubusercontent.com/Evolution-X/XDA/udc/assets/$banner_image[/IMG]
[SIZE=5][B][COLOR=#0060FF][B]Pixel UI, customization and more, we are Evolution X![/B][/COLOR][/B][/SIZE]
[URL='https://xdaforums.com/m/joeyhuab.4936496/']Joey Huab[/URL] - Founder/Lead Developer
[URL='https://xdaforums.com/m/anierinb.7125966/']Anierin Bliss[/URL] - Co-Founder/Co-Developer
[URL='https://xdaforums.com/m/realakito.9008281/']Akito Mizukito[/URL] - Co-Founder/Project Manager
Check out our [URL='https://evolution-x.org/']website[/URL]!
[IMG]https://raw.githubusercontent.com/Evolution-X/XDA/udc/assets/features.png[/IMG]
[URL='https://github.com/Evolution-X/XDA/blob/udc/features.md']Added features[/URL]
[IMG]https://raw.githubusercontent.com/Evolution-X/XDA/udc/assets/known_issues.png[/IMG]
[SIZE=5][B][COLOR=red]DO NOT FLASH GAPPS, THEY ARE ALREADY INCLUDED[/COLOR][/B][/SIZE]
[B][IMG]https://raw.githubusercontent.com/Evolution-X/XDA/udc/assets/installation.png[/IMG][/B]
[SPOILER]
[SIZE=5][B][COLOR=rgb(0, 96, 255)][SIZE=5][B]First Time Install[/B][/SIZE][/COLOR][/B][/SIZE]
[COLOR=rgb(251, 160, 38)](Note: These releases include firmware)[/COLOR]
1. Download boot, dtbo, vendor_kernel_boot, vendor_boot & rom for your device from [URL='$installation_images_url']here[/URL]
2. Reboot to bootloader
3. fastboot flash boot boot.img
fastboot flash dtbo dtbo.img
fastboot flash vendor_kernel_boot vendor_kernel_boot.img
fastboot flash vendor_boot vendor_boot.img
fastboot reboot recovery
4. While in recovery, navigate to Factory reset -> Format data/factory reset and confirm to format the device.
5. When done formatting, go back to the main menu and then navigate to Apply update -> Apply from ADB
6. adb sideload rom.zip (replace "rom" with actual filename)
7 (optional). Reboot to recovery (fully) to sideload any add-ons (e.g magisk)
8. Reboot to system & #KeepEvolving
[SIZE=5][B][COLOR=rgb(0, 96, 255)]Update[/COLOR][/B][/SIZE]
[SIZE=3]1. Reboot to recovery
2. While in recovery, navigate to Apply update -> Apply from ADB
3. adb sideload rom.zip (replace "rom" with actual filename)[/SIZE]
4 (optional). Reboot to recovery to sideload any add-ons (e.g magisk)
[SIZE=3]5. Reboot to system & #KeepEvolving
[COLOR=rgb(0, 96, 255)][SIZE=5][B]OTA[/B][/SIZE][/COLOR][/SIZE]
[SIZE=3]1. Check for update. If available, select "Download and install" (approx 10-15 min)
2. Reboot & #KeepEvolving[/SIZE]
[/SPOILER]
[URL='$donation_url'][IMG width="200px" height="180px"]https://raw.githubusercontent.com/Evolution-X/XDA/udc/assets/donate_to_me.png[/IMG][/URL][URL='https://discord.gg/3qbSZHx'][IMG width="200px" height="180px"]https://raw.githubusercontent.com/Evolution-X/XDA/udc/assets/official_chat.png[/IMG][/URL][/CENTER]
[TABLE]
[TR]
[TD][IMG]https://raw.githubusercontent.com/Evolution-X/XDA/udc/assets/source.png[/IMG][/TD]
[/TR]
[TR]
[TD][B][COLOR=rgb(97, 189, 109)]Android version[/COLOR]:[/B] [URL='$tree_url']$android_version[/URL][/TD]
[/TR]
[TR]
[TD][B][COLOR=rgb(184, 49, 47)]Security patch level[/COLOR]:[/B] [URL='$security_patch_url']$security_patch_level_date[/URL][/TD]
[/TR]
[TR]
[TD][B][COLOR=rgb(41, 105, 176)]Build author[/COLOR]:[/B] [URL='$xda_profile_url']$maintainer_name[/URL][/TD]
[/TR]
[TR]
[TD][B][COLOR=rgb(65, 168, 95)]Kernel Source[/COLOR]:[/B] [URL]$kernel_source_url[/URL][/TD]
[/TR]
[TR]
[TD][COLOR=rgb(243, 121, 52)][B]Clang version:[/B] $clang_version[/COLOR][/TD]
[/TR]
[TR]
[TD][B][COLOR=rgb(41, 105, 176)]ROM Developer[/COLOR]:[/B] [URL='https://xdaforums.com/member.php?u=4936496']Joey Huab[/URL] & [URL='https://xdaforums.com/m/anierinb.7125966/']Anierin Bliss[/URL][/TD]
[/TR]
[TR]
[TD][B][COLOR=rgb(97, 189, 109)]Source code[/COLOR]:[/B] [URL]https://github.com/Evolution-X[/URL][/TD]
[/TR]
[/TABLE]
[CENTER][/CENTER]
EOF
echo -e "${GREEN}Thread saved to '/tmp/generated_xda_thread.txt'${ENDCOLOR}"
fi
}
generate_thread