@@ -12,7 +12,7 @@
# And: https://gist.github.com/MichaelJCole/86e4968dbfc13256228a
# And: https://gist.github.com/MichaelJCole/86e4968dbfc13256228a
VERSION="2.3.2 "
VERSION="2.3.4 "
###################### EXTERNAL PROGRAMS #######################
###################### EXTERNAL PROGRAMS #######################
@@ -95,6 +95,9 @@ PROJECT_NAME="pdfScale"
PROJECT_URL="https://github.com/tavinus/$PROJECT_NAME"
PROJECT_URL="https://github.com/tavinus/$PROJECT_NAME"
PROJECT_BRANCH='master'
PROJECT_BRANCH='master'
HTTPS_INSECURE=$FALSE
HTTPS_INSECURE=$FALSE
ASSUME_YES=$FALSE
RUN_SELF_INSTALL=$FALSE
TARGET_LOC="/usr/local/bin/pdfscale"
########################## EXIT FLAGS ##########################
########################## EXIT FLAGS ##########################
@@ -273,9 +276,9 @@ gsPageScale() {
# Prints GS call for scaling
# Prints GS call for scaling
gsPrintPageScale() {
gsPrintPageScale() {
local _call_str=""
local _call_str=""
# Print Scale page command
# Print Scale page command
read -d '' _call_str<< _EOF_
read -d '' _call_str<< _EOF_
"$GSBIN" \
"$GSBIN" \
-q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dSAFER \
-q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dSAFER \
-dCompatibilityLevel="1.5" -dPDFSETTINGS="$PDF_SETTINGS" \
-dCompatibilityLevel="1.5" -dPDFSETTINGS="$PDF_SETTINGS" \
@@ -289,7 +292,7 @@ gsPrintPageScale() {
-f "$INFILEPDF"
-f "$INFILEPDF"
_EOF_
_EOF_
echo -ne "$_call_str"
echo -ne "$_call_str"
}
}
# Runs the ghostscript paper resize script
# Runs the ghostscript paper resize script
@@ -330,9 +333,9 @@ gsPageResize() {
# Prints GS call for resizing
# Prints GS call for resizing
gsPrintPageResize() {
gsPrintPageResize() {
# Print Resize page command
# Print Resize page command
local _call_str=""
local _call_str=""
# Print Scale page command
# Print Scale page command
read -d '' _call_str<< _EOF_
read -d '' _call_str<< _EOF_
"$GSBIN" \
"$GSBIN" \
-q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dSAFER \
-q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dSAFER \
-dCompatibilityLevel="1.5" -dPDFSETTINGS="$PDF_SETTINGS" \
-dCompatibilityLevel="1.5" -dPDFSETTINGS="$PDF_SETTINGS" \
@@ -347,7 +350,7 @@ gsPrintPageResize() {
-f "$INFILEPDF"
-f "$INFILEPDF"
_EOF_
_EOF_
echo -ne "$_call_str"
echo -ne "$_call_str"
}
}
# Returns $TRUE if we should use the source paper size, $FALSE otherwise
# Returns $TRUE if we should use the source paper size, $FALSE otherwise
@@ -546,13 +549,23 @@ getOptions() {
shift
shift
;;
;;
--install|--self-install)
--install|--self-install)
RUN_SELF_INSTALL=$TRUE
shift
shift
selfInstall "$1"
shift
if [[ ${1:0:1} != "-" ]]; then
TARGET_LOC="$1"
shift
fi
;;
;;
--upgrade|--self-upgrade)
--upgrade|--self-upgrade)
RUN_SELF_UPGRADE=$TRUE
shift
shift
selfUpgrade
;;
--insecure|--no-check-certificate)
HTTPS_INSECURE=$TRUE
shift
;;
--yes|--assume-yes)
ASSUME_YES=$TRUE
shift
shift
;;
;;
--print-gs-call|--gs-call)
--print-gs-call|--gs-call)
@@ -564,6 +577,9 @@ getOptions() {
;;
;;
esac
esac
done
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
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
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
# Install pdfScale
selfInstall() {
selfInstall() {
CURRENT_LOC="$(readlink -f $0)"
CURRENT_LOC="$(readlink -f $0)"
@@ -618,19 +644,29 @@ selfInstall() {
local _answer="NO"
local _answer="NO"
if isNotDir "$TARGET_FOLDER"; then
if isNotDir "$TARGET_FOLDER"; then
echo $'\nThe target folder does not exist\n > '"$TARGET_FOLDER"
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
if [[ "$_answer" = "y" || "$_answer" = "yes" ]]; then
_answer="no"
_answer="no"
if mkdir -p "$TARGET_FOLDER" 2>/dev/null; then
if mkdir -p "$TARGET_FOLDER" 2>/dev/null; then
echo "Folder Created!"
echo " > Folder Created!"
else
else
echo $'\n'"There was an error when trying to create the folder."
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
if [[ "$_answer" = "y" || "$_answer" = "yes" ]]; then
NEED_SUDO=$TRUE
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!"
echo "Folder Created!"
else
else
echo "There was an error when trying to create the folder."
echo "There was an error when trying to create the folder."
@@ -642,19 +678,23 @@ selfInstall() {
fi
fi
fi
fi
else
else
echo "Exiting..."
echo "Exiting... (cancelled by user) "
exit $EXIT_ERROR
exit $EXIT_ERROR
fi
fi
fi
fi
_answer="no"
_answer="no"
if isFile "$TARGET_LOC"; then
if isFile "$TARGET_LOC"; then
echo $'\n'"The target file already exists: $TARGET_LOC"
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
if [[ "$_answer" = "y" || "$_answer" = "yes" ]]; then
echo "Target will be replaced!"
echo "Target will be replaced!"
else
else
echo "Exiting..."
echo "Exiting... (cancelled by user) "
exit $EXIT_ERROR
exit $EXIT_ERROR
fi
fi
fi
fi
@@ -675,8 +715,13 @@ selfInstall() {
else
else
_answer="no"
_answer="no"
echo "There was an error when trying to install pdfScale."
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
if [[ "$_answer" = "y" || "$_answer" = "yes" ]]; then
NEED_SUDO=$TRUE
NEED_SUDO=$TRUE
if sudo cp "$CURRENT_LOC" "$TARGET_LOC"; then
if sudo cp "$CURRENT_LOC" "$TARGET_LOC"; then
@@ -688,15 +733,16 @@ selfInstall() {
exit $EXIT_ERROR
exit $EXIT_ERROR
fi
fi
else
else
echo "Exiting..."
echo "Exiting... (cancelled by user) "
exit $EXIT_ERROR
exit $EXIT_ERROR
fi
fi
fi
fi
exit $?
exit $EXIT_ERROR
}
}
# Tries to download with curl or wget
# Tries to download with curl or wget
getUrl() {
getUrl() {
useInsecure && echo $'\nHTTPS Insecure flag is enabled!\nCertificates will be ignored by curl/wget\n'
local url="$1"
local url="$1"
local target="$2"
local target="$2"
local _stat=""
local _stat=""
@@ -711,7 +757,7 @@ getUrl() {
if isExecutable "$WGET_BIN"; then
if isExecutable "$WGET_BIN"; then
useInsecure && WGET_BIN="$WGET_BIN --no-check-certificate"
useInsecure && WGET_BIN="$WGET_BIN --no-check-certificate"
echo "Downloading file with wget"
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
if [[ $? -eq 0 ]]; then
return $TRUE
return $TRUE
else
else
@@ -724,7 +770,7 @@ getUrl() {
elif isExecutable "$CURL_BIN"; then
elif isExecutable "$CURL_BIN"; then
useInsecure && CURL_BIN="$CURL_BIN --insecure"
useInsecure && CURL_BIN="$CURL_BIN --insecure"
echo "Downloading file with curl"
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
if [[ $? -eq 0 ]]; then
return $TRUE
return $TRUE
else
else
@@ -743,37 +789,37 @@ getUrl() {
# Tries to remove temporary files from upgrade
# Tries to remove temporary files from upgrade
clearUpgrade() {
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
# Exit upgrade with message and status code
# $1 Mensagem (printed if not empty)
# $1 Mensagem (printed if not empty)
# $2 Status (defaults to $EXIT_ERROR)
# $2 Status (defaults to $EXIT_ERROR)
exitUpgrade() {
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
# Downloads current version from github's MASTER branch
selfUpgrade() {
selfUpgrade() {
CURRENT_LOC="$(readlink -f $0)"
CURRENT_LOC="$(readlink -f $0)"
_cwd="$(pwd)"
_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_DIR='/tmp'
TMP_TARGET="$TMP_DIR/pdfScale_$_cur_tstamp.tar.gz"
TMP_TARGET="$TMP_DIR/pdfScale_$_cur_tstamp.tar.gz"
TMP_EXTRACTED="$TMP_DIR/$PROJECT_NAME-$PROJECT_BRANCH"
TMP_EXTRACTED="$TMP_DIR/$PROJECT_NAME-$PROJECT_BRANCH"
@@ -791,13 +837,13 @@ selfUpgrade() {
echo $'\n'"Extracting compressed file"
echo $'\n'"Extracting compressed file"
cd "$TMP_DIR"
cd "$TMP_DIR"
if ! (tar xzf "$TMP_TARGET" 2>/dev/null || gtar xzf "$TMP_TARGET" 2>/dev/null); then
if ! (tar xzf "$TMP_TARGET" 2>/dev/null || gtar xzf "$TMP_TARGET" 2>/dev/null); then
exitUpgrade "Extraction error."
exitUpgrade "Extraction error."
fi
fi
if ! cd "$TMP_EXTRACTED" 2>/dev/null; then
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
fi
if ! chmod +x pdfScale.sh; then
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
fi
local newver="$(./pdfScale.sh --version 2>/dev/null)"
local newver="$(./pdfScale.sh --version 2>/dev/null)"
local curver="$(printVersion 3 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 "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!"
echo "BE CAREFUL NOT TO DELETE THE BETA/ALPHA VERSION WITH THIS UPDATE!"
else
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
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
echo
if [[ "$_answer" = "y" || "$_answer" = "yes" ]]; then
if [[ "$_answer" = "y" || "$_answer" = "yes" ]]; then
echo "Upgrading..."
echo "Upgrading..."
if cp "./pdfScale.sh" "$CURRENT_LOC" 2>/dev/null; then
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
else
_answer="no"
_answer="no"
echo $'\n'"There was an error when copying the new version."
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)"
_answer="$(lowercase $_answer)"
if [[ "$_answer" = "y" || "$_answer" = "yes" ]]; then
if [[ "$_answer" = "y" || "$_answer" = "yes" ]]; then
echo "Upgrading with sudo..."
echo "Upgrading with sudo..."
if sudo cp "./pdfScale.sh" "$CURRENT_LOC" 2>/dev/null; then
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
else
exitUpgrade "There was an error when copying the new version."
exitUpgrade "There was an error when copying the new version."
fi
fi
else
else
exitUpgrade "Exiting... (cancelled by user)"
exitUpgrade "Exiting... (cancelled by user)"
fi
fi
fi
fi
exitUpgrade "An unidentified error has ocurred. Exiting..."
exitUpgrade "An unidentified error has ocurred. Exiting..."
else
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..."
}
}
# Compares versions with x.x.x format
# Compares versions with x.x.x format
@@ -1803,6 +1859,16 @@ useInsecure() {
return $HTTPS_INSECURE
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 ######################
###################### PRINTING TO SCREEN ######################
@@ -1861,6 +1927,10 @@ Parameters:
--upgrade, --self-upgrade
--upgrade, --self-upgrade
Upgrades itself in-place (same path/name of the pdfScale.sh caller)
Upgrades itself in-place (same path/name of the pdfScale.sh caller)
Downloads the master branch tarball and tries to self-upgrade
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
-n, --no-overwrite
Aborts execution if the output PDF file already exists
Aborts execution if the output PDF file already exists
By default, the output file will be overwritten
By default, the output file will be overwritten