diff --git a/.gitignore b/.gitignore index b76377e..81e676c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,3 @@ test.sh -<<<<<<< HEAD devdoc.md -======= ->>>>>>> main binaries \ No newline at end of file diff --git a/README.md b/README.md index 66e4c18..f6587f6 100644 --- a/README.md +++ b/README.md @@ -1,76 +1,56 @@ # Helium Bowser installer & updater ## Purpose -This script was initially designed to just update my Helium browser but over time and interest it got more functional and universal. It includes functions to install, update, remove, add launcher, etc... It's supposed to run in user space and is (Linux) distro independent I suppose. +This script was initially designed to just update my Helium browser but over time and interest it got more functional and universal. It includes functions to install, update, remove, add launcher, etc... and is distro independent. With "little" tinkering it should be possible to apply this script to install, update & configure many kinds of releases from source, like Debian packages, AppImages, binaries, etc... ## Usage -### Help +Help ```sh ./helium_helper.sh -h ``` ---- ### First Install To initally install Helium browser via this script, download helium_helper.sh and make it executable: ```sh wget https://lab.c95.org/fr4nz/helium-helper/raw/branch/main/helium_helper.sh && chmod +x helium_helper.sh ``` Run script with install parameter _-i_ -- Default install directory = `$HOME/.apps/Helium` ```sh ./helium_helper.sh -i ``` - -**OPTIONAL** : Add alias to `.shellrc` | _working in zsh, bash & fish_ -- Default alias = `update-helium` +Add alias to `.shellrc` | _optional_ ```sh -./helium_helper.sh -a +./helium_helper.sh -a ### ONLY TESTED WITH zsh & bash ``` - --- ### Updating -**From launcher** (if added during install or by running `./helium_helper.sh -l`) +**From launcher** (if added) Checking for the latest version and updating can simply be done for the browser as well as the script by right clicking the app icon and choosing either update option, which will be run by `helium_launcher_update.sh`. This will backup all files that are being updated and write a log. **Terminal** Updating can also be done by running: -- Update Helium Browser ```sh -./helium_helper.sh -u +./helium_helper.sh -u ### UPDATE APP ``` -- Update Helium Helper ```sh -./helium_helper.sh -S +./helium_helper.sh -S ### UPDATE SCRIPT ``` ---- -### Backing up -Backing up, by default, pulls all important files, folders & configuration and compresses an archive, which is stored in `$HOME/.apps/Helium/assets` -- Default backup -```sh -./helium_helper.sh -b -``` -- Backup to custom path -```sh -./helium_helper.sh -b -``` -**NOTE:** The backup path specified won't be overridden within the script yet. Working on it... - -**Since this script is interactive, it doesn't keep logs.** +Since this script is interactive, it doesn't keep logs. ## Overview ### Helium_Helper.sh - Interactive installer, updater & configuration script -- Installs to `$HOME/.apps/Helium` | changeable in line 32 `INSTALL_PATH` +- Installs to `/home//.apps/Helium` | changeable in line 28 `INSTALL_PATH` - Assumes: - - Presence of `$HOME/.apps/Helium` when updating | changeable in line 32 `INSTALL_PATH` + - Presence of `/home//.apps/Helium` when updating | changeable in line 28 `INSTALL_PATH` - Executable named `Helium.AppImage` -- Keeps backup archives from - - `Helium.AppImage` - - `helium_helper.sh` - - `helium_launcher_update.sh` - - `Helium.desktop` - - `net.imput.helium` -- Adds desktop launcher to `$HOME/.local/share/applications` +- Keeps backups of + - `Helium.AppImage` --> `Helium.AppImage.old` + - `helium_helper.sh` --> `helium_helper.sh.old` + - `helium_launcher_update.sh` --> `helium_launcher_update.sh.old` + - `Helium.desktop` --> `Helium.desktop.old` + which will be overwritten at every update +- Adds desktop launcher to `/home//.local/share/applications` - Adds options to launcher which are run by `helium_launcher_updater.sh` - Update Helium - Update Script @@ -80,14 +60,14 @@ Backing up, by default, pulls all important files, folders & configuration and c ### Helium_Launcher_Update.sh - Update Helium from launcher - Assumes: - - Presence of `$HOME/.apps/Helium` when updating | changeable in line 21 `INSTALL_PATH` + - Presence of `/home//.apps/Helium` when updating | changeable in line 19 `INSTALL_PATH` - Executable named `Helium.AppImage` -- Loggs to `$HOME/.apps/Helium/assets/logs` -- Keeps backup archives from - - `Helium.AppImage` - - `helium_helper.sh` - - `helium_launcher_update.sh` - - `Helium.desktop` - - `net.imput.helium` +- Loggs to `/home//.apps/Helium/assets/logs` +- Keeps backups of + - `Helium.AppImage` --> `Helium.AppImage.old` + - `helium_helper.sh` --> `helium_helper.sh.old` + - `helium_launcher_update.sh` --> `helium_launcher_update.sh.old` + - `Helium.desktop` --> `Helium.desktop.old` + which will be overwritten at every update - Run `helium_launcher_update.sh -h` for help   \ No newline at end of file diff --git a/assets/workflow/merge.yml b/assets/workflow/merge.yml deleted file mode 100644 index 4289a64..0000000 --- a/assets/workflow/merge.yml +++ /dev/null @@ -1,3 +0,0 @@ -on: - pull_requests: - pull_request_target: \ No newline at end of file diff --git a/devdoc.md b/devdoc.md deleted file mode 100644 index 17b5150..0000000 --- a/devdoc.md +++ /dev/null @@ -1,95 +0,0 @@ -# To Do List Helium installer - -## Last Jobs -- Readme updated -- Desktop Entry updater --> Complete -- Launcher has an update option now -- Launcher installer refined -- Clean Up ---- -- Script updater - - Remote script check simplified -- Remover function extended - - Alias remover added - - Script remover added -- helium_auto_update.sh renamed to helium_launcher_update.sh -- Desktop notifications added -- Launcher functions extended - - Update script option added - - Show log option added -- Variables universalized -- Wiki created ---- -- sed command fixed in remover -- ARCH variable added -- APP_SOURCE variable changed -- BRANCH variable added -- FILE_EXTENSION variable added -- Readme updated -- Documentation/Wiki updated ---- -- Shell detection added -- Alias support for fish added -- Removal process refined and adapted to fish -- Browser config backup ---- -- Arch detection working -- Clean Up -- Copy Paste mistake fixed -- Backup process rewritten - - Custom backup method to pass as argument - - Custom backup path to pass as argument - - Default if left blank -- Removal process adjusted -- $1 verifier added -- Readme updated - - -## Add/To Do -- Roll back from backup -- Update Readme -- Make functional launcher optional - -## Repo -- Merge workflow - - Convert URLs from __main__ to __stable__ - - Remove to do list - - Remove comment from script - -## Fix - -## Notes - -- Auto Update -```sh -while true ; do - read -p " Enable automatic update check on login? (y/N) : " AUTO_UPDATE - - if [[ "$AUTO_UPDATE" == "" || "$AUTO_UPDATE" == "n" || "$AUTO_UPDATE" == "N" ]] ; then - break - - elif [[ "$AUTO_UPDATE" == "y" || "$AUTO_UPDATE" == "Y" ]] ; then - if ! [ -f "$PROFILE" ] ; then - echo -e "\n ${RED}Following file is missing :\n\n${YEL}$PROFILE\n\n ${CYN}Please investigate and re-run script !${CRS}" - exit 1 - - else - wget -P $TMP https://lab.c95.org/fr4nz/shell-scripts/src/branch/main/helium-browser/helium_auto_update.sh -q --show-progress - chmod +x $TMP/helium_auto_update.sh - mv $TMP/helium_auto_update.sh $INSTALL_PATH/helium_auto_update.sh - echo >> $PROFILE - echo "### HELIUM AUTO UPDATE ###" >> $PROFILE - echo "${INSTALL_PATH}/helium_auto_update.sh" >> $PROFILE - echo >> $PROFILE - echo -e "\n ${GRN}Automatic updates enabled ! ${CRS}\n" - break - - fi - - else - echo -e " ${YEL}Invalid response !${CRS}\n" - - fi - -done -``` diff --git a/helium_helper.sh b/helium_helper.sh index 3294c63..999aa8d 100755 --- a/helium_helper.sh +++ b/helium_helper.sh @@ -9,23 +9,19 @@ YEL="\e[0;33m" RED="\e[0;31m" GRN="\e[0;32m" LCY="\e[1;36m" -WHT="\e[1;37m" CRS="\e[0m" ## GLOBAL VARIABLES APP_NAME="Helium" APP_NAME_LONG="Helium Web Browser" +ARCH="x86_64" FILE_EXTENSION="AppImage" APP_SOURCE="GitHub" -ARCH_OVERRIDE="" -BACKUP_METHOD="full" -BACKUP_COMPRESSION_OVERRIDE="" SCRIPT_NAME="$APP_NAME Helper Script" SCRIPT_FILE_NAME="helium_helper.sh" AUTO_SCRIPT_FILE_NAME="helium_launcher_update.sh" -SCRIPT_VERSION="0.5.9" +SCRIPT_VERSION="0.5.8" ALIAS="update-helium" -DATE=$(date +"%d%m%y") ## LOCATIONS TMP=/tmp/$APP_NAME @@ -48,13 +44,15 @@ APP_SOURCE_URL=https://api.github.com/repos/imputnet/helium-linux/releases/lates ### DEPENDENCIES cmd_query() { - if ! command -v $PACKAGE > /dev/null 2>&1 ; then - echo " - $PACKAGE" >> $TMP/missingDeps + #local PACKAGE=$1 + + if ! command -v $PACKAGE > /dev/null 2>&1 ; then + echo " - $PACKAGE" >> $TMP/missingDeps fi } dependency_check () { - DEPENDENCIES=("curl" "wget" "tar") + DEPENDENCIES=("curl" "wget") mkdir -p $TMP for PACKAGE in "${DEPENDENCIES[@]}" ; do @@ -64,13 +62,15 @@ dependency_check () { if [ -f "$TMP/missingDeps" ] ; then MISSING=$(cat $TMP/missingDeps) - echo -e " ${RED}Following dependencies are missing :\n\n${CRS}$MISSING\n\n ${CYN}Please install and re-run script !${CRS}\n" + echo -e "\n ${RED}Following dependencies are missing :\n\n${CRS}$MISSING\n\n ${CYN}Please install and re-run script !${CRS}" exit_clean fi } ### SHELL CHECK shell_query() { + #local SHELL_OPTION=$1 + if [ "$(echo $SHELL | grep "$SHELL_OPTION")" ] ; then ACTIVE_SHELL=$SHELL_OPTION fi @@ -78,59 +78,43 @@ shell_query() { } shell_check() { - SHELLS=("bash" "fish" "zsh") + SHELLS=("bash" "fish" "ksh" "zsh") for SHELL_OPTION in "${SHELLS[@]}" ; do shell_query "$SHELL_OPTION" done } -### ARCH CHECK -arch_check() { - if [ "$ARCH_OVERRIDE" ] ; then - ARCH=$ARCH_OVERRIDE - - else - ARCH=$(uname -m) - if [ "$ARCH" == "aarch64" ] ; then - ARCH="arm64" - - elif [ "$ARCH" == "amd64" ] ; then - ARCH="x86_64" - fi - fi -} - ### CHECK LOCAL INSTALL local_check() { if ! [ -d "$INSTALL_PATH" ] ; then - echo -e "\n ${YEL}$APP_NAME_LONG directory not found!${CRS}\n" - install_application + echo -e "\n ${RED}$APP_NAME_LONG directory not found!${CRS}" + install_helium exit elif ! [ -f "$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION" ] ; then - echo -e "\n ${YEL}$APP_NAME_LONG directory found but no executable named ${CYN}$APP_NAME.$FILE_EXTENSION${YEL}!${CRS}\n" - install_application + echo -e "\n ${RED}$APP_NAME_LONG directory found but no executable named ${CYN}$APP_NAME.$FILE_EXTENSION${RED}!${CRS}" + install_helium exit fi } ### INSTALL -install_application() { +install_helium() { if [ -f "$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION" ] ; then - echo -e " ${YEL}$APP_NAME_LONG AppImage found! Trying to update...${CRS}" - update_application + echo -e "\n ${YEL}$APP_NAME_LONG AppImage found! Trying to update...${CRS}" + update_helium exit fi while true ; do read -p " Download and install $APP_NAME_LONG from $APP_SOURCE? (Y/n) : " CONFIRM_INSTALL + echo if [[ "$CONFIRM_INSTALL" == "" || "$CONFIRM_INSTALL" == "y" || "$CONFIRM_INSTALL" == "Y" ]] ; then DOWNLOAD_URL=$(curl -s $APP_SOURCE_URL | grep "browser_download_url" | grep "$ARCH.$FILE_EXTENSION" | grep -v "zsync" | tr -d \" | awk '{print $2}') APP_SOURCE_FILENAME=$(curl -s $APP_SOURCE_URL | grep "browser_download_url" | grep "$ARCH.$FILE_EXTENSION" | grep -v "zsync" | tr -d \" | awk '{print $2}' | awk -F'/' '{print $9}') - echo -e "\n - Downloading ${CYN}$APP_SOURCE_FILENAME${CRS}..." - wget -P $TMP $DOWNLOAD_URL -q + wget -P $TMP $DOWNLOAD_URL -q --show-progress chmod +x $TMP/$APP_SOURCE_FILENAME mkdir -p $INSTALL_PATH mv $TMP/$APP_SOURCE_FILENAME $INSTALL_PATH/$APP_NAME.$FILE_EXTENSION @@ -139,12 +123,13 @@ install_application() { break elif [[ "$CONFIRM_INSTALL" == "n" || "$CONFIRM_INSTALL" == "N" ]] ; then - echo -e "\n ${RED}Cancelled!${CRS}\n" + echo -e " ${RED}Cancelled!${CRS}" break else - echo -e "\n ${YEL}Invalid response!${CRS}\n" + echo -e " ${YEL}Invalid response!${CRS}\n" fi + done } @@ -157,6 +142,7 @@ add_launcher() { while true ; do echo read -p " Add $APP_NAME_LONG launcher to $LAUNCHER_PATH? (Y/n) : " CONFIRM_LAUNCHER + echo if [[ "$CONFIRM_LAUNCHER" == "" || "$CONFIRM_LAUNCHER" == "y" || "$CONFIRM_LAUNCHER" == "Y" ]] ; then LAUNCHER_URL=$REMOTE_REPO_URL/assets/launcher/helium.desktop.template @@ -165,15 +151,13 @@ add_launcher() { LOCAL_VERSION=$($INSTALL_PATH/$APP_NAME.$FILE_EXTENSION --version | awk '{print $2}') mkdir -p $LAUNCHER_PATH $SCRIPT_PATH $BACKUP_PATH $ASSET_PATH/icon if ! [ -f "$SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME" ] ; then - echo -e "\n - Downloading ${CYN}$AUTO_SCRIPT_FILE_NAME${CRS}..." - wget -P $TMP $AUTO_SCRIPT_URL -q + wget -P $TMP $AUTO_SCRIPT_URL -q --show-progress chmod +x $TMP/$AUTO_SCRIPT_FILE_NAME mv $TMP/$AUTO_SCRIPT_FILE_NAME $SCRIPT_PATH fi - echo -e "\n - Downloading ${CYN}launcher files${CRS}..." - wget -P $TMP $LAUNCHER_URL -q - wget -P $TMP $ICON_URL -q + wget -P $TMP $LAUNCHER_URL -q --show-progress + wget -P $TMP $ICON_URL -q --show-progress sed -i "s|%APP_LOCATION%|$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION|" $TMP/helium.desktop.template sed -i "s|%ICON_LOCATION%|$ASSET_PATH/icon/helium.png|" $TMP/helium.desktop.template sed -i "s|%APP_VERSION%|$LOCAL_VERSION|" $TMP/helium.desktop.template @@ -192,11 +176,12 @@ add_launcher() { else echo -e " ${YEL}Invalid response!${CRS}\n" fi + done else echo -e "\n ${RED}$APP_NAME_LONG AppImage not found! Can't add launcher...${CRS}" - install_application + install_helium exit fi } @@ -212,49 +197,41 @@ add_alias() { if [ "$ACTIVE_SHELL" == "zsh" ] ; then if [ "$(cat $HOME/.zshrc | grep "$ALIAS")" ] ; then - echo -e "\n ${LCY}$ALIAS${CRS} already present in ${CYN}$HOME/.zshrc${CRS}\n" - - else - echo "### $APP_NAME_LONG Alias zsh ###" >> $HOME/.zshrc - echo "alias $ALIAS=\"$SCRIPT_PATH/$SCRIPT_FILE_NAME\"" >> $HOME/.zshrc - echo >> $HOME/.zshrc - echo -e "\n ${LCY}$ALIAS${CRS} added to ${CYN}$HOME/.zshrc${CRS}\n" + echo -e "\n ${LCY}$ALIAS ${GRN}already present in${CRS} $HOME/.zshrc\n" + exit fi + echo "alias $ALIAS=\"$SCRIPT_PATH/$SCRIPT_FILE_NAME\"" >> $HOME/.zshrc + echo -e "\n ${LCY}$ALIAS ${GRN}added to${CRS} $HOME/.zshrc\n" elif [ "$ACTIVE_SHELL" == "bash" ] ; then if [ "$(cat $HOME/.bashrc | grep "$ALIAS")" ] ; then - echo -e "\n ${LCY}$ALIAS${CRS} already present in ${CYN}$HOME/.bashrc${CRS}\n" - - else - echo "### $APP_NAME_LONG Alias bash ###" >> $HOME/.bashrc - echo "alias $ALIAS=\"$SCRIPT_PATH/$SCRIPT_FILE_NAME\"" >> $HOME/.bashrc - echo >> $HOME/.bashrc - echo -e "\n ${LCY}$ALIAS${CRS} added to ${CYN}$HOME/.bashrc${CRS}\n" + echo -e "\n ${LCY}$ALIAS ${GRN}already present in${CRS} $HOME/.bashrc\n" + exit fi + echo "alias $ALIAS=\"$SCRIPT_PATH/$SCRIPT_FILE_NAME\"" >> $HOME/.zshrc + echo -e "\n ${LCY}$ALIAS ${GRN}added to${CRS} $HOME/.bashrc\n" elif [ "$ACTIVE_SHELL" == "fish" ] ; then if [ "$(cat $HOME/.config/fish/config.fish | grep "source $HOME/.config/fish/$ALIAS.fish")" ] ; then - echo -e "\n ${LCY}$ALIAS${CRS} already present in ${CYN}$HOME/.config/fish/config.fish${CRS}\n" - - else - echo "### $APP_NAME_LONG Alias FISH ###" > $HOME/.config/fish/$ALIAS.fish - echo >> $HOME/.config/fish/$ALIAS.fish - echo "function $ALIAS" >> $HOME/.config/fish/$ALIAS.fish - echo " $SCRIPT_PATH/$SCRIPT_FILE_NAME \$argv" >> $HOME/.config/fish/$ALIAS.fish - echo "end" >> $HOME/.config/fish/$ALIAS.fish - echo >> $HOME/.config/fish/$ALIAS.fish - echo "source $HOME/.config/fish/$ALIAS.fish" >> $HOME/.config/fish/config.fish - echo -e "\n ${LCY}$ALIAS ${CRS}added to ${CYN}$HOME/.config/fish/config.fish${CRS}\n" + echo -e "\n ${LCY}$ALIAS ${GRN}already present in${CRS} $HOME/.config/fish/config.fish\n" + exit fi + echo "### Helium Helper Alias FISH ###" > $HOME/.config/fish/$ALIAS.fish + echo >> $HOME/.config/fish/$ALIAS.fish + echo "function $ALIAS" >> $HOME/.config/fish/$ALIAS.fish + echo " $SCRIPT_PATH/$SCRIPT_FILE_NAME \$argv" >> $HOME/.config/fish/$ALIAS.fish + echo "end" >> $HOME/.config/fish/$ALIAS.fish + echo "source $HOME/.config/fish/$ALIAS.fish" >> $HOME/.config/fish/config.fish + echo -e "\n ${LCY}$ALIAS ${GRN}added to${CRS} $HOME/.config/fish/config.fish\n" else - echo -e "\n ${LCY}$ACTIVE_SHELL${RED}shell is not yet supported!${CRS}\n" - echo -e " ${CRS}Working implementation are available for bash, zsh & fish!${CRS}\n" + echo -e "\n ${LCY}$ACTIVE_SHELL ${RED}not yet supported!${CRS}\n" + echo -e " ${LCY}Working implementation are available for bash, zsh & fish!${CRS}\n" fi } ### UPDATE -update_application() { +update_helium() { LOCAL_VERSION=$($INSTALL_PATH/$APP_NAME.$FILE_EXTENSION --version | awk '{print $2}') APP_SOURCE_VERSION=$(curl -s $APP_SOURCE_URL | grep "tag_name" | tr -d \", | awk '{print $2}') @@ -277,214 +254,80 @@ update_application() { elif [ "$APP_SOURCE_VERSION_NUM" -gt "$LOCAL_VERSION_NUM" ] ; then echo -e "\n ${LCY}$APP_NAME_LONG is updatable!${CRS}\n" - app_version_info + echo -e " ${CYN}Local Version :\t${CRS}${LOCAL_VERSION}" + echo -e " ${CYN}$APP_SOURCE Version :\t${CRS}${APP_SOURCE_VERSION}\n" while true ; do read -p " Download and update $APP_NAME_LONG from $APP_SOURCE? (Y/n) : " CONFIRM + echo if [[ "$CONFIRM" == "" || "$CONFIRM" == "y" || "$CONFIRM" == "Y" ]] ; then DOWNLOAD_URL=$(curl -s $APP_SOURCE_URL | grep "browser_download_url" | grep "$ARCH.$FILE_EXTENSION" | grep -v "zsync" | tr -d \" | awk '{print $2}') APP_SOURCE_FILENAME=$(curl -s $APP_SOURCE_URL | grep "browser_download_url" | grep "$ARCH.$FILE_EXTENSION" | grep -v "zsync" | tr -d \" | awk '{print $2}' | awk -F'/' '{print $9}') - mkdir -p $TMP - echo -e "\n - Downloading ${CYN}$APP_SOURCE_FILENAME${CRS}..." - wget -P $TMP $DOWNLOAD_URL -q - ${BACKUP_METHOD}_backup + mkdir -p $TMP $BACKUP_PATH + wget -P $TMP $DOWNLOAD_URL -q --show-progress chmod +x $TMP/$APP_SOURCE_FILENAME + if [ -f "$BACKUP_PATH/$APP_NAME.old" ] ; then + rm $BACKUP_PATH/$APP_NAME.old + fi + if [ -d "$APP_CONFIG_PATH" ] ; then + if [ -f "$BACKUP_PATH/$APP_NAME.config.tar" ] ; then + rm $BACKUP_PATH/$APP_NAME.config.tar + fi + tar -cf $BACKUP_PATH/$APP_NAME.config.tar $APP_CONFIG_PATH > /dev/null 2>&1 + fi + mv $INSTALL_PATH/$APP_NAME.$FILE_EXTENSION $BACKUP_PATH/$APP_NAME.old mv $TMP/$APP_SOURCE_FILENAME $INSTALL_PATH/$APP_NAME.$FILE_EXTENSION + cp $LAUNCHER_PATH/$APP_NAME.desktop $BACKUP_PATH/$APP_NAME.desktop.old + chmod -x $BACKUP_PATH/*.sh.old $BACKUP_PATH/$APP_NAME.old sed -i "s|X-AppImage-Version=.*|X-AppImage-Version=$($INSTALL_PATH/$APP_NAME.$FILE_EXTENSION --version | awk '{print $2}')|" $LAUNCHER_PATH/$APP_NAME.desktop - echo -e " ${GRN}$APP_NAME_LONG is up-to-date!${CRS}\n" + echo -e "\n ${GRN}$APP_NAME_LONG is up-to-date !${CRS}\n" break elif [[ "$CONFIRM" == "n" || "$CONFIRM" == "N" ]] ; then - echo -e "\n ${RED}Cancelled!${CRS}\n" + echo -e " ${RED}Cancelled!${CRS}\n" exit else - echo -e "\n ${YEL}Invalid response!${CRS}\n" + echo -e " ${YEL}Invalid response!${CRS}\n" fi done else echo -e "\n ${RED}Version tags malformed or you are using a Beta version!${CRS}\n" - app_version_info + echo -e " ${CYN}Local Version :\t${CRS}${LOCAL_VERSION}" + echo -e " ${CYN}$APP_SOURCE Version :\t${CRS}${APP_SOURCE_VERSION}\n" echo -e " ${RED}Update failed... Exiting...${CRS}\n" exit fi + } -### BACKUP -call_backup() { - if [ -f $BACKUP_PATH\/$APP_NAME\.$BACKUP_METHOD\.backup_* ] ; then - echo -e "\n ${CYN}A $BACKUP_METHOD backup already exists!${CRS}\n" - - while true ; do - read -p " Overwrite backup? (y/N) : " OVERWRITE_BACKUP - - if [[ "$OVERWRITE_BACKUP" == "" || "$OVERWRITE_BACKUP" == "n" || "$OVERWRITE_BACKUP" == "N" ]] ; then - echo -e "\n ${YEL}Skipping backup process...${CRS}\n" - break - - elif [[ "$OVERWRITE_BACKUP" == "y" || "$OVERWRITE_BACKUP" == "Y" ]] ; then - echo -e "\n ${YEL}Overwriting backup...${CRS}" - rm $BACKUP_PATH/$APP_NAME.$BACKUP_METHOD.backup_* - ${BACKUP_METHOD}_backup - break - - else - echo -e "\n ${YEL}Invalid response!${CRS}\n" - fi - done - - else - ${BACKUP_METHOD}_backup - fi -} - -backup_file_collector() { - for BACKUP_ITEM in ${BACKUPABLE[@]} ; do - - if [ -d "$BACKUP_ITEM" ] ; then - mkdir -p $TMP/backup - cp -r $BACKUP_ITEM $TMP/backup - - elif [ -f "$BACKUP_ITEM" ] ; then - mkdir -p $TMP/backup - cp $BACKUP_ITEM $TMP/backup - fi - done -} - -script_backup() { - if [ -d "$SCRIPT_PATH" ] ; then - BACKUPABLE=("$SCRIPT_PATH/$SCRIPT_FILE_NAME" "$SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME") - echo -e "\n - ${CRS}Collecting files for ${CYN}$BACKUP_METHOD${CRS} backup...${CRS}" - backup_file_collector - pack_backup - - else - echo -e " ${YEL}Nothing to back up...${CRS}" - fi -} - -app_backup() { - if [ -f "$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION" ] ; then - BACKUPABLE=("$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION") - echo -e "\n - ${CRS}Collecting files for ${CYN}$BACKUP_METHOD${CRS} backup...${CRS}" - backup_file_collector - pack_backup - - else - echo -e " ${YEL}Nothing to back up...${CRS}" - fi -} - -config_backup() { - if [[ -d "$LAUNCHER_PATH" || -d $APP_CONFIG_PATH ]] ; then - BACKUPABLE=("$LAUNCHER_PATH/$APP_NAME.desktop" "$APP_CONFIG_PATH") - echo -e "\n - ${CRS}Collecting files for ${CYN}$BACKUP_METHOD${CRS} backup...${CRS}" - backup_file_collector - pack_backup - - else - echo -e " ${YEL}Nothing to back up...${CRS}" - fi -} - -full_backup() { - if [[ -d "$INSTALL_PATH" || -d "$SCRIPT_PATH" || -d $APP_CONFIG_PATH ]] ; then - BACKUPABLE=("$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION" "$SCRIPT_PATH/$SCRIPT_FILE_NAME" "$SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME" "$LAUNCHER_PATH/$APP_NAME.desktop" "$APP_CONFIG_PATH") - echo -e "\n - ${CRS}Collecting files for ${CYN}$BACKUP_METHOD${CRS} backup...${CRS}" - backup_file_collector - pack_backup - - else - echo -e " ${YEL}Nothing to back up...${CRS}" - fi -} - -pack_backup() { - if [ -d "$TMP/backup" ] ; then - CWD=$(pwd) - cd $TMP/backup +### AUTOMATIC UPDATE --> TO DO? +auto_update() { + if ! [ -f "$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION" ] ; then + echo -e "\n ${RED}$APP_NAME AppImage not found! Can't add auto update script...${CRS}" + exit - if [[ -f "*.sh" ]] ; then - chmod -x *.sh - - elif [[ -f "*.$FILE_EXTENSION" ]] ; then - chmod -x *.$FILE_EXTENSION - fi - - if [ "$BACKUP_COMPRESSION_OVERRIDE" ] ; then - BACKUP_COMPRESSION=$BACKUP_COMPRESSION_OVERRIDE - - else - COMPRESSION_METHOD=("pbzip2" "gzip" "bzip2" "zip") - - until [ "$BACKUP_COMPRESSION" ] ; do - for COMPRESSION_TYPE in ${COMPRESSION_METHOD[@]} ; do - - if [ "$(command -v $COMPRESSION_TYPE) > /dev/null 2>&1" ] ; then - BACKUP_COMPRESSION=$COMPRESSION_TYPE - break - fi - done - done - fi - - echo -e "\n - ${CRS}Compressing backup archive with ${CYN}$BACKUP_COMPRESSION${CRS}...${CRS}\n" - - if [ "$BACKUP_COMPRESSION" == "pbzip2" ] ; then - tar -cf $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar * > /dev/null 2>&1 - pbzip2 $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar - mkdir -p $BACKUP_PATH - mv $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar.bz2 $BACKUP_PATH - cd $TMP && rm -rf backup - - elif [ "$BACKUP_COMPRESSION" == "gzip" ] ; then - tar -cf $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar * > /dev/null 2>&1 - gzip $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar - mkdir -p $BACKUP_PATH - mv $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar.gz $BACKUP_PATH - cd $TMP && rm -rf backup - - elif [ "$BACKUP_COMPRESSION" == "bzip2" ] ; then - tar -cf $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar * > /dev/null 2>&1 - bzip2 $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar - mkdir -p $BACKUP_PATH - mv $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar.bz2 $BACKUP_PATH - cd $TMP && rm -rf backup - - elif [ "$BACKUP_COMPRESSION" == "zip" ] ; then - zip -r $APP_NAME.$BACKUP_METHOD.backup_$DATE.zip $APP_NAME.$BACKUP_METHOD.backup_$DATE > /dev/null 2>&1 - mkdir -p $BACKUP_PATH - mv $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar.zip $BACKUP_PATH - cd $TMP && rm -rf backup - - else - echo -e " ${YEL}No supported compression method detected! Copying backup uncompressed...${CRS}\n" - mkdir -p $BACKUP_PATH - mv $TMP/backup $BACKUP_PATH/$APP_NAME.$BACKUP_METHOD.backup_$DATE - cd $TMP && rm -rf backup - fi - - echo -e " - ${CRS}Backup stored in ${CYN}$BACKUP_PATH${CRS}...${CRS}\n" - cd $CWD + else + echo -e "\n ${RED}Not implemented yet...${CRS}" fi } ### REMOVE -remove_application() { +remove_helium() { if [ -d "$INSTALL_PATH" ] ; then while true ; do - read -p " Remove $APP_NAME_LONG incl. backups, configuration and launcher? (Y/n) : " CONFIRM_REMOVE + read -p " Remove $APP_NAME_LONG incl. backups and launcher? (Y/n) : " CONFIRM_REMOVE if [[ "$CONFIRM_REMOVE" == "" || "$CONFIRM_REMOVE" == "y" || "$CONFIRM_REMOVE" == "Y" ]] ; then - REMOVABLE=("$INSTALL_PATH" "$LAUNCHER_PATH/$APP_NAME.desktop" "$APP_CONFIG_PATH" "$SCRIPT_PATH/$SCRIPT_FILE_NAME" "$SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME") - echo -e "\n - ${CRS}Removing ${CYN}$APP_NAME_LONG${CRS} files, directories and configuration...${CRS}" + REMOVABLE=("$INSTALL_PATH" "$LAUNCHER_PATH/$APP_NAME.desktop" "$SCRIPT_PATH/$SCRIPT_FILE_NAME" "$SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME") + echo for RM_PATH in "${REMOVABLE[@]}" ; do if [[ -f "$RM_PATH" || -d "$RM_PATH" ]] ; then + echo -e " ${YEL}Removing ${CYN}$RM_PATH ${YEL}...${CRS}" rm -rf "$RM_PATH" fi done @@ -493,28 +336,26 @@ remove_application() { if [ "$ACTIVE_SHELL" == "zsh" ] ; then if [ "$(cat $HOME/.zshrc | grep "$ALIAS")" ] ; then - sed -i "/$APP_NAME_LONG/d" $HOME/.zshrc sed -i "/$ALIAS/d" $HOME/.zshrc - echo -e "\n - Alias removed from ${CYN}$ACTIVE_SHELL${CRS}" + echo -e "\n ${CYN}$ACTIVE_SHELL ${YEL}alias removed ... ${CRS}" fi elif [ "$ACTIVE_SHELL" == "bash" ] ; then if [ "$(cat $HOME/.bashrc | grep "$ALIAS")" ] ; then - sed -i "/$APP_NAME_LONG/d" $HOME/.bashrc sed -i "/$ALIAS/d" $HOME/.bashrc - echo -e "\n - Alias removed from ${CYN}$ACTIVE_SHELL${CRS}" + echo -e "\n ${CYN}$ACTIVE_SHELL ${YEL}alias removed ... ${CRS}" fi elif [ "$ACTIVE_SHELL" == "fish" ] ; then if [ "$(cat $HOME/.config/fish/config.fish | grep "source $HOME/.config/fish/$ALIAS.fish")" ] ; then sed -i "/$ALIAS/d" $HOME/.config/fish/config.fish rm $HOME/.config/fish/$ALIAS.fish - echo -e "\n - Alias removed from ${CYN}$ACTIVE_SHELL${CRS}" + echo -e "\n ${CYN}$ACTIVE_SHELL ${YEL}alias removed ... ${CRS}" fi fi - echo -e "\n ${YEL}$APP_NAME_LONG removed!${CRS}\n" - break + echo -e "\n ${RED}$APP_NAME_LONG removed!${CRS}\n" + exit elif [[ "$CONFIRM_REMOVE" == "n" || "$CONFIRM_REMOVE" == "N" ]] ; then echo -e " ${RED}Cancelled!${CRS}" @@ -526,24 +367,21 @@ remove_application() { done else - echo -e " ${RED}Can't remove $APP_NAME_LONG! ${CYN}$INSTALL_PATH ${RED}directory not found...${CRS}\n" + echo -e "\n ${RED}Can't remove $APP_NAME_LONG! ${YEL}$INSTALL_PATH ${RED}directory not found...${CRS}" exit fi } ### SCRIPT VERSION script_version() { - echo -e "\n ${CYN}$APP_NAME_LONG Helper Script Version : ${CRS}$SCRIPT_VERSION\n" + echo -e "\n ${CYN}$APP_NAME_LONG Helper Script Version :${CRS} $SCRIPT_VERSION\n" + exit + } ### UPDATE SCRIPT -scrip_version_info() { - echo -e " - ${CYN}Local Version :\t${CRS}$SCRIPT_VERSION" - echo -e " - ${CYN}Remote Version :\t${CRS}$REMOTE_SCRIPT_VERSION" - echo -e " - ${CYN}Update Branch :\t${CRS}$REMOTE_REPO_BRANCH\n" -} - update_script() { + ### CHECK FOR LOCAL SCRIPT if ! [ -f "$SCRIPT_PATH/$SCRIPT_FILE_NAME" ] ; then echo -e "\n ${YEL}$SCRIPT_FILE_NAME not found...${CRS}" @@ -552,14 +390,15 @@ update_script() { read -p " Copy script to $SCRIPT_PATH? (Y/n) : " CONFIRM_SCRIPT_INSTALL if [[ "$CONFIRM_SCRIPT_INSTALL" == "" || "$CONFIRM_SCRIPT_INSTALL" == "y" || "$CONFIRM_SCRIPT_INSTALL" == "Y" ]] ; then - mkdir -p $SCRIPT_PATH + if ! [ -d "$SCRIPT_PATH" ] ; then + mkdir -p $SCRIPT_PATH + fi mkdir -p $TMP wget -P $TMP $REMOTE_SCRIPT_URL -q - wget -P $TMP $REMOTE_REPO_URL/$AUTO_SCRIPT_FILE_NAME -q - chmod +x $TMP/$SCRIPT_FILE_NAME $TMP/$AUTO_SCRIPT_FILE_NAME - mv $TMP/$SCRIPT_FILE_NAME $TMP/$AUTO_SCRIPT_FILE_NAME $SCRIPT_PATH + chmod +x $TMP/$SCRIPT_FILE_NAME + mv $TMP/$SCRIPT_FILE_NAME $SCRIPT_PATH echo -e "\n ${GRN}$SCRIPT_FILE_NAME is up-to-date!${CRS}" - break + exit_clean elif [[ "$CONFIRM_SCRIPT_INSTALL" == "n" || "$CONFIRM_SCRIPT_INSTALL" == "N" ]] ; then echo -e " ${RED}Cancelled!${CRS}\n" @@ -591,8 +430,9 @@ update_script() { echo -e "\n ${GRN}$SCRIPT_FILE_NAME is already up-to-date!${CRS}\n" elif [ "$REMOTE_SCRIPT_VERSION_NUM" -gt "$SCRIPT_VERSION_NUM" ] ; then - echo -e "\n ${LCY}$SCRIPT_FILE_NAME is updatable!${CRS}\n" - scrip_version_info + echo -e "\n ${YEL}$SCRIPT_FILE_NAME is updatable!${CRS}\n" + echo -e " ${CYN}Local Version :\t${CRS}${SCRIPT_VERSION}" + echo -e " ${CYN}Remote Version :\t${CRS}${REMOTE_SCRIPT_VERSION}\n" while true ; do read -p " Update $SCRIPT_FILE_NAME? (Y/n) : " CONFIRM_SCRIPT_UPDATE @@ -603,16 +443,15 @@ update_script() { mkdir -p $BACKUP_PATH fi mv $SCRIPT_PATH/$SCRIPT_FILE_NAME $BACKUP_PATH/$SCRIPT_FILE_NAME.old - mv $SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME $BACKUP_PATH/$AUTO_SCRIPT_FILE_NAME.old + mkdir -p $TMP wget -P $TMP $REMOTE_SCRIPT_URL -q - wget -P $TMP $REMOTE_REPO_URL/$AUTO_SCRIPT_FILE_NAME -q - chmod +x $TMP/$SCRIPT_FILE_NAME $TMP/$AUTO_SCRIPT_FILE_NAME - mv $TMP/$SCRIPT_FILE_NAME $TMP/$AUTO_SCRIPT_FILE_NAME $SCRIPT_PATH + chmod +x $TMP/$SCRIPT_FILE_NAME + mv $TMP/$SCRIPT_FILE_NAME $SCRIPT_PATH echo -e " ${GRN}$SCRIPT_FILE_NAME is up-to-date!${CRS}" break elif [[ "$CONFIRM_SCRIPT_UPDATE" == "n" || "$CONFIRM_SCRIPT_UPDATE" == "N" ]] ; then - echo -e " ${RED}Cancelled!${CRS}\n" + echo -e " ${RED}Cancelled!${CRS}" break else @@ -622,21 +461,18 @@ update_script() { else echo -e "\n ${RED}Version tags malformed or you are using a Beta version!${CRS}\n" - scrip_version_info + echo -e " ${CYN}Local Version :\t${CRS}${SCRIPT_VERSION}" + echo -e " ${CYN}Remote Version :\t${CRS}${REMOTE_SCRIPT_VERSION}\n" echo -e " ${RED}Updating script failed...${CRS}\n" fi } -### COMPARE APP VERSION -app_version_info() { - echo -e " - ${CYN}Local Version :\t${CRS}$LOCAL_VERSION" - echo -e " - ${CYN}$APP_SOURCE Version :\t${CRS}$APP_SOURCE_VERSION\n" -} - +### COMPARE APPIMAGE VERSION compare_version() { LOCAL_VERSION=$($INSTALL_PATH/$APP_NAME.$FILE_EXTENSION --version | awk '{print $2}') APP_SOURCE_VERSION=$(curl -s $APP_SOURCE_URL | grep "tag_name" | tr -d \", | awk '{print $2}') + ### CHECK FOR EMPTY VERSION TAGS if [ -z "$APP_SOURCE_VERSION" ] ; then echo -e "\n ${RED}Empty version tag from ${CYN}$APP_SOURCE${RED}! Can't compare, exiting...${CRS}\n" exit @@ -646,20 +482,28 @@ compare_version() { exit fi + ### COMPARE LOCAL & REMOTE VERSION LOCAL_VERSION_NUM=$(echo $LOCAL_VERSION | tr -d .) APP_SOURCE_VERSION_NUM=$(echo $APP_SOURCE_VERSION | tr -d .) if [ "$APP_SOURCE_VERSION" == "$LOCAL_VERSION" ] ; then echo -e "\n ${GRN}$APP_NAME_LONG is up-to-date!${CRS}\n" - app_version_info + echo -e " ${CYN}Local Version :\t${CRS}${LOCAL_VERSION}" + echo -e " ${CYN}$APP_SOURCE Version :\t${CRS}${APP_SOURCE_VERSION}\n" + exit elif [ "$APP_SOURCE_VERSION_NUM" -gt "$LOCAL_VERSION_NUM" ] ; then - echo -e "\n ${LCY}$APP_NAME_LONG is updatable!${CRS}\n" - app_version_info + echo -e "\n ${YEL}$APP_NAME_LONG is updatable!${CRS}\n" + echo -e " ${CYN}Local Version :\t${CRS}${LOCAL_VERSION}" + echo -e " ${CYN}$APP_SOURCE Version :\t${CRS}${APP_SOURCE_VERSION}\n" + exit else echo -e "\n ${RED}Version tags malformed or you are using a Beta version!${CRS}\n" - app_version_info + echo -e " ${CYN}Local Version :\t${CRS}${LOCAL_VERSION}" + echo -e " ${CYN}$APP_SOURCE Version :\t${CRS}${APP_SOURCE_VERSION}\n" + echo -e " ${RED}Update failed ... Exiting ...${CRS}\n" + exit fi } @@ -667,19 +511,19 @@ compare_version() { help() { echo -e "\n${LCY}${SCRIPT_NAME}${CRS}\n" echo -e "$APP_NAME_LONG installer & updater script\n" - echo -e "Syntax: $SCRIPT_FILE_NAME [ -i | -l | -a | -u | -b | -r | -c | -s | -S | -h ]\n" + echo -e "Syntax: $SCRIPT_FILE_NAME [ -i | -l | -a | -u | -r | -c | -s | -S | -h ]\n" # | -U | echo -e "Options:\n" - echo -e "\t-i\tInstall $APP_NAME_LONG from $APP_SOURCE" + echo -e "\t-i\tDownload & install $APP_NAME_LONG from $APP_SOURCE" echo -e "\t-l\tCreate desktop launcher" echo -e "\t-a\tCreate alias for $SCRIPT_FILE_NAME" - echo -e "\t-u\tUpdate $APP_NAME_LONG from $APP_SOURCE" - echo -e "\t-b\tBackup $APP_NAME_LONG & configuration" + echo -e "\t-u\tDownload & update $APP_NAME_LONG from $APP_SOURCE" + #echo -e "\t-U\tEnable automatic updates on login ${RED}--> Not yet working${CRS}" echo -e "\t-r\tRemove $APP_NAME_LONG" echo -e "\t-c\tCompare local to remote version" echo -e "\t-s\tShow script version" echo -e "\t-S\tUpdate $SCRIPT_FILE_NAME" - echo -e "\t-h\tPrint this help page\n" - echo -e "Configured directories:\n" + echo -e "\t-h\tPrint this help page.\n" + echo -e "Configured locations:\n" echo -e "\t${CYN}${INSTALL_PATH}${CRS}\t\tInstall location" echo -e "\t${CYN}${LAUNCHER_PATH}${CRS}\tLauncher location" echo -e "\t${CYN}${SCRIPT_PATH}${CRS}\t\t\tScript location\n" @@ -697,88 +541,48 @@ exit_clean() { ########## MAIN ########## ## GET OPTIONS -while getopts ":i,:l,:a,:u,:b,:r,:c,:s,:S,:h" OPTION ; do - - if [ "$(echo $1 | wc -m)" -gt "3" ] ; then - echo -e "\n${YEL}Option ${RED}$1${YEL} not valid! Use only one parameter at a time...${CRS}" - help - exit - fi - +while getopts ":i,:l,:a,:u,:U,:r,:c,:s,:S,:h" OPTION ; do case $OPTION in i) - echo -e "\n ${YEL}Installing $APP_NAME_LONG...${CRS}\n" - if [ "$#" -gt "1" ] ; then - ALL_PARAMETER=$@ - - for PARAMETER in ${ALL_PARAMETER[@]} ; do - if [ -d "$PARAMETER" ] ; then - INSTALL_PATH=$PARAMETER - fi - done - fi + echo -e "\n ${CYN}Installing $APP_NAME_LONG...${CRS}" dependency_check - arch_check - install_application + install_helium exit_clean ;; l) - echo -e "\n ${YEL}Adding $APP_NAME_LONG launcher...${CRS}" + echo -e "\n ${CYN}Adding $APP_NAME_LONG launcher...${CRS}" dependency_check local_check add_launcher exit_clean ;; a) - echo -e "\n ${YEL}Adding alias...${CRS}" - if [ "$#" -gt "1" ] ; then - ALL_PARAMETER=$@ - - for PARAMETER in ${ALL_PARAMETER[@]} ; do - if [ "$PARAMETER" ] ; then - ALIAS=$PARAMETER - fi - done - fi + echo -e "\n ${CYN}Adding alias...${CRS}" shell_check add_alias exit ;; u) - echo -e "\n ${YEL}Updating $APP_NAME_LONG...${CRS}" + echo -e "\n ${CYN}Updating $APP_NAME_LONG...${CRS}" dependency_check - arch_check local_check - update_application + update_helium exit_clean ;; - b) - echo -e "\n ${YEL}Backing up $APP_NAME_LONG...${CRS}" - if [ "$#" -gt "1" ] ; then - ALL_PARAMETER=$@ - - for PARAMETER in ${ALL_PARAMETER[@]} ; do - if [[ "$PARAMETER" == "script" || "$PARAMETER" == "config" || "$PARAMETER" == "app" || "$PARAMETER" == "full" ]] ; then - BACKUP_METHOD=$PARAMETER - - elif [[ "$PARAMETER" == "pbzip2" || "$PARAMETER" == "gzip" || "$PARAMETER" == "bzip2" || "$PARAMETER" == "zip" ]] ; then - BACKUP_COMPRESSION_OVERRIDE=$PARAMETER - - elif [ -d "$PARAMETER" ] ; then - BACKUP_PATH=$PARAMETER - fi - done - fi - call_backup - exit ;; + U) + echo -e "\n ${CYN}Enabling automatic updates...${CRS}" + dependency_check + local_check + auto_update + exit_clean ;; r) - echo -e "\n ${YEL}Removing $APP_NAME_LONG...${CRS}\n" - remove_application + echo -e "\n ${CYN}Removing $APP_NAME_LONG...${CRS}" + remove_helium exit ;; c) - echo -e "\n ${YEL}Comparing remote to local version...${CRS}" + echo -e "\n ${CYN}Comparing remote to local version...${CRS}" dependency_check local_check compare_version @@ -789,7 +593,7 @@ while getopts ":i,:l,:a,:u,:b,:r,:c,:s,:S,:h" OPTION ; do exit ;; S) - echo -e "\n ${YEL}Updating script...${CRS}" + echo -e "\n ${CYN}Updating script...${CRS}" dependency_check update_script exit_clean ;; @@ -805,15 +609,14 @@ while getopts ":i,:l,:a,:u,:b,:r,:c,:s,:S,:h" OPTION ; do esac done -## ENVIRONMENT CHECK +## DEPENDENCY CHECK dependency_check -arch_check -## CHECK LOCAL INSTALL +## CHECK FOR LOCAL INSTALL local_check ## UPDATE -update_application +update_helium ## CLEAN exit_clean diff --git a/helium_launcher_update.sh b/helium_launcher_update.sh index 8a1e37c..c99d069 100755 --- a/helium_launcher_update.sh +++ b/helium_launcher_update.sh @@ -9,11 +9,9 @@ APP_NAME_LONG="Helium Web Browser" ARCH="x86_64" FILE_EXTENSION="AppImage" APP_SOURCE="GitHub" -NOTIFY_NAME="Helium Helper" SCRIPT_NAME="$APP_NAME Launcher Updater" -PARENT_SCRIPT_FILE_NAME="helium_helper.sh" SCRIPT_FILE_NAME="helium_launcher_update.sh" -SCRIPT_VERSION="0.5.9" +SCRIPT_VERSION="0.5.8" DATE=$(date) ## LOCATIONS @@ -66,7 +64,7 @@ dependency_check () { if [ -f "$TMP/missingDeps" ] ; then MISSING=$(cat $TMP/missingDeps) echo "$DATE | Failed to update - missing dependencies : $MISSING" >> $LOG - notify-send --icon="$ICON" "$NOTIFY_NAME" "Update failed! See log for details" + notify-send --icon="$ICON" --app-name="Helium Helper" "Update failed! See log for details" exit_clean fi @@ -74,107 +72,24 @@ dependency_check () { if ! [ -d "$INSTALL_PATH" ] ; then mkdir -p $INSTALL_PATH echo "$DATE | Failed to update - $APP_NAME installation path not present - But created for logging" >> $LOG - notify-send --icon="$ICON" "$NOTIFY_NAME" "Update failed! See log for details" + notify-send --icon="$ICON" --app-name="Helium Helper" "Update failed! See log for details" exit elif ! [ -f "$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION" ] ; then echo "$DATE | Failed to update - Local $APP_NAME AppImage not found" >> $LOG - notify-send --icon="$ICON" "$NOTIFY_NAME" "Update failed! See log for details" + notify-send --icon="$ICON" --app-name="Helium Helper" "Update failed! See log for details" exit fi } -### BACKUP -backup_helium() { - if [[ -d "$INSTALL_PATH" || -d "$SCRIPT_PATH" || -d $APP_CONFIG_PATH ]] ; then - BACKUPABLE=("$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION" "$SCRIPT_PATH/$SCRIPT_FILE_NAME" "$SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME" "$LAUNCHER_PATH/$APP_NAME.desktop" "$APP_CONFIG_PATH") - - for BACKUP_ITEM in ${BACKUPABLE[@]} ; do - if [ -d "$BACKUP_ITEM" ] ; then - mkdir -p $TMP/backup - cp -r $BACKUP_ITEM $TMP/backup - - elif [ -f "$BACKUP_ITEM" ] ; then - mkdir -p $TMP/backup - cp $BACKUP_ITEM $TMP/backup - fi - done - - if [ -d "$TMP/backup" ] ; then - CWD=$(pwd) - cd $TMP/backup - chmod -x *.sh *.$FILE_EXTENSION > /dev/null 2>&1 - - if [ "$BACKUP_COMPRESSION_OVERRIDE" ] ; then - BACKUP_COMPRESSION=$BACKUP_COMPRESSION_OVERRIDE - - elif ! [ "$BACKUP_COMPRESSION_OVERRIDE" ] ; then - COMPRESSION_METHOD=("pbzip2" "gzip" "bzip2" "zip") - - until [ "$BACKUP_COMPRESSION" ] ; do - for COMPRESSION_TYPE in ${COMPRESSION_METHOD[@]} ; do - - if [ "$(command -v $COMPRESSION_TYPE) > /dev/null 2>&1" ] ; then - BACKUP_COMPRESSION=$COMPRESSION_TYPE - break - fi - done - done - fi - - if [ "$BACKUP_COMPRESSION" == "pbzip2" ] ; then - tar -cf $APP_NAME.backup_$DATE.tar * > /dev/null 2>&1 - pbzip2 $APP_NAME.backup_$DATE.tar - mkdir -p $BACKUP_PATH - mv $APP_NAME.backup_$DATE.tar.bz2 $BACKUP_PATH - cd $TMP && rm -rf backup - - elif [ "$BACKUP_COMPRESSION" == "gzip" ] ; then - tar -cf $APP_NAME.backup_$DATE.tar * > /dev/null 2>&1 - gzip $APP_NAME.backup_$DATE.tar - mkdir -p $BACKUP_PATH - mv $APP_NAME.backup_$DATE.tar.gz $BACKUP_PATH - cd $TMP && rm -rf backup - - elif [ "$BACKUP_COMPRESSION" == "bzip2" ] ; then - tar -cf $APP_NAME.backup_$DATE.tar * > /dev/null 2>&1 - bzip2 $APP_NAME.backup_$DATE.tar - mkdir -p $BACKUP_PATH - mv $APP_NAME.backup_$DATE.tar.bz2 $BACKUP_PATH - cd $TMP && rm -rf backup - - elif [ "$BACKUP_COMPRESSION" == "zip" ] ; then - tar -cf $APP_NAME.backup_$DATE.tar * > /dev/null 2>&1 - zip -r $APP_NAME.backup_$DATE.tar.zip $APP_NAME.backup_$DATE.tar > /dev/null 2>&1 - mkdir -p $BACKUP_PATH - mv $APP_NAME.backup_$DATE.tar.zip $BACKUP_PATH - cd $TMP && rm -rf backup - - else - echo "$DATE | Backup - Backup (uncompressed) written to $BACKUP_PATH" >> $LOG - mkdir -p $BACKUP_PATH - mv $TMP/backup $BACKUP_PATH/$APP_NAME.backup_$DATE - cd $TMP && rm -rf backup - fi - - echo "$DATE | Backup - Backup (compressed $BACKUP_COMPRESSION archive) written to $BACKUP_PATH" >> $LOG - notify-send --icon="$ICON" "$NOTIFY_NAME" "Backup created" - cd $CWD - fi - - else - echo "$DATE | Failed to backup - Nothing worth backing up found" >> $LOG - fi -} - ### UPDATE SCRIPT update_script() { ### CHECK FOR LOCAL SCRIPT if ! [ -f "$SCRIPT_PATH/$SCRIPT_FILE_NAME" ] ; then echo "$DATE | Failed to update script - local file not found" >> $LOG - notify-send --icon="$ICON" "$NOTIFY_NAME" "Script update failed! See log for details" + notify-send --icon="$ICON" --app-name="Helium Helper" "Script update failed! See log for details" exit fi @@ -184,12 +99,12 @@ update_script() { ### CHECK FOR EMPTY VERSION TAGS if [ -z "$SCRIPT_VERSION" ] ; then echo "$DATE | Failed to update script - Empty version tag --> local" >> $LOG - notify-send --icon="$ICON" "$NOTIFY_NAME" "Script update failed! See log for details" + notify-send --icon="$ICON" --app-name="Helium Helper" "Script update failed! See log for details" exit elif [ -z "$REMOTE_SCRIPT_VERSION" ] ; then echo "$DATE | Failed to update script - Empty version tag --> $APP_SOURCE" >> $LOG - notify-send --icon="$ICON" "$NOTIFY_NAME" "Script update failed! See log for details" + notify-send --icon="$ICON" --app-name="Helium Helper" "Script update failed! See log for details" exit fi @@ -199,23 +114,22 @@ update_script() { REMOTE_SCRIPT_VERSION_NUM=$(echo $REMOTE_SCRIPT_VERSION | tr -d .) if [ "$REMOTE_SCRIPT_VERSION" == "$SCRIPT_VERSION" ] ; then - notify-send --icon="$ICON" "$NOTIFY_NAME" "Script is up-to-date" + notify-send --icon="$ICON" --app-name="Helium Helper" "Script is up-to-date" elif [ "$REMOTE_SCRIPT_VERSION_NUM" -gt "$SCRIPT_VERSION_NUM" ] ; then mv $SCRIPT_PATH/$SCRIPT_FILE_NAME $BACKUP_PATH/$SCRIPT_FILE_NAME.old mkdir -p $TMP wget -P $TMP $REMOTE_SCRIPT_URL -q - wget -P $TMP $REMOTE_REPO_URL/$PARENT_SCRIPT_FILE_NAME -q - chmod +x $TMP/$SCRIPT_FILE_NAME $TMP/$PARENT_SCRIPT_FILE_NAME - mv $TMP/$SCRIPT_FILE_NAME $TMP/$PARENT_SCRIPT_FILE_NAME $SCRIPT_PATH + chmod +x $TMP/$SCRIPT_FILE_NAME + mv $TMP/$SCRIPT_FILE_NAME $SCRIPT_PATH echo "$DATE | Script updated to version $REMOTE_SCRIPT_VERSION" >> $LOG - notify-send --icon="$ICON" "$NOTIFY_NAME" "Script updated to version $REMOTE_SCRIPT_VERSION" + notify-send --icon="$ICON" --app-name="Helium Helper" "Script updated to version $REMOTE_SCRIPT_VERSION" else echo "$DATE | Failed to update - Malformed version tags" >> $LOG echo "$DATE | Remote Version: $REMOTE_SCRIPT_VERSION" >> $LOG echo "$DATE | Local Version: $SCRIPT_VERSION" >> $LOG - notify-send --icon="$ICON" "$NOTIFY_NAME" "Script update failed! See log for details" + notify-send --icon="$ICON" --app-name="Helium Helper" "Script update failed! See log for details" fi } @@ -229,12 +143,12 @@ update_helium() { ### CHECK FOR EMPTY VERSION TAGS if [[ -z "$APP_SOURCE_VERSION" ]] ; then echo "$DATE | Failed to update - Empty version tag --> $APP_SOURCE" >> $LOG - notify-send --icon="$ICON" "$NOTIFY_NAME" "Browser update failed! See log for details" + notify-send --icon="$ICON" --app-name="Helium Helper" "Browser update failed! See log for details" exit elif [[ -z "$LOCAL_VERSION" ]] ; then echo "$DATE | Failed to update - Empty version tag --> LOCAL" >> $LOG - notify-send --icon="$ICON" "$NOTIFY_NAME" "Browser update failed! See log for details" + notify-send --icon="$ICON" --app-name="Helium Helper" "Browser update failed! See log for details" exit fi @@ -244,21 +158,32 @@ update_helium() { APP_SOURCE_VERSION_NUM=$(echo $APP_SOURCE_VERSION | tr -d .) if [ "$APP_SOURCE_VERSION" == "$LOCAL_VERSION" ] ; then - notify-send --icon="$ICON" "$NOTIFY_NAME" "Browser is up-to-date" + notify-send --icon="$ICON" --app-name="Helium Helper" "Browser is up-to-date" elif [ "$APP_SOURCE_VERSION_NUM" -gt "$LOCAL_VERSION_NUM" ] ; then - mkdir -p $TMP - wget -P $TMP $DOWNLOAD_URL -q + mkdir -p $TMP $BACKUP_PATH + wget -P $TMP $DOWNLOAD_URL -q --show-progress chmod +x $TMP/$APP_SOURCE_FILENAME - backup_helium + if [ -f "$BACKUP_PATH/$APP_NAME.old" ] ; then + rm $BACKUP_PATH/$APP_NAME.old + fi + if [ -d "$APP_CONFIG_PATH" ] ; then + if [ -f "$BACKUP_PATH/$APP_NAME.config_*.tar" ] ; then + rm $BACKUP_PATH/$APP_NAME.config_*.tar + fi + tar -cf $BACKUP_PATH/$APP_NAME.config_$(date).tar $APP_CONFIG_PATH > /dev/null 2>&1 + fi + mv $INSTALL_PATH/$APP_NAME.$FILE_EXTENSION $BACKUP_PATH/$APP_NAME.$FILE_EXTENSION.old mv $TMP/$APP_SOURCE_FILENAME $INSTALL_PATH/$APP_NAME.$FILE_EXTENSION + cp $LAUNCHER_PATH/$APP_NAME.desktop $BACKUP_PATH/$APP_NAME.desktop.old + chmod -x $BACKUP_PATH/*.sh.old $BACKUP_PATH/$APP_NAME.old sed -i "s|X-AppImage-Version=.*|X-AppImage-Version=$($INSTALL_PATH/$APP_NAME.$FILE_EXTENSION --version | awk '{print $2}')|" $LAUNCHER_PATH/$APP_NAME.desktop echo "$DATE | $APP_NAME updated to version ${APP_SOURCE_VERSION}" >> $LOG - notify-send --icon="$ICON" "$NOTIFY_NAME" "Browser updated to version $APP_SOURCE_VERSION" + notify-send --icon="$ICON" --app-name="Helium Helper" "Browser updated to version $APP_SOURCE_VERSION" else echo "$DATE | Failed to update - Version tags malformed" >> $LOG - notify-send --icon="$ICON" "$NOTIFY_NAME" "Browser update failed! See log for details" + notify-send --icon="$ICON" --app-name="Helium Helper" "Browser update failed! See log for details" exit fi @@ -277,7 +202,7 @@ show_log() { xdg-open $LOG else - notify-send --icon="$ICON" "$NOTIFY_NAME" "No log created yet" + notify-send --icon="$ICON" --app-name="Helium Helper" "No log created yet" fi } @@ -314,13 +239,6 @@ exit_clean() { ## GET OPTIONS while getopts ":a,:s,:S,:L,:h" OPTION ; do - - if [ "$(echo $1 | wc -m)" -gt "3" ] ; then - echo -e "\n${YEL}Option ${RED}$1${YEL} not valid! Use only one parameter at a time...${CRS}" - help - exit - fi - case $OPTION in S)