466 lines
19 KiB
Bash
Executable file
466 lines
19 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# _______________ ______ ______ ______
|
|
# ___ ____/__ /_____ __________ /____ /_______ _________ /__
|
|
# __ /_ __ /_ __ `/_ ___/_ __ \_ __ \ __ `/ ___/_ //_/
|
|
# _ __/ _ / / /_/ /_(__ )_ / / / /_/ / /_/ // /__ _ ,<
|
|
# /_/ /_/ \__,_/ /____/ /_/ /_//_.___/\__,_/ \___/ /_/|_|
|
|
# "Backup, restore, and share your iOS setups."
|
|
|
|
# Notes:
|
|
# ** This is a dangerous script if something goes wrong. **
|
|
# Should be using printf instead of 'echo -e'
|
|
# "set -e" should be used instead of || (at least we have some fancy debug messages)
|
|
# DO NOT USE "cp -f" WHEN REPLACING SYSTEM FILES. Its dangerous, but yet no other solution comes to mind.
|
|
|
|
DEBUG="echo" # set to "echo" to avoid running commands that edit the filesystem.
|
|
FLASHBACKDIR="/Library/FlashBack"
|
|
BACKUPNAME=$(date +%m-%d-%y-`cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 8 | head -n 1`)
|
|
BACKUPLOCATION=
|
|
STATUS=
|
|
SELECTLOCATION=
|
|
AUTOBACKUPLOCATION=
|
|
DELETEBACKUP=
|
|
DELETESELECT=
|
|
|
|
BKPVERSION="v2"
|
|
PKGVERSION="1.7"
|
|
|
|
# report(){ # report to dev example function
|
|
# echo "$foo-bar has went wrong"
|
|
# echo "Report the dev if this happens more than once"
|
|
# exit 1 ; fi ;} # Kill the script
|
|
|
|
killIfIdle(){ #Flashback checks for timeouts and kills itsself if idle for too long
|
|
if [[ $? -eq 142 ]]; then
|
|
echo -e "\n\e[0;100m[!]\e[0m \e[104mTo save battery, FlashBack has stopped itself due to lack of activity!\e[0m"
|
|
rm -r -f $FLASHBACKDIR/tmp &>/dev/null #clear temp/working files
|
|
exit 0 #kills itself
|
|
fi
|
|
}
|
|
|
|
prgmNav(){
|
|
if [[ $LASTINPUT = "QUIT" ]]; then
|
|
echo -e "\n\e[0;100m[!]\e[0m \e[104mThanks for using FlashBack!\e[0m"
|
|
rm -r -f $FLASHBACKDIR/tmp &>/dev/null #clear temp/working files
|
|
exit 1 #kills child function
|
|
fi
|
|
if [[ $LASTINPUT = "BACK" ]]; then
|
|
echo -e "\n\e[0;100m[!]\e[0m \e[104mNavigating Back...\e[0m"
|
|
rm -r -f $FLASHBACKDIR/tmp &>/dev/null #clear temp/working files
|
|
displayMenu
|
|
fi
|
|
}
|
|
|
|
tests() {
|
|
if [ ! $(id -u) = "0" ] ; then # root check
|
|
echo -e "\a\n\e[0;100m[*]\e[0m \e[1;31mMust be \e[4;37mroot\e[0m \n\e[1;31m\e[0;100m[*]\e[0m Current User is\e[0m \e[4;37m$USER\e[0m\n"
|
|
exit 1 ; fi
|
|
|
|
if [ ! -d $FLASHBACKDIR/Backups ] ; then # check for /Library/Flashback/Backups, ask the user to create it if it doesn't exist.
|
|
echo -e "\n\e[0;100m[*]\e[0m\e[1;31m Directory $FLASHBACKDIR/Backups doesn't exist!\e[0m \n\n\e[1;37mShall it be created?\e[0m"
|
|
read -rp " [y/N] " -t 15 RESPONSE # https://stackoverflow.com/questions/3231804/in-bash-how-to-add-are-you-sure-y-n-to-any-command-or-alias
|
|
LASTINPUT=$RESPONSE
|
|
prgmNav && killIfIdle
|
|
|
|
if [[ "$RESPONSE" =~ ^([yY][eE][sS]|[yY])+$ ]] # Couldn't remember the expression for this.
|
|
then # Do it.
|
|
mkdir -p $FLASHBACKDIR/Backups || exit 1
|
|
else # or Abort.
|
|
echo -e "\n\e[1;97m\"Run away! Run away!\" \e[0m\n"
|
|
exit 1; fi; fi ;}
|
|
# -----------------------\
|
|
|
|
pause(){
|
|
read -sp "`echo -e '\n\e[0;100m[!]\e[0m \e[104mPress enter to continue...\e[0m'`" -t 10 # read has a timeout function that could be used to advance the script by its own.
|
|
killIfIdle
|
|
echo -e "\n" ;
|
|
displayMenu
|
|
}
|
|
|
|
# -----------------------\
|
|
|
|
shopt -s extglob # "Shell option set extglob" https://www.linuxjournal.com/content/bash-extended-globbing
|
|
|
|
# -----------------------\
|
|
|
|
one() { # Function that backs-up the current preferences
|
|
set -f # "Disable file name generation (globbing)."
|
|
|
|
TEMPBACKUPNAME=
|
|
read -p "`echo -e '\n\e[0;100m[!]\e[0m \e[104mEnter backup name...\e[0m'` > " -t 30 TEMPBACKUPNAME # BACKUPNAME has the date
|
|
LASTINPUT=$TEMPBACKUPNAME
|
|
prgmNav && killIfIdle
|
|
|
|
TEMPBACKUPNAME=${TEMPBACKUPNAME//[^a-zA-Z0-9-.]/} # Stop bad inputs
|
|
if [[ $TEMPBACKUPNAME = "" ]] ; then
|
|
echo -e "\n\e[0;100m[!]\e[0m \e[104mBad or no input... Using $BACKUPNAME instead\e[0m"
|
|
else
|
|
TEMPBACKUPNAME=${TEMPBACKUPNAME//[^a-zA-Z0-9-.]/}
|
|
BACKUPNAME=$TEMPBACKUPNAME; fi
|
|
set +f
|
|
BACKUPLOCATION=$FLASHBACKDIR/Backups/$BACKUPNAME
|
|
mkdir -p $BACKUPLOCATION/{Preferences,SBFolder,AutoWall} || STATUS="mkdir failed"
|
|
echo -e "\n\e[0;100m[!]\e[0m \e[104mCopying to $BACKUPLOCATION\e[0m"
|
|
|
|
cp -rf "/var/mobile/Library/Preferences/"!(com.apple*|com.saurik*|ckkeyrolld|nfcd|UITextInputContextIdentifiers|.GlobalPreferences).plist $BACKUPLOCATION/Preferences/ || STATUS="cp failed" #copy all non-apple Plists to Preference folder within backup haha
|
|
cp -rf "/var/mobile/Library/Preferences/"*(*.jpg|*.png|*.gif) $BACKUPLOCATION/Preferences/ &>/dev/null #copy all images to Preference folder within backup
|
|
cp -rf /var/mobile/Library/SpringBoard/@(*Icon*|*Background*|SB*) $BACKUPLOCATION/SBFolder/ || STATUS="cp failed" #copy IconState Plist to SBFolder folder within backup
|
|
if [[ -d /var/mobile/Media/AutoWall/ ]]
|
|
then
|
|
cp -rf "/var/mobile/Media/AutoWall/"* "$BACKUPLOCATION/AutoWall/"
|
|
fi
|
|
touch $BACKUPLOCATION/$BKPVERSION
|
|
|
|
# |||||||||||||||||||||||||||||||||||
|
|
if [[ ! $STATUS = "" ]] ; then
|
|
echo -e "\a\n\e[0;100m[*]\e[0m \e[1;31mSomething went wrong: $STATUS \e[0m\n"
|
|
exit 1 ; fi # TODO MCApollo: Make a report to developer function.
|
|
# //////////////////////////////////
|
|
|
|
echo -e "\n\e[104m Success! \e[0m \n"
|
|
|
|
pause ;}
|
|
|
|
# -----------------------\
|
|
|
|
two() {
|
|
|
|
echo -e "\n\e[104m Available Backups: \e[0m \n"
|
|
for i in $(ls $FLASHBACKDIR/Backups/ || echo "#CRTL-C_to_exit#") ; do # Find and sed are not default commands- can't exclude files.
|
|
echo -e " \e[100m---->\e[0m \e[33m$i\e[0m" ; done
|
|
|
|
SELECTBACKUP=
|
|
while [[ $SELECTBACKUP = "" ]] ; do
|
|
set -f
|
|
unset RESET
|
|
read -p "`echo -e '\n\e[0;100m[!]\e[0m \e[104mSelect Backup\e[0m'` -> " -t 20 SELECTBACKUP
|
|
LASTINPUT=$SELECTBACKUP
|
|
prgmNav && killIfIdle
|
|
|
|
SELECTBACKUP=${SELECTBACKUP//[^a-zA-Z0-9-.]/}
|
|
if [[ $SELECTBACKUP = "" ]] ; then
|
|
echo -e "\n\e[0;100m[*]\e[0m \e[1;31mBad or no input!\e[0m\n"
|
|
RESET="YES"; fi
|
|
if [[ ! -d $FLASHBACKDIR/Backups/$SELECTBACKUP ]] && [[ -z ${RESET+x} ]] ; then
|
|
echo -e "\n\e[0;100m[*]\e[0m \e[1;31mNo backup with that name exists!\e[0m"
|
|
SELECTBACKUP="" ; fi
|
|
|
|
set +f ; done
|
|
|
|
SELECTLOCATION=$FLASHBACKDIR/Backups/$SELECTBACKUP
|
|
|
|
if [ -f $SELECTLOCATION/$BKPVERSION ]
|
|
then
|
|
echo -e "\n\e[0;100m[!]\e[0m \e[104mIt's recommended to make an Autobackup before you restore.\e[0m"
|
|
echo -e "\n\e[0;100m[!]\e[0m \e[104mWould you like to do that now?\e[0m"
|
|
read -rp " [y/N] " -t 15 RESPONSE # https://stackoverflow.com/questions/3231804/in-bash-how-to-add-are-you-sure-y-n-to-any-command-or-alias
|
|
if [[ "$RESPONSE" =~ ^([yY][eE][sS]|[yY])+$ ]] # Couldn't remember the expression for this.
|
|
then # Do it.
|
|
|
|
AUTOBACKUPLOCATION=$FLASHBACKDIR/Backups/AutoBackup_$(date '+%d-%m-%Y_%H:%M:%S')
|
|
|
|
echo -e "\n\e[0;100m[!]\e[0m \e[104mMoving current Preferences to $AUTOBACKUPLOCATION\e[0m"
|
|
|
|
mkdir -p $AUTOBACKUPLOCATION/{Preferences,SBFolder,AutoWall} || STATUS="mkdir failed"
|
|
cp "/var/mobile/Library/Preferences/"!(com.apple*|com.saurik*|ckkeyrolld|nfcd|UITextInputContextIdentifiers).plist $AUTOBACKUPLOCATION/Preferences || STATUS="cp failed"
|
|
cp -rf "/var/mobile/Library/Preferences/"*(*.jpg|*.png|*.gif) $BACKUPLOCATION/Preferences/ || STATUS="cp failed"
|
|
cp -r /var/mobile/Library/SpringBoard/@(*Icon*|*Background*|SB*) $AUTOBACKUPLOCATION/SBFolder/ || STATUS="cp failed"
|
|
if [[ -d /var/mobile/Media/AutoWall/ ]]
|
|
then
|
|
cp -rf "/var/mobile/Media/AutoWall/"* "$AUTOBACKUPLOCATION/AutoWall/" || STATUS="cp failed"
|
|
fi
|
|
touch $AUTOBACKUPLOCATION/$BKPVERSION
|
|
fi
|
|
|
|
echo -e "\n\e[0;100m[!]\e[0m \e[104mCopying Backup to appropriate system directories...\e[0m"
|
|
|
|
cp -r $SELECTLOCATION/Preferences/* /var/mobile/Library/Preferences/ || STATUS="cp failed"
|
|
cp -r $SELECTLOCATION/SBFolder/* /var/mobile/Library/SpringBoard/ || STATUS="cp failed"
|
|
if [[ -d $SELECTLOCATION/AutoWall/ ]]
|
|
then
|
|
cp -rf "$SELECTLOCATION/AutoWall/"* "/var/mobile/Media/AutoWall/" &>/dev/null
|
|
fi
|
|
|
|
echo -e "\n\e[0;100m[*]\e[0m \e[104mRebuilding image cache...\e[0m"
|
|
|
|
uicache || STATUS="uicache failed"
|
|
recache --no respring &>/dev/null || echo -e "\n\e[0;100m[*]\e[0m \e[104mAnemone not installed. Recache ignored.\e[0m"
|
|
killall cfprefsd #Clear settings caches - thanks to Grant/NewD
|
|
|
|
if [[ ! $STATUS = "" ]] ; then
|
|
echo -e "\a\n\e[0;100m[*]\e[0m \e[1;31mSomething went wrong: $STATUS \e[0m\n"
|
|
exit 1 ; fi # TODO: Make a report to developer function.
|
|
|
|
if [ -z ${SSH_TTY+x} ] ; then # Should we kill SpringBoard or not?
|
|
# This is NewTerm
|
|
echo -e "\a\n\e[0;100m[!]\e[0m \e[1;31mKilling SpringBoard \e[0m\n\n\e[0;100m Thank you for using Flashback! \e[0m"
|
|
killall -9 SpringBoard && exit 0 # Kill the script.
|
|
else
|
|
# This is a SSH Session
|
|
echo -e "\a\n\e[0;100m[!]\e[0m \e[1;31mKilling SpringBoard \e[0m\n\n\e[0;100m Thank you for using Flashback! \e[0m"
|
|
killall -9 SpringBoard
|
|
fi
|
|
|
|
else
|
|
|
|
echo -e "\n\e[0;100m[*]\e[0m \e[1;31mIncompatible Backup Version!\e[0m"
|
|
|
|
fi
|
|
pause ;}
|
|
|
|
three(){ # Function that deletes backups
|
|
echo -e "\n\e[104m Available Backps: \e[0m \n"
|
|
for i in $(ls $FLASHBACKDIR/Backups/ || echo "#CRTL-C_to_exit#") ; do # Find and sed are not default commands- can't exclude files.
|
|
echo -e " \e[100m---->\e[0m \e[33m$i\e[0m" ; done
|
|
|
|
DELETEBACKUP=
|
|
while [[ $DELETEBACKUP = "" ]] ; do
|
|
unset RESET
|
|
set -f
|
|
read -p "`echo -e '\n\e[0;100m[!]\e[0m \e[104mSelect Backup\e[0m'` -> " -t 30 DELETEBACKUP
|
|
LASTINPUT=$DELETEBACKUP
|
|
prgmNav && killIfIdle
|
|
DELETELOCATION=$FLASHBACKDIR/Backups/$DELETEBACKUP
|
|
#DELETEBACKUP=${DELETEBACKUP//[^a-zA-Z0-9-.]/}
|
|
if [[ $DELETEBACKUP = "" ]]; then
|
|
echo -e "\n\e[0;100m[*]\e[0m \e[1;31mBad or no input!\e[0m"
|
|
RESET="YES" ; fi
|
|
if [[ ! -d $DELETELOCATION ]] && [[ -z ${RESET+x} ]] ; then
|
|
echo -e "\n\e[0;100m[*]\e[0m \e[1;31mNo backup with that name exists!\e[0m"
|
|
DELETEBACKUP="" ; fi
|
|
set +f ; done
|
|
|
|
DELETECP=
|
|
echo -e "\n\e[0;100m[!]\e[0m\e[1;31m Are you REALLY sure you want to delete this backup?\e[0m\n \n\e[1;37mType \"FLASHBACK\" exactly the way it is if you're sure!\e[0m\n"
|
|
read -p "`echo -e ' \e[0;100m---->\e[0m \e[1;31m'` " -t 45 DELETECP
|
|
LASTINPUT=$DELETECP
|
|
prgmNav && killIfIdle
|
|
if [[ $DELETECP = "FLASHBACK" ]]
|
|
then
|
|
echo -e "\n\e[0;100m[!]\e[0m \e[104mDeleting $DELETELOCATION\e[0m"
|
|
rm -r $DELETELOCATION
|
|
else
|
|
echo -e "\n\e[0;100m[!]\e[0m \e[104mNot deleting $DELETELOCATION\e[0m"; fi
|
|
|
|
pause ;}
|
|
|
|
four(){ # Function that deletes autobackups made in function two
|
|
DELETEAB=
|
|
echo -e "\n\e[0;100m[!]\e[0m\e[1;31m Are you REALLY sure you want to delete all AutoBackups?\e[0m\n \n\e[1;37mType \"FLASHBACK\" exactly the way it is if you're sure!\e[0m\n"
|
|
read -p "`echo -e ' \e[0;100m---->\e[0m \e[1;31m'` " -t 45 DELETEAB
|
|
LASTINPUT=$DELETEAB
|
|
prgmNav && killIfIdle
|
|
if [[ $DELETEAB = "FLASHBACK" ]]
|
|
then
|
|
echo -e "\n\e[0;100m[!]\e[0m \e[104mDeleting all autobackups...\e[0m"
|
|
rm -r $FLASHBACKDIR/Backups/AutoBackup*
|
|
else
|
|
echo -e "\n\e[0;100m[!]\e[0m \e[104mExiting...\e[0m"; fi
|
|
pause ;}
|
|
|
|
five(){ # I'm not going to painstakingly fix this. You gotta do that yourself. - Apollo
|
|
|
|
if [ ! -d /var/mobile/Documents/FlashBackDEBs/ ] ; then # check for /Library/Flashback/Backups, ask the user to create it if it doesn't exist.
|
|
echo -e "\n\e[0;100m[*]\e[0m\e[1;31m Directory /var/mobile/Documents/FlashBackDEBs/ doesn't exist!\e[0m \n\n\e[1;37mShall it be created?\e[0m"
|
|
read -rp " [y/N] " -t 15 RESPONSE # https://stackoverflow.com/questions/3231804/in-bash-how-to-add-are-you-sure-y-n-to-any-command-or-alias
|
|
LASTINPUT=$RESPONSE
|
|
prgmNav && killIfIdle
|
|
if [[ "$RESPONSE" =~ ^([yY][eE][sS]|[yY])+$ ]] # Couldn't remember the expression for this.
|
|
then # Do it.
|
|
mkdir -p /var/mobile/Documents/FlashBackDEBs/ || exit 1
|
|
else # or Abort.
|
|
echo -e "\n\e[1;97m\"Run away! Run away!\" \e[0m\n"
|
|
exit 1; fi; fi ;
|
|
|
|
echo -e "\n\e[104m Available Backps: \e[0m \n"
|
|
for i in $(ls $FLASHBACKDIR/Backups/ || echo "#CRTL-C_to_exit#") ; do # Find and sed are not default commands- can't exclude files.
|
|
echo -e " \e[100m---->\e[0m \e[33m$i\e[0m" ; done
|
|
read -p "`echo -e '\n\e[0;100m[!]\e[0m \e[104mChoose a Backup\e[0m'` > " -t 10 PACKAGEBACKUP
|
|
LASTINPUT=$PACKAGEBACKUP
|
|
prgmNav && killIfIdle
|
|
read -p "`echo -e '\n\e[0;100m[!]\e[0m \e[104mEnter Your UserName\e[0m'` > " -t 20 USERNAME
|
|
LASTINPUT=$USERNAME
|
|
prgmNav && killIfIdle
|
|
read -p "`echo -e '\n\e[0;100m[!]\e[0m \e[104mEnter A Short Description\e[0m'` > " -t 20 USERDESC
|
|
LASTINPUT=$USERDESC
|
|
prgmNav && killIfIdle
|
|
|
|
# TODO: MCApollo
|
|
# Clean the input, wildcard (*) makes it game over.
|
|
echo -e "\n\e[0;100m~~~~~~~~~~~~~~~~~~~~~~~~~~~\e[0m\n\nWould you like to specify dependancies?\nIf so, it's recommended to use iCleaner Pro to clean up unused preference files before you start.\n\n\e[0;100mAutomatic:\e[0m You select which packages are dependancies, for a streamlined installation.\nThis is highly recommended if you intend to host your setup on a repo, or share with other users.\n\n\e[0;100mManual:\e[0m Dependancies are not set for users, they must install the tweaks themselves.\nThis is recommended if you plan to use this setup personally.\n\n\e[0;100m~~~~~~~~~~~~~~~~~~~~~~~~~~~\e[0m"
|
|
read -p "`echo -e '\n\e[0;100m[!]\e[0m \e[104mWould you like to proceed in automatic mode? (yes/no)\e[0m'` > " -t 15 AUTOMODE
|
|
LASTINPUT=$AUTOMODE
|
|
prgmNav && killIfIdle
|
|
|
|
if [[ $AUTOMODE = "yes" ]]
|
|
then
|
|
read -p "`echo -e '\n\e[0;100m~~~~~~~~~~~~~~~~~~~~~~~~~~~\e[0m\n\n\e[0;100m[!]\e[0m Staring automatic mode. A list of installed packages will appear in a moment.\nUse that list to select which packages are dependancies. \e[104mPress enter to proceed.\e[0m'` > " -t 20
|
|
killIfIdle
|
|
apt-mark auto "gsc*" &> /dev/null || STATUS="apt-mark failed"
|
|
# For some reason, apt likes to seg fault. Maybe due to too much memory is being used?
|
|
echo -e "\n\e[0;100m~~~~~~~~~~~~~~~~~~~~~~~~~~~\e[0m"
|
|
apt-mark showmanual || STATUS="SEG FAULT"
|
|
|
|
# TODO: MCApollo
|
|
# Copy paste the STATUS check and exit if seg fault.
|
|
# Or better yet, the exit code is 139 if it's a seg fault.
|
|
# Use the exit code to see if apt seg fault; exit or try again once.
|
|
|
|
read -p "`echo -e '\e[0;100m~~~~~~~~~~~~~~~~~~~~~~~~~~~~\e[0m\n\e[0;100m[!]\e[0m \e[104mPlease copy all desired dependancies from above EXACTLY as they are displayed. Separate them with a comma and a space (, )\e[0m'` > " -t 600 USERSETDEPENDENCIES
|
|
LASTINPUT=$USERSETDEPENDENCIES
|
|
prgmNav && killIfIdle
|
|
fi
|
|
|
|
mkdir $FLASHBACKDIR/tmp
|
|
WORKINGDIR=$FLASHBACKDIR/tmp/$PACKAGEBACKUP
|
|
mkdir $WORKINGDIR
|
|
mkdir $WORKINGDIR/DEBIAN
|
|
|
|
mkdir -p $WORKINGDIR$FLASHBACKDIR/Backups/$PACKAGEBACKUP # Correct answer; you're hard-coding /Library/FlashBack
|
|
|
|
cp -r $FLASHBACKDIR"/Backups/"$PACKAGEBACKUP/!(control*) $WORKINGDIR/Library/FlashBack/Backups/$PACKAGEBACKUP/
|
|
|
|
if [[ $autoMode = "yes" ]]
|
|
then
|
|
|
|
cat > $WORKINGDIR/DEBIAN/control <<EOF
|
|
Package: com.$USERNAME.$PACKAGEBACKUP
|
|
Name: $PACKAGEBACKUP
|
|
Depends: com.mpg13.FlashBack, $USERSETDEPENDENCIES
|
|
architecture: iphoneos-arm
|
|
Version:$PKGVERSION
|
|
Description: $USERDESC
|
|
Maintainer: $USERNAME
|
|
Author: $USERNAME
|
|
Section: Addons (FlashBack)
|
|
EOF
|
|
|
|
else
|
|
|
|
cat > $WORKINGDIR/DEBIAN/control <<EOF
|
|
Package: com.$USERNAME.$PACKAGEBACKUP
|
|
Name: $PACKAGEBACKUP
|
|
Depends: com.mpg13.FlashBack
|
|
architecture: iphoneos-arm
|
|
Version:$PKGVERSION
|
|
Description: $USERDESC
|
|
Maintainer: $USERNAME
|
|
Author: $USERNAME
|
|
Section: Addons (FlashBack)
|
|
EOF
|
|
|
|
fi
|
|
|
|
dpkg-deb -Zgzip -b $WORKINGDIR &> /dev/null
|
|
echo -e "\e[0;100m[!]\e[0m Creating DEB..."
|
|
cp $WORKINGDIR.deb "/var/mobile/Documents/FlashBackDEBs/"
|
|
rm -r -f $FLASHBACKDIR/tmp
|
|
|
|
echo -e "\n\e[0;100m[!]\e[0mThe DEB can be found in /var/mobile/Documents/FlashBackDEBs/com.$USERNAME.$PACKAGEBACKUP.deb"
|
|
|
|
# TODO MCApollo
|
|
# Use dpkg-deb or dpkg to make sure it's a vaild package. (Maybe extract it?)
|
|
|
|
pause
|
|
}
|
|
|
|
six(){
|
|
|
|
#Provide Users a way to make any backup compatible with Latest version
|
|
|
|
echo -e "\n\e[91m [!] There is a chance\n that backing up an \n old backup can cause\n unwanted results. If \n you experience issues\n restoring to an updated\n backup, use the most\n recent autobackup to\n revert changes! \e[0m \n"
|
|
echo -e "\n\e[91m If you experience no\n issues after restoring,\n please overwrite the\n updated backup to ensure\n the best experience! \e[0m \n"
|
|
|
|
echo -e "\n\e[104m Available Backups: \e[0m \n"
|
|
for i in $(ls $FLASHBACKDIR/Backups/ || echo "#CRTL-C_to_exit#") ; do # Find and sed are not default commands- can't exclude files.
|
|
echo -e " \e[100m---->\e[0m \e[33m$i\e[0m" ; done
|
|
|
|
UPDATEBACKUP=
|
|
while [[ $UPDATEBACKUP = "" ]] ; do
|
|
set -f
|
|
unset RESET
|
|
read -p "`echo -e '\n\e[0;100m[!]\e[0m \e[104mSelect Backup\e[0m'` -> " -t 20 UPDATEBACKUP
|
|
prgmNav && killIfIdle
|
|
UPDATEBACKUP=${UPDATEBACKUP//[^a-zA-Z0-9-.]/}
|
|
if [[ $UPDATEBACKUP = "" ]] ; then
|
|
echo -e "\n\e[0;100m[*]\e[0m \e[1;31mBad or no input!\e[0m\n"
|
|
RESET="YES"; fi
|
|
if [[ ! -d $FLASHBACKDIR/Backups/$UPDATEBACKUP ]] && [[ -z ${RESET+x} ]] ; then
|
|
echo -e "\n\e[0;100m[*]\e[0m \e[1;31mNo backup with that name exists!\e[0m"
|
|
UPDATEBACKUP="" ; fi
|
|
|
|
set +f ; done
|
|
|
|
UPDATELOCATION=$FLASHBACKDIR/Backups/$UPDATEBACKUP
|
|
touch $UPDATELOCATION/$BKPVERSION
|
|
|
|
if [ -f $UPDATELOCATION/$BKPVERSION ]
|
|
then
|
|
echo -e "\n\e[0;100m[*]\e[0m \e[104mSuccess!\e[0m"
|
|
echo -e "\n\e[0;100m[*]\e[0m \e[104mYour Backup has been updated to work with this version of FlashBack!\e[0m"
|
|
fi
|
|
|
|
pause
|
|
}
|
|
|
|
readme(){
|
|
echo -e "\n\e[1;31m When inputting backup\n names,use plaintext\n and numbers ONLY!\n Special characters\n may result in dangerous\n side effects!\e[0m\n"
|
|
echo -e "\n\e[1;31m PLEASE kill FlashBack\n Properly! While there\n are failsafes in place,\n it is still possible\n for backgrounding to\n fall between the cracks!\e[0m\n"
|
|
echo -e "\n\e[1;31m To go back to the menu\n from any screen, just\n type 'BACK'.\n To exit FlashBack from\n any screen, type 'QUIT'\n"
|
|
echo -e "\n\e[1;31m Please make sure you\n watch the video on how\n to use FlashBack in\n the Cydia depiction\n if you're lost!\n"
|
|
echo -e "\n\e[1;31m If FlashBack has\n helped you, or if you\n appreciate my work,\n consider donating with\n the link in the cydia\n depiction!\n"
|
|
pause
|
|
|
|
}
|
|
|
|
# TODO Idea: MCApollo
|
|
# Get the amount of $COLUMNS and $LINES, scale the UI base on that information
|
|
# For example, (( ~ X $COLUMNS)) into a VAR and then echo $VAR instead of hard-coding "~~~~~~~~~~~"
|
|
|
|
show_menus() {
|
|
clear
|
|
echo -e " _____________________ \n | ___ ___ |\n | | __| | _ ) |\n | | _| | _ \ |\n | |_| LASH |___/ACK |\n |_____________________|"
|
|
echo -e "\n\e[1;32m Please read the FAQ\n in the Cydia package\n depiction!\n"
|
|
echo -e "\e[0;100m[1.]\e[0m \e[33mBackup Current Preferences\e[0m"
|
|
echo -e "\e[0;100m[2.]\e[0m \e[33mRestore Backup\e[0m"
|
|
echo -e "\e[0;100m[3.]\e[0m \e[33mDelete Backups\e[0m"
|
|
echo -e "\e[0;100m[4.]\e[0m \e[33mDelete AutoBackups\e[0m"
|
|
echo -e "\e[0;100m[5.]\e[0m \e[33mPackage Backup to DEB\e[0m"
|
|
echo -e "\e[0;100m[6.]\e[0m \e[33mUpdate Old Backup\e[0m"
|
|
echo -e "\e[0;100m[R.]\e[0m \e[91mREADME\e[0m"
|
|
echo -e "\e[0;100m[Q.]\e[0m \e[91mQuit\e[0m"
|
|
}
|
|
|
|
read_options(){
|
|
local choice
|
|
read -p "`echo -e '\e[0;100m[!]\e[0m \e[104mEnter choice [1 - 6]\e[0m'` > " -t 15 choice
|
|
killIfIdle
|
|
case $choice in
|
|
1) one ;;
|
|
2) two ;;
|
|
3) three ;;
|
|
4) four ;;
|
|
5) five;;
|
|
6) six;;
|
|
R) readme;;
|
|
Q) exit 0;;
|
|
*) echo "Invalid Selection!" && sleep 2
|
|
esac
|
|
}
|
|
displayMenu(){
|
|
clear
|
|
cp &>/dev/null
|
|
shopt -s extglob
|
|
show_menus
|
|
echo " "
|
|
read_options
|
|
}
|
|
|
|
|
|
|
|
tests
|
|
while true
|
|
do
|
|
displayMenu
|
|
done
|