diff --git a/.gitignore b/.gitignore deleted file mode 100644 index ba7230e..0000000 --- a/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -test.sh -binaries \ No newline at end of file diff --git a/README.md b/README.md index 19548bb..d0a2786 100644 --- a/README.md +++ b/README.md @@ -1,93 +1,19 @@ # 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. - -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 -```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` -```sh -./helium_helper.sh -a -``` - ---- -### Updating -**From launcher** (if added during install or by running `./helium_helper.sh -l`) - -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 and configuration and write a log. - -**Terminal** - -Updating can also be done by running: -- Update Helium Browser -```sh -./helium_helper.sh -u -``` -- Update Helium Helper -```sh -./helium_helper.sh -S -``` ---- -### 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.** ## Overview ### Helium_Helper.sh -- Interactive installer, updater & configuration script -- Installs to `$HOME/.apps/Helium` | changeable in line 32 `INSTALL_PATH` +- Interactive installer and updater script +- Installs to `/home//.apps/Helium` | changeable in line 27 `INSTALL_PATH` - Assumes: - - Presence of `$HOME/.apps/Helium` when updating | changeable in line 32 `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` -- Adds options to launcher which are run by `helium_launcher_updater.sh` - - Update Helium - - Update Script - - View Log -- Run `helium_helper.sh -h` for help ---- -### Helium_Launcher_Update.sh -- Update Helium from launcher + - Presence of `/home//.apps/Helium` when updating | changeable in line 27 `INSTALL_PATH` + - Executable named `Helium.AppImage` | for convenience so launchers don't have to be edited at each update +- Keeps prior AppImage as `Helium.old` which will be replaced at every update +- Adds desktop launcher to `/home//.local/share/applications` + +### Helium_Auto_Update.sh +- Automatic updater script +- Installs to `/home//.apps/Helium` | changeable in line 8 `INSTALL_PATH` - Assumes: - - Presence of `$HOME/.apps/Helium` when updating | changeable in line 21 `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` -- Run `helium_launcher_update.sh -h` for help -  \ No newline at end of file + - Presence of `/home//.apps/Helium` when updating | changeable in line 8 `INSTALL_PATH` + - Executable named `helium-browser.AppImage` | for convenience so launchers don't have to be edited at each update +- Loggs to `/home//.apps/Helium/updateLog` +- Keeps prior AppImage as `helium-browser.OldAppImage` which will be replaced at every update diff --git a/assets/launcher/helium.desktop.template b/assets/launcher/helium.desktop.template index e5a55c5..22ea353 100644 --- a/assets/launcher/helium.desktop.template +++ b/assets/launcher/helium.desktop.template @@ -11,7 +11,7 @@ Icon=%ICON_LOCATION% Type=Application Categories=Network;WebBrowser; MimeType=application/pdf;application/rdf+xml;application/rss+xml;application/xhtml+xml;application/xhtml_xml;application/xml;image/gif;image/jpeg;image/png;image/webp;text/html;text/xml;x-scheme-handler/http;x-scheme-handler/https; -Actions=new-window;new-private-window;update;update-script;show-log; +Actions=new-window;new-private-window; X-AppImage-Version=%APP_VERSION% [Desktop Action new-window] @@ -22,14 +22,3 @@ Exec=%APP_LOCATION% Name=New Incognito Window Exec=%APP_LOCATION% --incognito -[Desktop Action update] -Name=Update Helium -Exec=%QUIET_UPDATE_SCRIPT% - -[Desktop Action update-script] -Name=Update Helium Helper -Exec=%SCRIPT_UPDATE% - -[Desktop Action show-log] -Name=Show Update Log -Exec=%OPEN_LOG_EDITOR% \ 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 7a6784c..0000000 --- a/devdoc.md +++ /dev/null @@ -1,98 +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 ---- -- Notification adjusted for KDE & GNOME - - -## Add/To Do -- Roll back from backup -- Update Readme -- Make functional launcher optional -- Variable transfer script - -## 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_auto_update.sh b/helium_auto_update.sh new file mode 100755 index 0000000..6b82096 --- /dev/null +++ b/helium_auto_update.sh @@ -0,0 +1,94 @@ +#!/bin/bash + +# HELIUM BOWSER AUTO UPDATE SCRIPT WITH LOGGING + +## VARIABLES & TMP FOLDER +mkdir -p /tmp/Helium +TMP=/tmp/Helium +INSTALL_PATH=$HOME/.apps/Helium +LOG=$INSTALL_PATH/updateLog +DEPENDENCIES=("curl" "wget") +MISSING=$(cat $TMP/missingDeps 2>/dev/null) +GIT_VERSION=$(curl -s https://api.github.com/repos/imputnet/helium-linux/releases/latest | grep "tag_name" | tr -d \", | awk '{print $2}') +LOCAL_VERSION=$($INSTALL_PATH/helium-browser.AppImage --version | awk '{print $2}') +DATE=$(date) + +## CHECKS +if ! [ -d "$INSTALL_PATH" ] ; then + mkdir -p $INSTALL_PATH + echo "${DATE} | Failed to update - Helium installation path not present - But created for logging" >> $LOG + exit 1 + +elif ! [ -f "$INSTALL_PATH/helium-browser.AppImage" ] ; then + echo "${DATE} | Failed to update - Local Helium AppImage not found" >> $LOG + exit 1 + +else + : + +fi + +### SCRIPT DEPENDENCIES +dependency_check() { + local PACKAGE="$1" + + if command -v "$PACKAGE" >/dev/null 2>&1 ; then + : + + else + echo "$PACKAGE" >>$TMP/missingDeps + + fi +} + +for PACKAGE in "${DEPENDENCIES[@]}" ; do + dependency_check "$PACKAGE" + +done + +if ! [ "$MISSING" ] ; then + : + +else + echo "${DATE} | Failed to update - missing dependencies : $MISSING" >> $LOG + exit 1 + +fi + +## COMPARE VERSIONS +update_helium() { + GIT_URL=$(curl -s https://api.github.com/repos/imputnet/helium-linux/releases/latest | grep "browser_download_url" | grep "x86_64.AppImage" | grep -v "zsync" | tr -d \" | awk '{print $2}') + GIT_FILENAME=$(curl -s https://api.github.com/repos/imputnet/helium-linux/releases/latest | grep "browser_download_url" | grep "x86_64.AppImage" | grep -v "zsync" | tr -d \" | awk '{print $2}' | awk -F'/' '{print $9}') + wget -P $TMP $GIT_URL -q + chmod +x $TMP/$GIT_FILENAME + rm $INSTALL_PATH/helium-browser.OldAppImage >/dev/null 2>&1 + mv $INSTALL_PATH/helium-browser.AppImage $INSTALL_PATH/helium-browser.OldAppImage >/dev/null 2>&1 + mv $TMP/$GIT_FILENAME $INSTALL_PATH/helium-browser.AppImage + echo "${DATE} | Helium updated to ${GIT_VERSION}" >> $LOG +} + +### CHECK FOR EMPTY VERSION TAGS +if [[ -z "$GIT_VERSION" ]] ; then + echo "${DATE} | Failed to update - Emty version tag --> GIT" >> $LOG + exit 1 + +elif [[ -z "$LOCAL_VERSION" ]] ; then + echo "${DATE} | Failed to update - Emty version tag --> LOCAL" >> $LOG + exit 1 + +else + : + +fi + +if [[ "$GIT_VERSION" == "$LOCAL_VERSION" ]] ; then + : + +else + update_helium + +fi + +rm -rf $TMP + +exit 0 diff --git a/helium_helper.sh b/helium_helper.sh index 881985b..8eaaa59 100755 --- a/helium_helper.sh +++ b/helium_helper.sh @@ -1,5 +1,7 @@ #!/bin/bash + # Helium BOWSER INSTALL & UPDATE SCRIPT ---> INTERACTIVE + ########## PREREQUISITES ########### set -e @@ -9,53 +11,42 @@ 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" -FILE_EXTENSION="AppImage" -APP_SOURCE="GitHub" -ARCH_OVERRIDE="" -BACKUP_METHOD="full" -BACKUP_COMPRESSION_OVERRIDE="" +SOURCE="GitHub" 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.1" -ALIAS="helium-helper" -DATE=$(date +"%d%m%y") +SCRIPT_VERSION="0.5.1" +DATE=$(date) ## LOCATIONS TMP=/tmp/$APP_NAME -INSTALL_PATH=$HOME/.apps/$APP_NAME\1 -APP_CONFIG_FOLDER="net.imput.helium" -APP_CONFIG_PATH=$HOME/.config/$APP_CONFIG_FOLDER -ASSET_PATH=$INSTALL_PATH/assets -BACKUP_PATH=$ASSET_PATH/backup -LOG_PATH=$ASSET_PATH/logs +INSTALL_PATH=$HOME/.apps/$APP_NAME +CONFIG_PATH=$INSTALL_PATH/assets +BACKUP_PATH=$INSTALL_PATH/assets/backup +LOG_PATH=$INSTALL_PATH/assets/logs LOG=$LOG_PATH/log LAUNCHER_PATH=$HOME/.local/share/applications SCRIPT_PATH=$HOME/.local/bin +#PROFILE=$HOME/.profile ### for AUTO UPDATE -## REMOTE LOCATIONS -REMOTE_REPO_BRANCH="main" -REMOTE_REPO_URL=https://lab.c95.org/fr4nz/helium-helper/raw/branch/$REMOTE_REPO_BRANCH -REMOTE_SCRIPT_URL=$REMOTE_REPO_URL/$SCRIPT_FILE_NAME -APP_SOURCE_URL=https://api.github.com/repos/imputnet/helium-linux/releases/latest +########## FUNCTIONS ########### -########################### FUNCTIONS ############################ - -#################### DEPENDENCY CHECK #################### +### 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,998 +55,356 @@ dependency_check () { done if [ -f "$TMP/missingDeps" ] ; then - echo -e " ${RED}Following dependencies are missing :\n\n${CRS}$(cat $TMP/missingDeps)\n\n ${CYN}Please install and re-run script !${CRS}\n" + MISSING=$(cat $TMP/missingDeps) + 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() { - if [ "$(echo $SHELL | grep "$SHELL_OPTION")" ] ; then - ACTIVE_SHELL=$SHELL_OPTION - fi - -} - -shell_check() { - SHELLS=("bash" "fish" "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 - - if ! [[ "$ARCH" == "arm64" || "$ARCH" == "x86_64" ]] ; then - echo -e "\n ${CYN}$ARCH ${RED}unsupported! Only ${CYN}x86_68 ${RED}or ${CYN}arm64 ${RED}architecture are supported!${CRS}\n" - exit - fi -} - -#################### LOCAL INSTALL CHECK #################### -local_check() { - if ! [ -d "$INSTALL_PATH" ] ; then - echo -e "\n ${YEL}$APP_NAME_LONG directory not found!${CRS}\n" - install_application 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 - exit fi } -#################### VARIABLE CHECK #################### -path_correction() { - if [ "$TARGET" == "INSTALL" ] ; then - TARGET_PATH=$INSTALL_PATH +### CHECK LOCAL INSTALL +local_check() { + if ! [ -d "$INSTALL_PATH" ] ; then + echo -e "\n ${RED}$APP_NAME_LONG directory not found!${CRS}" + install_helium + exit + + elif ! [ -f "$INSTALL_PATH/$APP_NAME.AppImage" ] ; then + echo -e "\n ${RED}$APP_NAME_LONG directory found but no executable named ${CYN}$APP_NAME.AppImage${RED}!${CRS}" + install_helium + exit - elif [ "$TARGET" == "BACKUP" ] ; then - TARGET_PATH=$BACKUP_PATH - fi - - if ! [ ${TARGET_PATH:0:1} == "/" ] ; then - TARGET_PATH=$(pwd)/$TARGET_PATH - fi - - REVERSE_PATH=$(echo $TARGET_PATH | rev) - if [ "${REVERSE_PATH:0:1}" == "/" ] ; then - TARGET_PATH=$(echo $TARGET_PATH | sed "s|.$||") - fi - - if [ "$TARGET" == "INSTALL" ] ; then - INSTALL_PATH=$TARGET_PATH - - elif [ "$TARGET" == "BACKUP" ] ; then - BACKUP_PATH=$TARGET_PATH fi } -#################### INSTALL #################### -install_application() { - if [ -f "$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION" ] ; then - echo -e " ${YEL}$APP_NAME_LONG AppImage found! Trying to update...${CRS}" - update_application +### INSTALL +install_helium() { + if [ -f "$INSTALL_PATH/$APP_NAME.AppImage" ] ; then + echo -e "\n ${CYN}$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 + read -p " Download and install $APP_NAME_LONG from $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 - chmod +x $TMP/$APP_SOURCE_FILENAME + GIT_URL=$(curl -s https://api.github.com/repos/imputnet/helium-linux/releases/latest | grep "browser_download_url" | grep "x86_64.AppImage" | grep -v "zsync" | tr -d \" | awk '{print $2}') + GIT_FILENAME=$(curl -s https://api.github.com/repos/imputnet/helium-linux/releases/latest | grep "browser_download_url" | grep "x86_64.AppImage" | grep -v "zsync" | tr -d \" | awk '{print $2}' | awk -F'/' '{print $9}') + wget -P $TMP $GIT_URL -q --show-progress + chmod +x $TMP/$GIT_FILENAME mkdir -p $INSTALL_PATH - mv $TMP/$APP_SOURCE_FILENAME $INSTALL_PATH/$APP_NAME.$FILE_EXTENSION - add_launcher + mv $TMP/$GIT_FILENAME $INSTALL_PATH/$APP_NAME.AppImage echo -e "\n ${GRN}$APP_NAME_LONG is installed!${CRS}\n" - break + add_launcher + exit_clean elif [[ "$CONFIRM_INSTALL" == "n" || "$CONFIRM_INSTALL" == "N" ]] ; then - echo -e "\n ${RED}Cancelled!${CRS}\n" - break - - else - echo -e "\n ${YEL}Invalid response!${CRS}\n" - fi - done -} - -#################### LAUNCHER #################### -add_launcher() { - if [ -f "$LAUNCHER_PATH/$APP_NAME.desktop" ] ; then - echo -e "\n ${YEL}${APP_NAME}.desktop already exists!${CRS}" - - elif [ -f "$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION" ] ; then - while true ; do - echo - read -p " Add $APP_NAME_LONG launcher to $LAUNCHER_PATH? (Y/n) : " CONFIRM_LAUNCHER - - if [[ "$CONFIRM_LAUNCHER" == "" || "$CONFIRM_LAUNCHER" == "y" || "$CONFIRM_LAUNCHER" == "Y" ]] ; then - LAUNCHER_URL=$REMOTE_REPO_URL/assets/launcher/helium.desktop.template - ICON_URL=$REMOTE_REPO_URL/assets/icon/helium.png - AUTO_SCRIPT_URL=$REMOTE_REPO_URL/$AUTO_SCRIPT_FILE_NAME - 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 - 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 - 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 - sed -i "s|%QUIET_UPDATE_SCRIPT%|$SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME|" $TMP/helium.desktop.template - sed -i "s|%SCRIPT_UPDATE%|$SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME -S|" $TMP/helium.desktop.template - sed -i "s|%OPEN_LOG_EDITOR%|$SCRIPT_PATH/$AUTO_SCRIPT_FILE_NAME -L|" $TMP/helium.desktop.template - mv $TMP/helium.desktop.template $LAUNCHER_PATH/$APP_NAME.desktop - mv $TMP/helium.png $ASSET_PATH/icon - echo -e "\n ${GRN}$APP_NAME_LONG launcher is set up!${CRS}" - break - - elif [[ "$CONFIRM_LAUNCHER" == "n" || "$CONFIRM_LAUNCHER" == "N" ]] ; then - echo -e " ${RED}Launcher not added!${CRS}" - break + echo -e "\n ${RED}Installation cancelled!${CRS}\n" + exit else echo -e " ${YEL}Invalid response!${CRS}\n" + fi + + done +} + +### LAUNCHER --> TO DO +add_launcher() { + if [ -f "$LAUNCHER_PATH/$APP_NAME.desktop" ] ; then + echo -e "\n ${RED}${APP_NAME}.desktop already exists!${CRS}" + exit + + elif [ -f "$INSTALL_PATH/$APP_NAME.AppImage" ] ; then + while true ; do + 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=https://lab.c95.org/fr4nz/helium-helper/raw/branch/stable/assets/launcher/helium.desktop.template + ICON_URL=https://lab.c95.org/fr4nz/helium-helper/raw/branch/stable/assets/icon/helium.png + LOCAL_VERSION=$($INSTALL_PATH/$APP_NAME.AppImage --version | awk '{print $2}') + 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.AppImage|" $TMP/helium.desktop.template + sed -i "s|%ICON_LOCATION%|$CONFIG_PATH/icon/helium.png|" $TMP/helium.desktop.template + sed -i "s|%APP_VERSION%|$LOCAL_VERSION|" $TMP/helium.desktop.template + mkdir -p $LAUNCHER_PATH $BACKUP_PATH $CONFIG_PATH/icon + cp $TMP/helium.desktop.template $LAUNCHER_PATH/$APP_NAME.desktop + mv $TMP/helium.desktop.template $BACKUP_PATH/$APP_NAME.desktop.backup + mv $TMP/helium.png $CONFIG_PATH/icon + echo -e "\n ${GRN}$APP_NAME_LONG launcher is set up!${CRS}\n" + exit_clean + + elif [[ "$CONFIRM_LAUNCHER" == "n" || "$CONFIRM_LAUNCHER" == "N" ]] ; then + echo -e "\n ${RED}Launcher creation cancelled!${CRS}\n" + exit + + 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 -} - -#################### ALIAS #################### -add_alias() { - if ! [ -f "$SCRIPT_PATH/$SCRIPT_FILE_NAME" ] ; then - mkdir -p $SCRIPT_PATH - wget -P $TMP $REMOTE_SCRIPT_URL -q - chmod +x $TMP/$SCRIPT_FILE_NAME - mv $TMP/$SCRIPT_FILE_NAME $SCRIPT_PATH - fi - 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" - fi - - 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" - fi - - 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" - fi - - 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" fi } -#################### UPDATE #################### -update_application() { - 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}') +### UPDATE +update_helium() { + LOCAL_VERSION=$($INSTALL_PATH/$APP_NAME.AppImage --version | awk '{print $2}') + GIT_VERSION=$(curl -s https://api.github.com/repos/imputnet/helium-linux/releases/latest | 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" + if [ -z "$GIT_VERSION" ] ; then + echo -e "\n ${RED}Empty version tag from ${CYN}$SOURCE${RED}! Can't compare, exiting...${CRS}" exit elif [ -z "$LOCAL_VERSION" ] ; then - echo -e "\n ${RED}Empty version tag from ${CYN}local AppImage${RED}! Can't compare, exiting...${CRS}\n" + echo -e "\n ${RED}Empty version tag from ${CYN}local AppImage${RED}! Can't compare, exiting...${CRS}" exit + fi ### COMPARE LOCAL & REMOTE VERSION LOCAL_VERSION_NUM=$(echo $LOCAL_VERSION | tr -d .) - APP_SOURCE_VERSION_NUM=$(echo $APP_SOURCE_VERSION | tr -d .) + GIT_VERSION_NUM=$(echo $GIT_VERSION | tr -d .) - if [ "$APP_SOURCE_VERSION" == "$LOCAL_VERSION" ] ; then + if [ "$GIT_VERSION" == "$LOCAL_VERSION" ] ; then echo -e "\n ${GRN}$APP_NAME_LONG is already up-to-date!${CRS}\n" - elif [ "$APP_SOURCE_VERSION_NUM" -gt "$LOCAL_VERSION_NUM" ] ; then - echo -e "\n ${LCY}$APP_NAME_LONG is updatable!${CRS}\n" - app_version_info + elif [ "$GIT_VERSION_NUM" -gt "$LOCAL_VERSION_NUM" ] ; then + echo -e "\n ${RED}$APP_NAME_LONG is updatable!${CRS}\n" + echo -e " ${CYN}Local Version :\t${CRS}${LOCAL_VERSION}" + echo -e " ${CYN}$SOURCE Version :\t${CRS}${GIT_VERSION}\n" while true ; do - read -p " Download and update $APP_NAME_LONG from $APP_SOURCE? (Y/n) : " CONFIRM + read -p " Download and update $APP_NAME_LONG from $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}') + GIT_URL=$(curl -s https://api.github.com/repos/imputnet/helium-linux/releases/latest | grep "browser_download_url" | grep "x86_64.AppImage" | grep -v "zsync" | tr -d \" | awk '{print $2}') + GIT_FILENAME=$(curl -s https://api.github.com/repos/imputnet/helium-linux/releases/latest | grep "browser_download_url" | grep "x86_64.AppImage" | 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 - chmod +x $TMP/$APP_SOURCE_FILENAME - mv $TMP/$APP_SOURCE_FILENAME $INSTALL_PATH/$APP_NAME.$FILE_EXTENSION - 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" + wget -P $TMP $GIT_URL -q --show-progress + chmod +x $TMP/$GIT_FILENAME + if [ -f "$INSTALL_PATH/$APP_NAME.old" ] ; then + rm $INSTALL_PATH/$APP_NAME.old + fi + mv $INSTALL_PATH/$APP_NAME.AppImage $INSTALL_PATH/$APP_NAME.old + mv $TMP/$GIT_FILENAME $INSTALL_PATH/$APP_NAME.AppImage + 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" - exit - - else - echo -e "\n ${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 " ${RED}Update failed... Exiting...${CRS}\n" - exit - fi -} - -#################### BACKUP #################### -call_backup() { - BACKUP_COUNT=$(ls $BACKUP_PATH/$APP_NAME.$BACKUP_METHOD.backup_* 2> /dev/null | wc -l) - if [[ "$BACKUP_COUNT" -gt "0" ]] ; 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 -rf $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_logger() { - echo "### $APP_NAME_LONG CONFIG SNAPSHOT $(date) ###" >> $TMP/backup/conf_log - echo >> $TMP/backup/conf_log - echo -e "\n - ${CRS}Creating ${CYN}config log${CRS}...${CRS}" - shell_check - - if [ "$ACTIVE_SHELL" == "zsh" ] ; then - if [ "$(cat $HOME/.zshrc | grep "$ALIAS")" ] ; then - echo " # Shell : $ACTIVE_SHELL" >> $TMP/backup/conf_log - echo " # Alias : TRUE" >> $TMP/backup/conf_log - fi - - elif [ "$ACTIVE_SHELL" == "bash" ] ; then - if [ "$(cat $HOME/.bashrc | grep "$ALIAS")" ] ; then - echo " # Shell : $ACTIVE_SHELL" >> $TMP/backup/conf_log - echo " # Alias : TRUE" >> $TMP/backup/conf_log - fi - - elif [ "$ACTIVE_SHELL" == "fish" ] ; then - if [ "$(cat $HOME/.config/fish/config.fish | grep "source $HOME/.config/fish/$ALIAS.fish")" ] ; then - echo " # Shell : $ACTIVE_SHELL" >> $TMP/backup/conf_log - echo " # Alias : TRUE" >> $TMP/backup/conf_log - fi - - else - echo " # Shell : $ACTIVE_SHELL" >> $TMP/backup/conf_log - echo " # Alias : FALSE" >> $TMP/backup/conf_log - fi - - LOGGABLE=("$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 LOG_ITEM in ${LOGGABLE[@]} ; do - if [ -d "$LOG_ITEM" ] ; then - echo " # Folder : $LOG_ITEM" >> $TMP/backup/conf_log - - elif [ -f "$LOG_ITEM" ] ; then - echo " # File : $LOG_ITEM" >> $TMP/backup/conf_log - - else - echo " # N/A : $LOG_ITEM" >> $TMP/backup/conf_log - fi - done - - echo >> $TMP/backup/conf_log - echo >> $TMP/backup/conf_log - echo "### $SCRIPT_FILE_NAME VARIABLES ###" >> $TMP/backup/conf_log - echo >> $TMP/backup/conf_log - echo "INSTALL_PATH=$INSTALL_PATH" >> $TMP/backup/conf_log - echo "SCRIPT_PATH=$SCRIPT_PATH" >> $TMP/backup/conf_log - echo "LAUNCHER_PATH=$LAUNCHER_PATH" >> $TMP/backup/conf_log - echo "APP_CONFIG_PATH=$APP_CONFIG_PATH" >> $TMP/backup/conf_log - echo >> $TMP/backup/conf_log -} - -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 - - backup_logger -} - -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 - - 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}Packing 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 - tar -cf $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar * > /dev/null 2>&1 - zip -r $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar.zip $APP_NAME.$BACKUP_METHOD.backup_$DATE.tar > /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 - fi -} - -#################### RESTORE BACKUP #################### -select_backup() { - BACKUP_COUNT=$(ls $BACKUP_PATH/$APP_NAME.$BACKUP_TYPE.backup_* 2> /dev/null | wc -l) - if [ "$BACKUP_COUNT" -gt "1" ] ; then - i=1 - mkdir -p $TMP/backup_restore - CWD=$(pwd) - cd $BACKUP_PATH - RESTORE_OPTIONS=$(ls -lt $APP_NAME\.$BACKUP_TYPE\.backup_* | awk '{print $9}') - - for RESTORE_TARGET in ${RESTORE_OPTIONS[@]} ; do - echo " $i - $RESTORE_TARGET" >> $TMP/backup_restore/options - i=$(($i+1)) - done - - cd $CWD - echo -e "\n ${CYN}Choose one of the $BACKUP_COUNT options below${CRS}\n" - echo -e "$(cat $TMP/backup_restore/options)\n" - - while true ; do - read -p " Enter backup ID (1-$BACKUP_COUNT) or exit : " RESTORE_SELECT - - if [[ "$RESTORE_SELECT" -le "$BACKUP_COUNT" && "$RESTORE_SELECT" -gt "0" ]] ; then - RESTORE_FILE=$(sed -n $RESTORE_SELECT\p $TMP/backup_restore/options | awk '{print $3}') - BACKUP_TYPE=$(echo $RESTORE_FILE | awk -F'.' '{print $2}') - RESTORE_SOURCE=$BACKUP_PATH/$RESTORE_FILE - break - - elif [[ "$RESTORE_SELECT" == "exit" || "$RESTORE_SELECT" == "EXIT" ]] ; then - echo - exit_clean - - else - echo -e "\n ${YEL}Invalid response!${CRS}\n" - fi - done - - elif [ "$BACKUP_COUNT" -lt "1" ] ; then - echo -e " ${RED}No backup archive found in ${CYN}$BACKUP_PATH${RED}!${CRS}\n" - exit_clean - - else - RESTORE_SOURCE=$(ls $BACKUP_PATH/$APP_NAME.$BACKUP_TYPE.backup_*) - RESTORE_FILE=$(echo $RESTORE_SOURCE | rev | awk -F'/' '{print $1}' | rev) - - if [ "$BACKUP_TYPE" == "*" ] ; then - BACKUP_TYPE=$(file $RESTORE_SOURCE | awk '{print $1}' | awk -F'.' '{print $2}') - fi - fi - - BACKUP_COMPRESSION=$(file $RESTORE_SOURCE | awk '{print $2}') - decompress_backup - configure_restore - restore_backup -} - -decompress_backup() { - CWD=$(pwd) - mkdir -p $TMP/backup_restore - cd $TMP/backup_restore - echo -e "\n - ${CRS}Decompressing backup archive ${CYN}$RESTORE_FILE${CRS}...${CRS}\n" - cp $RESTORE_SOURCE . - - if [ "$BACKUP_COMPRESSION" == "bzip2" ] ; then - tar -xjf $APP_NAME.*.backup_*.tar.bz2 - rm $APP_NAME.*.backup_*.tar.bz2 - - elif [ "$BACKUP_COMPRESSION" == "gzip" ] ; then - tar -xzf $APP_NAME.*.backup_*.tar.gz - rm $APP_NAME.*.backup_*.tar.gz - - elif [ "$BACKUP_COMPRESSION" == "zip" ] ; then - unzip $APP_NAME.*.backup_*.tar.zip - tar -xf $APP_NAME.*.backup_*.tar - rm $APP_NAME.*.backup_*.tar.zip $APP_NAME.*.backup_*.tar.zip - - else - echo -e " ${YEL}TBA...${CRS}\n" ####################################################################### - fi -} - -configure_restore() { - echo -e " - ${CRS}Analysing ${CYN}$BACKUP_TYPE${CRS} backup content...${CRS}\n" - - RESTORABLE=("$APP_NAME.$FILE_EXTENSION" "$SCRIPT_FILE_NAME" "$AUTO_SCRIPT_FILE_NAME" "$APP_NAME.desktop" "$APP_CONFIG_FOLDER") - - for RESTORE_ITEM in ${RESTORABLE[@]} ; do - if [ -d "$RESTORE_ITEM" ] ; then - if [ -d "$APP_CONFIG_PATH" ] ; then - echo " - Folder : $RESTORE_ITEM | already present" >> $TMP/restore_conf - echo $RESTORE_ITEM >> $TMP/restore_check - - else - echo " - Folder : $RESTORE_ITEM | not present" >> $TMP/restore_conf - fi - - elif [ -f "$RESTORE_ITEM" ] ; then - if [[ -f "$INSTALL_PATH/$RESTORE_ITEM" || -f "$SCRIPT_PATH/$RESTORE_ITEM" || -f "$LAUNCHER_PATH/$RESTORE_ITEM" ]] ; then - echo " - File : $RESTORE_ITEM | already present" >> $TMP/restore_conf - echo "\"$RESTORE_ITEM\"" >> $TMP/restore_check - - else - echo " - File : $RESTORE_ITEM | not present" >> $TMP/restore_conf - fi - fi - done - - RESTORE_PATH=("INSTALL_PATH" "SCRIPT_PATH" "LAUNCHER_PATH" "APP_CONFIG_PATH") - ################################################################################################# - for CHANGED in ${RESTORE_PATH[@]} ; do - LOCAL_PATH=$(echo \$$CHANGED) - echo $LOCAL_PATH - if [ "$(cat conf_log | grep $RESTORE_PATH | awk -F '=' '{print $2}')" == "$LOCAL_PATH" ] ; then - echo $(cat conf_log | grep "${CHANGED}_PATH") >> $TMP/restore_path_change - echo "${CHANGED}_PATH" - - else - echo "BAD" - echo $(cat conf_log | grep "${CHANGED}_PATH") - fi - done -} - -restore_backup() { - echo -e " ${LCY}Backup Content Summary${CRS}\n" - echo -e "$(cat $TMP/restore_conf)\n" - - if [ -f "$TMP/restore_check" ] ; then - echo -e " ${RED}WARNING: Some items are existing on your system!${CRS}\n" - - while true ; do - read -p " Overwrite existing? (y/N) : " RESTORE_OVERWRITE - - if [[ "$RESTORE_OVERWRITE" == "" || "$RESTORE_OVERWRITE" == "n" || "$RESTORE_OVERWRITE" == "N" ]] ; then - echo -e "\n ${RED}Cancelled!${CRS}\n" - break - - elif [[ "$RESTORE_OVERWRITE" == "y" || "$RESTORE_OVERWRITE" == "Y" ]] ; then - EXISTING=$(cat $TMP/restore_check) - - for REPLACE in ${EXISTING[@]} ; do - rm -rf $REPLACE - done - fi - done - - else - echo -e " ${CYN}The content above is about to be restored...${CRS}\n" - - while true ; do - read -p " Proceed with changes? (Y/n) : " RESTORE_CONFIRM - - if [[ "$RESTORE_CONFIRM" == "" || "$RESTORE_CONFIRM" == "y" || "$RESTORE_CONFIRM" == "Y" ]] ; then - echo -e " - ${CRS}Copying ${CYN}$BACKUP_TYPE${CRS} backup files...${CRS}\n" - - elif [[ "$RESTORE_CONFIRM" == "n" || "$RESTORE_CONFIRM" == "N" ]] ; then - echo -e "\n ${RED}Cancelled!${CRS}\n" - break - fi - done - fi -} - -#################### REMOVE #################### -remove_application() { - if [ -d "$INSTALL_PATH" ] ; then - - while true ; do - read -p " Remove $APP_NAME_LONG incl. backups, configuration 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}" - - for RM_PATH in "${REMOVABLE[@]}" ; do - if [[ -f "$RM_PATH" || -d "$RM_PATH" ]] ; then - rm -rf "$RM_PATH" - fi - done - - shell_check - - 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}" - 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}" - 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}" - fi - fi - - echo -e "\n ${YEL}$APP_NAME_LONG removed!${CRS}\n" - break - - elif [[ "$CONFIRM_REMOVE" == "n" || "$CONFIRM_REMOVE" == "N" ]] ; then - echo -e "\n ${RED}Cancelled!${CRS}" - exit - - else - echo -e "\n ${YEL}Invalid response!${CRS}\n" - fi - done - - else - echo -e " ${RED}Can't remove $APP_NAME_LONG! ${CYN}$INSTALL_PATH ${RED}directory not found...${CRS}\n" - exit - fi -} - -#################### SCRIPT VERSION #################### -script_version() { - echo -e "\n ${CYN}$APP_NAME_LONG Helper Script Version : ${CRS}$SCRIPT_VERSION\n" -} - -#################### 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() { - if ! [ -f "$SCRIPT_PATH/$SCRIPT_FILE_NAME" ] ; then - echo -e "\n ${YEL}$SCRIPT_FILE_NAME not found...${CRS}" - - while true ; do - echo - 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 $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 - echo -e "\n ${GRN}$SCRIPT_FILE_NAME is up-to-date!${CRS}\n" - break - - elif [[ "$CONFIRM_SCRIPT_INSTALL" == "n" || "$CONFIRM_SCRIPT_INSTALL" == "N" ]] ; then - echo -e " ${RED}Cancelled!${CRS}\n" + echo -e "\n ${RED}Update cancelled!${CRS}\n" exit else echo -e " ${YEL}Invalid response!${CRS}\n" + fi - done - fi - REMOTE_SCRIPT_VERSION=$(curl -s $REMOTE_SCRIPT_URL | grep -m 1 "SCRIPT_VERSION" | tr -d 'SCRIPT_VERSION="') - - ### CHECK FOR EMPTY VERSION TAGS - if [ -z "$SCRIPT_VERSION" ] ; then - echo -e "\n ${RED}Empty version tag from ${CYN}local script${RED}! Can't compare, exiting...${CRS}\n" - exit - - elif [ -z "$REMOTE_SCRIPT_VERSION" ] ; then - echo -e "\n ${RED}Empty version tag from ${CYN}remote script${RED}! Can't compare, exiting...${CRS}\n" - exit - fi - - ### COMPARE LOCAL & REMOTE VERSION - SCRIPT_VERSION_NUM=$(echo $SCRIPT_VERSION | tr -d .) - REMOTE_SCRIPT_VERSION_NUM=$(echo $REMOTE_SCRIPT_VERSION | tr -d .) - - if [ "$REMOTE_SCRIPT_VERSION" == "$SCRIPT_VERSION" ] ; then - 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 - - while true ; do - read -p " Update $SCRIPT_FILE_NAME? (Y/n) : " CONFIRM_SCRIPT_UPDATE - - if [[ "$CONFIRM_SCRIPT_UPDATE" == "" || "$CONFIRM_SCRIPT_UPDATE" == "y" || "$CONFIRM_SCRIPT_UPDATE" == "Y" ]] ; then - if ! [ -d "$BACKUP_PATH" ] ; then - 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 - 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 - echo -e " ${GRN}$SCRIPT_FILE_NAME is up-to-date!${CRS}" - break - - elif [[ "$CONFIRM_SCRIPT_UPDATE" == "n" || "$CONFIRM_SCRIPT_UPDATE" == "N" ]] ; then - echo -e "\n ${RED}Cancelled!${CRS}\n" - break - - else - echo -e "\n ${YEL}Invalid response!${CRS}\n" - fi done else echo -e "\n ${RED}Version tags malformed or you are using a Beta version!${CRS}\n" - scrip_version_info - echo -e " ${RED}Updating script failed...${CRS}\n" + echo -e " ${CYN}Local Version :\t${CRS}${LOCAL_VERSION}" + echo -e " ${CYN}$SOURCE Version :\t${CRS}${GIT_VERSION}\n" + echo -e " ${RED}Update failed... Exiting...${CRS}\n" + exit + + fi + +} + +### AUTOMATIC UPDATE --> TO DO +auto_update() { + if ! [ -f "$INSTALL_PATH/$APP_NAME.AppImage" ] ; then + echo -e "\n ${RED}$APP_NAME AppImage not found! Can't add auto update script...${CRS}" + exit + + else + echo -e "\n ${RED}Not implemented yet...${CRS}" + exit + 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" +### REMOVE +remove_helium() { + if [ -d "$INSTALL_PATH" ] ; then + + while true ; do + read -p " Remove $APP_NAME_LONG folder $INSTALL_PATH? (Y/n) : " CONFIRM_REMOVE + + if [[ "$CONFIRM_REMOVE" == "" || "$CONFIRM_REMOVE" == "y" || "$CONFIRM_REMOVE" == "Y" ]] ; then + rm -rf $INSTALL_PATH + rm $LAUNCHER_PATH/$APP_NAME.desktop + echo -e "\n ${RED}$APP_NAME_LONG removed!${CRS}\n" + exit + + elif [[ "$CONFIRM_REMOVE" == "n" || "$CONFIRM_REMOVE" == "N" ]] ; then + echo -e "\n ${RED}Removal cancelled!${CRS}\n" + exit + + else + echo -e " ${YEL}Invalid response!${CRS}\n" + + fi + + done + + else + echo -e "\n ${RED}Can't remove $APP_NAME_LONG! ${YEL}$INSTALL_PATH ${RED}directory not found...${CRS}\n" + exit + + fi } -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}') +### SCRIPT VERSION +script_version() { + echo -e "\n ${CYN}$APP_NAME_LONG Helper Script Version : ${GRN}${SCRIPT_VERSION}${CRS}\n" + exit + +} - if [ -z "$APP_SOURCE_VERSION" ] ; then - echo -e "\n ${RED}Empty version tag from ${CYN}$APP_SOURCE${RED}! Can't compare, exiting...${CRS}\n" +### UPDATE SCRIPT --> TO DO +update_script() { + if ! [ -f "$INSTALL_PATH/$APP_NAME.AppImage" ] ; then + echo -e "\n ${RED}$APP_NAME_LONG AppImage not found! Can't update script...${CRS}" + exit + + else + echo -e "\n ${RED}Not implemented yet...${CRS}" + exit + + fi +} + +### COMPARE APPIMAGE VERSION +compare_version() { + LOCAL_VERSION=$($INSTALL_PATH/$APP_NAME.AppImage --version | awk '{print $2}') + GIT_VERSION=$(curl -s https://api.github.com/repos/imputnet/helium-linux/releases/latest | grep "tag_name" | tr -d \", | awk '{print $2}') + + ### CHECK FOR EMPTY VERSION TAGS + if [ -z "$GIT_VERSION" ] ; then + echo -e "\n ${RED}Empty version tag from ${CYN}$SOURCE${RED}! Can't compare, exiting...${CRS}" exit elif [ -z "$LOCAL_VERSION" ] ; then - echo -e "\n ${RED}Empty version tag from ${CYN}local AppImage${RED}! Can't compare, exiting...${CRS}\n" + echo -e "\n ${RED}Empty version tag from ${CYN}local AppImage${RED}! Can't compare, exiting...${CRS}" exit + fi + ### COMPARE LOCAL & REMOTE VERSION LOCAL_VERSION_NUM=$(echo $LOCAL_VERSION | tr -d .) - APP_SOURCE_VERSION_NUM=$(echo $APP_SOURCE_VERSION | tr -d .) + GIT_VERSION_NUM=$(echo $GIT_VERSION | tr -d .) - if [ "$APP_SOURCE_VERSION" == "$LOCAL_VERSION" ] ; then + if [ "$GIT_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}$SOURCE Version :\t${CRS}${GIT_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 + elif [ "$GIT_VERSION_NUM" -gt "$LOCAL_VERSION_NUM" ] ; then + echo -e "\n ${YEL}$APP_NAME_LONG is updatable!${CRS}\n" + echo -e " ${CYN}Local Version :\t${CRS}${LOCAL_VERSION}" + echo -e " ${CYN}$SOURCE Version :\t${CRS}${GIT_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}$SOURCE Version :\t${CRS}${GIT_VERSION}\n" + echo -e " ${RED}Update failed ... Exiting ...${CRS}\n" + exit + fi } -#################### HELP #################### +### HELP 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 | -B | -r | -c | -s | -S | -h ]\n" + echo -e "Syntax: $SCRIPT_FILE_NAME [ -i | -L | -u | -r | -c | -s | -h ]\n" # | -U | -S echo -e "Options:\n" - echo -e "\t-i\tInstall $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-B\tRestore $APP_NAME_LONG & configuration from backup" + echo -e "\t-i\tDownload & install $APP_NAME_LONG from $SOURCE" + echo -e "\t-L\tCreate desktop launcher" + echo -e "\t-u\tDownload & update $APP_NAME_LONG from $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-S\tUpdate script ${RED}--> Not yet working${CRS}" + 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" } -#################### EXIT CLEAN #################### +### EXIT CLEAN exit_clean() { if [ -d "$TMP" ] ; then rm -rf $TMP + fi exit } -########################### MAIN ########################### - -while getopts ":i,:l,:a,:u,:b,: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 +########## MAIN ########## +## GET OPTIONS +while getopts ":i,:L,:u,:U,:r,:c,:s,:S,:h" OPTION ; do case $OPTION in i) - TARGET="INSTALL" - 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 ${YEL}Installing $APP_NAME_LONG...${CRS}" dependency_check - arch_check - path_correction - install_application - exit_clean ;; + local_check + install_helium + exit_clean + exit ;; - l) + L) echo -e "\n ${YEL}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 - shell_check - add_alias + exit_clean exit ;; - + u) echo -e "\n ${YEL}Updating $APP_NAME_LONG...${CRS}" dependency_check - arch_check local_check - update_application - exit_clean ;; + update_helium + exit_clean + exit ;; - b) - TARGET="BACKUP" - 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" || -d "$(pwd)/$PARAMETER" ]] ; then - BACKUP_PATH=$PARAMETER - fi - done - fi - path_correction - call_backup - exit_clean ;; - - B) - TARGET="BACKUP" - echo -e "\n ${YEL}Restoring $APP_NAME_LONG from backup...${CRS}" - if [ "$#" -gt "1" ] ; then - ALL_PARAMETER=$@ - - for PARAMETER in ${ALL_PARAMETER[@]} ; do - if [[ "$PARAMETER" == "script" || "$PARAMETER" == "config" || "$PARAMETER" == "app" || "$PARAMETER" == "full" ]] ; then - BACKUP_TYPE=$PARAMETER - - elif [[ -d $PARAMETER || -d $(pwd)/$PARAMETER ]] ; then - BACKUP_PATH=$PARAMETER - - else - BACKUP_TYPE=* - fi - done - - else - BACKUP_TYPE=* - - fi + U) + echo -e "\n ${YEL}Enabling automatic updates...${CRS}" dependency_check - path_correction - select_backup - exit_clean ;; + local_check + auto_update + exit_clean + exit ;; r) - echo -e "\n ${YEL}Removing $APP_NAME_LONG...${CRS}\n" - remove_application + echo -e "\n ${YEL}Removing $APP_NAME_LONG...${CRS}" + remove_helium exit ;; c) @@ -1063,7 +412,8 @@ while getopts ":i,:l,:a,:u,:b,:B,:r,:c,:s,:S,:h" OPTION ; do dependency_check local_check compare_version - exit_clean ;; + exit_clean + exit ;; s) script_version @@ -1072,29 +422,32 @@ while getopts ":i,:l,:a,:u,:b,:B,:r,:c,:s,:S,:h" OPTION ; do S) echo -e "\n ${YEL}Updating script...${CRS}" dependency_check + local_check update_script - exit_clean ;; + exit_clean + exit ;; h) help - exit ;; + exit;; *) - echo -e "\n${YEL}Option ${RED}$1${YEL} not recognized... Refer to help below!${CRS}" + echo -e "\n${YEL}Option ${RED}-t${YEL} not recognized... Refer to help below!${CRS}" help - exit ;; + exit;; + 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 deleted file mode 100755 index 0f2d1c2..0000000 --- a/helium_launcher_update.sh +++ /dev/null @@ -1,374 +0,0 @@ -#!/bin/bash -# HELIUM BOWSER AUTO UPDATE SCRIPT WITH LOGGING -########## PREREQUISITES ########### -set -e - -## GLOBAL VARIABLES -APP_NAME="Helium" -APP_NAME_LONG="Helium Web Browser" -ARCH="x86_64" -FILE_EXTENSION="AppImage" -APP_SOURCE="GitHub" -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.1" -LOG_DATE=$(date) -DATE=$(date +"%d%m%y") - -## NOTIFICATIONS -NOTIFY_NAME="Helium Helper" - -## LOCATIONS -TMP=/tmp/$APP_NAME -INSTALL_PATH=$HOME/.apps/$APP_NAME -APP_CONFIG_PATH=$HOME/.config/net.imput.helium -ASSET_PATH=$INSTALL_PATH/assets -BACKUP_PATH=$ASSET_PATH/backup -LOG_PATH=$ASSET_PATH/logs -LOG=$LOG_PATH/log -LAUNCHER_PATH=$HOME/.local/share/applications -ICON=$ASSET_PATH/icon/helium.png -SCRIPT_PATH=$HOME/.local/bin - -## REMOTE LOCATIONS -REMOTE_REPO_BRANCH="main" -REMOTE_REPO_URL=https://lab.c95.org/fr4nz/helium-helper/raw/branch/$REMOTE_REPO_BRANCH -REMOTE_SCRIPT_URL=$REMOTE_REPO_URL/$SCRIPT_FILE_NAME -APP_SOURCE_URL=https://api.github.com/repos/imputnet/helium-linux/releases/latest - -########## FUNCTIONS ########### - -### DEPENDENCIES -cmd_query() { - local PACKAGE="$1" - - if ! command -v "$PACKAGE" >/dev/null 2>&1 ; then - echo " - $PACKAGE" >> $TMP/missingDeps - - fi -} - -dependency_check () { - DEPENDENCIES=("curl" "wget") - mkdir -p $TMP - - for PACKAGE in "${DEPENDENCIES[@]}" ; do - cmd_query "$PACKAGE" - - done - - if ! [ -f "$LOG" ] ; then - mkdir -p $LOG_PATH - echo "########## $APP_NAME_LONG update log ##########" >> $LOG - echo >> $LOG - echo "$LOG_DATE | Log created" >> $LOG - - fi - - if [ -f "$TMP/missingDeps" ] ; then - MISSING=$(cat $TMP/missingDeps) - echo "$LOG_DATE | Failed to update - missing dependencies : $MISSING" >> $LOG - notify-send --icon="$ICON" "$NOTIFY_NAME" "Update failed! See log for details" - exit_clean - - fi - - if ! [ -d "$INSTALL_PATH" ] ; then - mkdir -p $INSTALL_PATH - echo "$LOG_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" - exit - - elif ! [ -f "$INSTALL_PATH/$APP_NAME.$FILE_EXTENSION" ] ; then - echo "$LOG_DATE | Failed to update - Local $APP_NAME AppImage not found" >> $LOG - notify-send --icon="$ICON" "$NOTIFY_NAME" "Update failed! See log for details" - exit - - fi - -} - -### DE CHECK -desktop_environment() { - ALTERNATIVE_NOTIFY="--app-name="$NOTIFY_NAME"" - - if [[ "$(echo $XDG_CURRENT_DESKTOP | grep -iF "kde")" || "$(echo $XDG_CURRENT_DESKTOP | grep -iF "gnome")" ]] ; then - NOTIFY_NAME=$ALTERNATIVE_NOTIFY - 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.auto_backup_$DATE.tar * > /dev/null 2>&1 - pbzip2 $APP_NAME.auto_backup_$DATE.tar - mkdir -p $BACKUP_PATH - mv $APP_NAME.auto_backup_$DATE.tar.bz2 $BACKUP_PATH - cd $TMP && rm -rf backup - - elif [ "$BACKUP_COMPRESSION" == "gzip" ] ; then - tar -cf $APP_NAME.auto_backup_$DATE.tar * > /dev/null 2>&1 - gzip $APP_NAME.auto_backup_$DATE.tar - mkdir -p $BACKUP_PATH - mv $APP_NAME.auto_backup_$DATE.tar.gz $BACKUP_PATH - cd $TMP && rm -rf backup - - elif [ "$BACKUP_COMPRESSION" == "bzip2" ] ; then - tar -cf $APP_NAME.auto_backup_$DATE.tar * > /dev/null 2>&1 - bzip2 $APP_NAME.auto_backup_$DATE.tar - mkdir -p $BACKUP_PATH - mv $APP_NAME.auto_backup_$DATE.tar.bz2 $BACKUP_PATH - cd $TMP && rm -rf backup - - elif [ "$BACKUP_COMPRESSION" == "zip" ] ; then - tar -cf $APP_NAME.auto_backup_$DATE.tar * > /dev/null 2>&1 - zip -r $APP_NAME.auto_backup_$DATE.tar.zip $APP_NAME.auto_backup_$DATE.tar > /dev/null 2>&1 - mkdir -p $BACKUP_PATH - mv $APP_NAME.auto_backup_$DATE.tar.zip $BACKUP_PATH - cd $TMP && rm -rf backup - - else - echo "$LOG_DATE | Backup (uncompressed) written to $BACKUP_PATH" >> $LOG - mkdir -p $BACKUP_PATH - mv $TMP/backup $BACKUP_PATH/$APP_NAME.auto_backup_$DATE - cd $TMP && rm -rf backup - fi - - echo "$LOG_DATE | Backup (compressed $BACKUP_COMPRESSION archive) written to $BACKUP_PATH" >> $LOG - notify-send --icon="$ICON" "$NOTIFY_NAME" "Backup created" - cd $CWD - fi - - else - echo "$LOG_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 "$LOG_DATE | Failed to update script - local file not found" >> $LOG - notify-send --icon="$ICON" "$NOTIFY_NAME" "Script update failed! See log for details" - exit - - fi - - REMOTE_SCRIPT_VERSION=$(curl -s $REMOTE_SCRIPT_URL | grep -m 1 "SCRIPT_VERSION" | tr -d 'SCRIPT_VERSION="') - - ### CHECK FOR EMPTY VERSION TAGS - if [ -z "$SCRIPT_VERSION" ] ; then - echo "$LOG_DATE | Failed to update script - Empty version tag --> local" >> $LOG - notify-send --icon="$ICON" "$NOTIFY_NAME" "Script update failed! See log for details" - exit - - elif [ -z "$REMOTE_SCRIPT_VERSION" ] ; then - echo "$LOG_DATE | Failed to update script - Empty version tag --> $APP_SOURCE" >> $LOG - notify-send --icon="$ICON" "$NOTIFY_NAME" "Script update failed! See log for details" - exit - - fi - - ### COMPARE LOCAL & REMOTE VERSION - SCRIPT_VERSION_NUM=$(echo $SCRIPT_VERSION | tr -d .) - 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" - - 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 - echo "$LOG_DATE | Script updated to version $REMOTE_SCRIPT_VERSION" >> $LOG - notify-send --icon="$ICON" "$NOTIFY_NAME" "Script updated to version $REMOTE_SCRIPT_VERSION" - - else - echo "$LOG_DATE | Failed to update - Malformed version tags" >> $LOG - echo "$LOG_DATE | Remote Version: $REMOTE_SCRIPT_VERSION" >> $LOG - echo "$LOG_DATE | Local Version: $SCRIPT_VERSION" >> $LOG - notify-send --icon="$ICON" "$NOTIFY_NAME" "Script update failed! See log for details" - fi -} - -### UPDATE -update_helium() { - 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}') - 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 "$LOG_DATE | Failed to update - Empty version tag --> $APP_SOURCE" >> $LOG - notify-send --icon="$ICON" "$NOTIFY_NAME" "Browser update failed! See log for details" - exit - - elif [[ -z "$LOCAL_VERSION" ]] ; then - echo "$LOG_DATE | Failed to update - Empty version tag --> LOCAL" >> $LOG - notify-send --icon="$ICON" "$NOTIFY_NAME" "Browser update failed! See log for details" - 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 - notify-send --icon="$ICON" "$NOTIFY_NAME" "Browser is up-to-date" - - elif [ "$APP_SOURCE_VERSION_NUM" -gt "$LOCAL_VERSION_NUM" ] ; then - mkdir -p $TMP - wget -P $TMP $DOWNLOAD_URL -q - chmod +x $TMP/$APP_SOURCE_FILENAME - backup_helium - mv $TMP/$APP_SOURCE_FILENAME $INSTALL_PATH/$APP_NAME.$FILE_EXTENSION - 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 "$LOG_DATE | $APP_NAME updated to version ${APP_SOURCE_VERSION}" >> $LOG - notify-send --icon="$ICON" "$NOTIFY_NAME" "Browser updated to version $APP_SOURCE_VERSION" - - else - echo "$LOG_DATE | Failed to update - Version tags malformed" >> $LOG - notify-send --icon="$ICON" "$NOTIFY_NAME" "Browser update failed! See log for details" - exit - - fi - -} - -### SCRIPT VERSION -script_version() { - echo -e "\n ${CYN}$APP_NAME_LONG Auto Update Script Version :${CRS} $SCRIPT_VERSION\n" - -} - -### SHOW LOG -show_log() { - if [ -f "$LOG" ] ; then - xdg-open $LOG - - else - notify-send --icon="$ICON" "$NOTIFY_NAME" "No log created yet" - - fi -} - -### HELP -help() { - echo -e "\n${LCY}$SCRIPT_NAME${CRS}\n" - echo -e "$APP_NAME_LONG launcher updater script\n" - echo -e "Description: Add functionality to $APP_NAME_LONG's launcher\n" - echo -e "Syntax: $SCRIPT_FILE_NAME [ -s | -S | -L | -h ]\n" - echo -e "Options:\n" - echo -e "\t-s\tShow script version" - echo -e "\t-S\tUpdate $SCRIPT_FILE_NAME" - echo -e "\t-L\tOpen log in default text editor" - 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}$LOG_PATH${CRS}\tLog location" - echo -e "\t${CYN}$LAUNCHER_PATH${CRS}\tLauncher location" - echo -e "\t${CYN}$SCRIPT_PATH${CRS}\t\t\tScript location\n" -} - -### EXIT CLEAN -exit_clean() { - if [ -d "$TMP" ] ; then - rm -rf $TMP - - fi - - exit -} - -########## MAIN ########## - -## 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) - dependency_check - update_script - exit_clean ;; - - s) - script_version - exit_clean ;; - - L) - show_log - exit_clean ;; - - h) - help - exit_clean ;; - - *) - echo -e "\n${YEL}Option ${RED}$1${YEL} not recognized... Refer to help below!${CRS}" - help - exit_clean ;; - - esac - -done - -## DEPENDENCY CHECK -dependency_check - -## DE CHECK -desktop_environment - -## UPDATE -update_helium - -## CLEAN -exit_clean diff --git a/todo.md b/todo.md new file mode 100644 index 0000000..a4fb1dc --- /dev/null +++ b/todo.md @@ -0,0 +1,69 @@ +# To Do List Helium installer + +## Last Jobs +- Improved Version comparasing +- Clean up function added +- Remover function added +- Dummy functions added for: + - Auto Update + - Script update +- Dependency check fixed +- Launcher function works +- Remover extended +- Readme updated + + +## Add +- Internet connectivity check in [Auto Update Script](https://lab.c95.org/fr4nz/helium-helper/src/branch/main/helium_auto_update.sh) +- Desktop entry updater [Helper Script](https://lab.c95.org/fr4nz/helium-helper/src/branch/main/helium_helper.sh) & [Auto Update Script](https://lab.c95.org/fr4nz/helium-helper/src/branch/main/helium_auto_update.sh) +- Auto update setup + - shell recognition +- Script updater +- Architecture detection +- Uninstaller --> Partially done +- Set alias + +## Repo +- Merge workflow + - Convert URLs from __main__ to __stable__ + - Remove to do list + - Remove comment from script + +## Fix + +## Notes + +```sh +############# TO DO + 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 +############# +``` \ No newline at end of file