diff --git a/pdfScale.sh b/pdfScale.sh index d98d316..a259759 100755 --- a/pdfScale.sh +++ b/pdfScale.sh @@ -12,7 +12,7 @@ # And: https://gist.github.com/MichaelJCole/86e4968dbfc13256228a -VERSION="2.3.2" +VERSION="2.3.4" ###################### EXTERNAL PROGRAMS ####################### @@ -95,6 +95,9 @@ PROJECT_NAME="pdfScale" PROJECT_URL="https://github.com/tavinus/$PROJECT_NAME" PROJECT_BRANCH='master' HTTPS_INSECURE=$FALSE +ASSUME_YES=$FALSE +RUN_SELF_INSTALL=$FALSE +TARGET_LOC="/usr/local/bin/pdfscale" ########################## EXIT FLAGS ########################## @@ -273,9 +276,9 @@ gsPageScale() { # Prints GS call for scaling gsPrintPageScale() { - local _call_str="" + local _call_str="" # Print Scale page command - read -d '' _call_str<< _EOF_ + read -d '' _call_str<< _EOF_ "$GSBIN" \ -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dSAFER \ -dCompatibilityLevel="1.5" -dPDFSETTINGS="$PDF_SETTINGS" \ @@ -289,7 +292,7 @@ gsPrintPageScale() { -f "$INFILEPDF" _EOF_ - echo -ne "$_call_str" + echo -ne "$_call_str" } # Runs the ghostscript paper resize script @@ -330,9 +333,9 @@ gsPageResize() { # Prints GS call for resizing gsPrintPageResize() { # Print Resize page command - local _call_str="" + local _call_str="" # Print Scale page command - read -d '' _call_str<< _EOF_ + read -d '' _call_str<< _EOF_ "$GSBIN" \ -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dSAFER \ -dCompatibilityLevel="1.5" -dPDFSETTINGS="$PDF_SETTINGS" \ @@ -347,7 +350,7 @@ gsPrintPageResize() { -f "$INFILEPDF" _EOF_ - echo -ne "$_call_str" + echo -ne "$_call_str" } # Returns $TRUE if we should use the source paper size, $FALSE otherwise @@ -546,13 +549,23 @@ getOptions() { shift ;; --install|--self-install) + RUN_SELF_INSTALL=$TRUE shift - selfInstall "$1" - shift + if [[ ${1:0:1} != "-" ]]; then + TARGET_LOC="$1" + shift + fi ;; --upgrade|--self-upgrade) + RUN_SELF_UPGRADE=$TRUE shift - selfUpgrade + ;; + --insecure|--no-check-certificate) + HTTPS_INSECURE=$TRUE + shift + ;; + --yes|--assume-yes) + ASSUME_YES=$TRUE shift ;; --print-gs-call|--gs-call) @@ -564,6 +577,9 @@ getOptions() { ;; esac done + + shouldInstall && selfInstall "$TARGET_LOC" # WILL EXIT HERE + shouldUpgrade && selfUpgrade # WILL EXIT HERE isEmpty "${_optArgs[2]}" || initError "Seems like you passed an extra file name?"$'\n'"Invalid option: ${_optArgs[2]}" $EXIT_INVALID_OPTION @@ -598,6 +614,16 @@ getOptions() { validateOutFile } +# Returns $TRUE if the install flag is set +shouldInstall() { + return $RUN_SELF_INSTALL +} + +# Returns $TRUE if the upgrade flag is set +shouldUpgrade() { + return $RUN_SELF_UPGRADE +} + # Install pdfScale selfInstall() { CURRENT_LOC="$(readlink -f $0)" @@ -618,19 +644,29 @@ selfInstall() { local _answer="NO" if isNotDir "$TARGET_FOLDER"; then echo $'\nThe target folder does not exist\n > '"$TARGET_FOLDER" - read -p $'\nCreate the target folder? Y/y to continue > ' _answer - _answer="$(lowercase $_answer)" + if assumeYes; then + echo '' + _answer="y" + else + read -p $'\nCreate the target folder? Y/y to continue > ' _answer + _answer="$(lowercase $_answer)" + fi if [[ "$_answer" = "y" || "$_answer" = "yes" ]]; then _answer="no" if mkdir -p "$TARGET_FOLDER" 2>/dev/null; then - echo "Folder Created!" + echo " > Folder Created!" else echo $'\n'"There was an error when trying to create the folder." - read -p $'\nDo you want to try again with sudo (as root)? Y/y to continue > ' _answer - _answer="$(lowercase $_answer)" + if assumeYes; then + echo $'\nTrying again with sudo, enter password if needed > ' + _answer="y" + else + read -p $'\nDo you want to try again with sudo (as root)? Y/y to continue > ' _answer + _answer="$(lowercase $_answer)" + fi if [[ "$_answer" = "y" || "$_answer" = "yes" ]]; then NEED_SUDO=$TRUE - if mkdir -p "$TARGET_FOLDER" 2>/dev/null; then + if sudo mkdir -p "$TARGET_FOLDER" 2>/dev/null; then echo "Folder Created!" else echo "There was an error when trying to create the folder." @@ -642,19 +678,23 @@ selfInstall() { fi fi else - echo "Exiting..." + echo "Exiting... (cancelled by user)" exit $EXIT_ERROR fi fi _answer="no" if isFile "$TARGET_LOC"; then echo $'\n'"The target file already exists: $TARGET_LOC" - read -p "Y/y to overwrite, anything else to cancel > " _answer - _answer="$(lowercase $_answer)" + if assumeYes; then + _answer="y" + else + read -p "Y/y to overwrite, anything else to cancel > " _answer + _answer="$(lowercase $_answer)" + fi if [[ "$_answer" = "y" || "$_answer" = "yes" ]]; then echo "Target will be replaced!" else - echo "Exiting..." + echo "Exiting... (cancelled by user)" exit $EXIT_ERROR fi fi @@ -675,8 +715,13 @@ selfInstall() { else _answer="no" echo "There was an error when trying to install pdfScale." - read -p $'Do you want to try again with sudo (as root)? Y/y to continue > ' _answer - _answer="$(lowercase $_answer)" + if assumeYes; then + echo $'\nTrying again with sudo, enter password if needed > ' + _answer="y" + else + read -p $'Do you want to try again with sudo (as root)? Y/y to continue > ' _answer + _answer="$(lowercase $_answer)" + fi if [[ "$_answer" = "y" || "$_answer" = "yes" ]]; then NEED_SUDO=$TRUE if sudo cp "$CURRENT_LOC" "$TARGET_LOC"; then @@ -688,15 +733,16 @@ selfInstall() { exit $EXIT_ERROR fi else - echo "Exiting..." + echo "Exiting... (cancelled by user)" exit $EXIT_ERROR fi fi - exit $? + exit $EXIT_ERROR } # Tries to download with curl or wget getUrl() { + useInsecure && echo $'\nHTTPS Insecure flag is enabled!\nCertificates will be ignored by curl/wget\n' local url="$1" local target="$2" local _stat="" @@ -711,7 +757,7 @@ getUrl() { if isExecutable "$WGET_BIN"; then useInsecure && WGET_BIN="$WGET_BIN --no-check-certificate" echo "Downloading file with wget" - _stat="$("$WGET_BIN" -O "$target" "$url" 2>&1)" + _stat="$($WGET_BIN -O "$target" "$url" 2>&1)" if [[ $? -eq 0 ]]; then return $TRUE else @@ -724,7 +770,7 @@ getUrl() { elif isExecutable "$CURL_BIN"; then useInsecure && CURL_BIN="$CURL_BIN --insecure" echo "Downloading file with curl" - _stat="$("$CURL_BIN" -o "$target" "$url" 2>&1)" + _stat="$($CURL_BIN -o "$target" "$url" 2>&1)" if [[ $? -eq 0 ]]; then return $TRUE else @@ -743,37 +789,37 @@ getUrl() { # Tries to remove temporary files from upgrade clearUpgrade() { - echo $'\nCleaning up downloaded files from /tmp' - if isFile "$TMP_TARGET"; then - echo -n " Remove $TMP_TARGET > " - rm "$TMP_TARGET" 2>/dev/null && echo "Ok" || echo "Fail" - else - echo " No temporary tarball was found to remove." - fi - if isDir "$TMP_EXTRACTED"; then - echo -n " Remove $TMP_EXTRACTED > " - rm -rf "$TMP_EXTRACTED" 2>/dev/null && echo "Ok" || echo "Fail" - else - echo " No temporary master folder was found to remove." - fi + echo $'\nCleaning up downloaded files from /tmp' + if isFile "$TMP_TARGET"; then + echo -n " > $TMP_TARGET > " + rm "$TMP_TARGET" 2>/dev/null && echo "Ok" || echo "Fail" + else + echo " > no temporary tarball was found to remove" + fi + if isDir "$TMP_EXTRACTED"; then + echo -n " > $TMP_EXTRACTED > " + rm -rf "$TMP_EXTRACTED" 2>/dev/null && echo "Ok" || echo "Fail" + else + echo " > no temporary master folder was found to remove" + fi } # Exit upgrade with message and status code # $1 Mensagem (printed if not empty) # $2 Status (defaults to $EXIT_ERROR) exitUpgrade() { - isDir "$_cwd" && cd "$_cwd" - isNotEmpty "$1" && echo "$1" - clearUpgrade - isNotEmpty "$2" && exit $2 - exit $EXIT_ERROR + isDir "$_cwd" && cd "$_cwd" + isNotEmpty "$1" && echo "$1" + clearUpgrade + isNotEmpty "$2" && exit $2 + exit $EXIT_ERROR } # Downloads current version from github's MASTER branch selfUpgrade() { CURRENT_LOC="$(readlink -f $0)" _cwd="$(pwd)" - local _cur_tstamp="$(date '+%Y%m%d-%H%M%S')" + local _cur_tstamp="$(date '+%Y%m%d-%H%M%S')" TMP_DIR='/tmp' TMP_TARGET="$TMP_DIR/pdfScale_$_cur_tstamp.tar.gz" TMP_EXTRACTED="$TMP_DIR/$PROJECT_NAME-$PROJECT_BRANCH" @@ -791,13 +837,13 @@ selfUpgrade() { echo $'\n'"Extracting compressed file" cd "$TMP_DIR" if ! (tar xzf "$TMP_TARGET" 2>/dev/null || gtar xzf "$TMP_TARGET" 2>/dev/null); then - exitUpgrade "Extraction error." + exitUpgrade "Extraction error." fi if ! cd "$TMP_EXTRACTED" 2>/dev/null; then - exitUpgrade $'Error when accessing temporary folder\n > '"$TMP_EXTRACTED" + exitUpgrade $'Error when accessing temporary folder\n > '"$TMP_EXTRACTED" fi if ! chmod +x pdfScale.sh; then - exitUpgrade $'Error when setting new pdfScale to executable\n > '"$TMP_EXTRACTED/pdfScale.sh" + exitUpgrade $'Error when setting new pdfScale to executable\n > '"$TMP_EXTRACTED/pdfScale.sh" fi local newver="$(./pdfScale.sh --version 2>/dev/null)" local curver="$(printVersion 3 2>/dev/null)" @@ -816,40 +862,50 @@ selfUpgrade() { echo "It is basically a miracle or you have came from the future with this version!" echo "BE CAREFUL NOT TO DELETE THE BETA/ALPHA VERSION WITH THIS UPDATE!" else - exitUpgrade "An unidentified error has ocurred. Exiting..." + exitUpgrade "An unidentified error has ocurred. Exiting..." + fi + if assumeYes; then + echo $'\n'"Assume yes activated, current version will be replaced with master branch" + _answer="y" + else + echo "whyyy?" + echo $'\n'"Are you sure that you want to replace the current installation with the downloaded one?" + read -p "Y/y to continue, anything else to cancel > " _answer + _answer="$(lowercase $_answer)" fi - - echo $'\n'"Are you sure that you want to replace the current instalation with the downloaded one?" - read -p "Y/y to continue, anything else to cancel > " _answer - _answer="$(lowercase $_answer)" echo if [[ "$_answer" = "y" || "$_answer" = "yes" ]]; then echo "Upgrading..." if cp "./pdfScale.sh" "$CURRENT_LOC" 2>/dev/null; then - exitUpgrade $'\n'"Success! Upgrade finished!"$'\n'" > $CURRENT_LOC" $EXIT_SUCCESS + exitUpgrade $'\n'"Success! Upgrade finished!"$'\n'" > $CURRENT_LOC" $EXIT_SUCCESS else _answer="no" echo $'\n'"There was an error when copying the new version." - echo "Do you want to retry using sudo (as root)?" - read -p "Y/y to continue, anything else to cancel > " _answer + if assumeYes; then + echo $'\nAssume yes activated, retrying with sudo.\nEnter password if needed > \n' + _answer="y" + else + echo "Do you want to retry using sudo (as root)?" + read -p "Y/y to continue, anything else to cancel > " _answer + fi _answer="$(lowercase $_answer)" if [[ "$_answer" = "y" || "$_answer" = "yes" ]]; then echo "Upgrading with sudo..." if sudo cp "./pdfScale.sh" "$CURRENT_LOC" 2>/dev/null; then - exitUpgrade $'\n'"Success! Upgrade finished!"$'\n'" > $CURRENT_LOC" $EXIT_SUCCESS + exitUpgrade $'\n'"Success! Upgrade finished!"$'\n'" > $CURRENT_LOC" $EXIT_SUCCESS else - exitUpgrade "There was an error when copying the new version." + exitUpgrade "There was an error when copying the new version." fi else - exitUpgrade "Exiting... (cancelled by user)" + exitUpgrade "Exiting... (cancelled by user)" fi fi - exitUpgrade "An unidentified error has ocurred. Exiting..." + exitUpgrade "An unidentified error has ocurred. Exiting..." else exitUpgrade "Exiting... (cancelled by user)" fi - exitUpgrade "An unidentified error has ocurred. Exiting..." + exitUpgrade "An unidentified error has ocurred. Exiting..." } # Compares versions with x.x.x format @@ -1803,6 +1859,16 @@ useInsecure() { return $HTTPS_INSECURE } +# Returns $TRUE if we should not ask anything and assume yes as answer +assumeYes() { + return $ASSUME_YES +} + +# Returns $TRUE if we should ask the user for input +shouldAskUser() { + assumeYes && return $FALSE + return $TRUE +} ###################### PRINTING TO SCREEN ###################### @@ -1861,6 +1927,10 @@ Parameters: --upgrade, --self-upgrade Upgrades itself in-place (same path/name of the pdfScale.sh caller) Downloads the master branch tarball and tries to self-upgrade + --insecure, --no-check-certificate + Use curl/wget without SSL library support + --yes, --assume-yes + Will answer yes to any prompt on install or upgrade, use with care -n, --no-overwrite Aborts execution if the output PDF file already exists By default, the output file will be overwritten