Updated log coloring. Now code more readbable

This commit is contained in:
shvedes 2024-10-14 19:43:48 +02:00
parent aca62f737a
commit ef30a7c461
3 changed files with 107 additions and 64 deletions

1
.gitignore vendored
View File

@ -1,4 +1,5 @@
uninstall.sh
install.sh.bak
install_log.log
test.sh
*.tar.xz

View File

@ -45,7 +45,7 @@ Usage: ./install.sh [options...] <path>
- [ ] Properly implement logging
- [ ] Multi distro dependencies installer (for now only Arch Linux is supported)
- [ ] Create universal functions for repetitive actions
- [ ] Implement colored logging in a different way, making the code more readable
- [x] Implement colored logging in a different way, making the code more readable
- [ ] Allow the user to use a different source to download Photoshop
- [ ] Allow the user to skip checksum verification of downloaded files
- [ ] Uninstall script

View File

@ -16,11 +16,21 @@
# https://specifications.freedesktop.org/basedir-spec/latest
XDG_DATA_HOME="$HOME/.local/share"
LOG_NORMAL="\e[1;34m" # Blue
LOG_ERROR="\e[1;31m" # Red
LOG_WARNING="\e[1;33m" # Yellow
LOG_SUCCESS="\e[1;32m" # Green
LOG_RESET="\e[0m" # Reset colors
# LOGGING SYSTEM
# #####################################################################
#
BLUE="\e[1;34m" # Blue
RED="\e[1;31m" # Red
YELLOW="\e[1;33m" # Yellow
GREEN="\e[1;32m" # Green
RESET="\e[0m" # Reset colors
LOG="${BLUE}[LOG]${RESET}"
WARNING="${YELLOW}[WARNING]${RESET}"
ERORR="${RED}[ERROR]${RESET}"
SUCCES="${GREEN}[SUCCES]${RESET}"
CHECK="${GREEN}[CHECK]${RESET}"
# CHECKS & OTHER FUNCTIONS
# ###################################################################
@ -41,18 +51,18 @@ trap on_interrupt SIGINT
on_interrupt() {
trap "exit 1" SIGINT
echo -e "\n${LOG_WARNING}[WARNING]${LOG_RESET} User intrrupt!"
echo -e "\n$WARNING User intrrupt!"
if [ -d "$INSTALL_PATH" ]; then
while true; do
read -p "$(echo -e "$LOG_WARNING")[WARNING]$(echo -e "$LOG_RESET") Do you want to $(echo -e "$LOG_ERROR")delete$(echo -e "$LOG_RESET") the just created wine prefix? (yes/no): " answer
read -p "$(echo -e "$YELLOW")[WARNING]$(echo -e "$RESET") Do you want to $(echo -e "$RED")delete$(echo -e "$RESET") the just created wine prefix? (yes/no): " answer
case "$answer" in
[Yy]es|y)
if rm -rf "${INSTALL_PATH:?}"; then
exit 0
else
echo -e "${LOG_ERROR}[ERROR]${LOG_RESET} The last command ended with an error."
echo -e "$ERORR The last command ended with an error."
exit 1
fi
;;
@ -60,7 +70,7 @@ on_interrupt() {
exit 0
;;
*)
echo -e "${LOG_WARNING}[WARNING]${LOG_RESET} Invalid input!"
echo -e "$WARNING Invalid input!"
esac
done
else
@ -75,6 +85,30 @@ get_help() {
echo " -h Show this help"
}
# soon
print_error() {
command ...
}
# Not used yet
ask_user() {
while true; do
read -p "$(echo -e "${WARNING} "$@" (yes/no) : ")" answer
case "$answer" in
[Yy]es|[Yy])
return 0
;;
[Nn]o|[Nn])
return 1
;;
*)
echo "Invalid input, try again"
esac
done
}
# Imagemagick is needed in case you are not using Papirus Icons.
# One of the functions will load a Photoshop `.webp` icon and convert it to `.png`. The `.png` file will be used in the `.desktop` entry.
check_deps() {
@ -94,9 +128,9 @@ check_deps() {
done
if [ ${#missed_packages[@]} -eq 0 ]; then
echo -e "${LOG_SUCCESS}[CHECK]${LOG_RESET} All dependencies are installed."
echo -e "$CHECK All dependencies are installed."
else
echo -e "${LOG_WARNING}[WARNING]${LOG_RESET} Missing dependencies: ${LOG_WARNING}${missed_packages[*]}${LOG_RESET}."
echo -e "$WARNING Missing dependencies: ${YELLOW}${missed_packages[*]}${RESET}."
return 1
fi
}
@ -115,31 +149,31 @@ install_deps() {
while true; do
# Yeah yeah, I know it's unreadable.
# But it's beautiful!
read -p "$(echo -e "$LOG_WARNING")[WARNING]$(echo -e "$LOG_RESET") Script will execute: '$(echo -e "$LOG_ERROR")sudo$(echo -e "$LOG_RESET") $(echo -e "$LOG_NORMAL")pacman -S $(echo -e "$LOG_WARNING")${missing_packages_str}$(echo -e "$LOG_RESET")'. Proceed? (yes/no): " answer
read -p "$(echo -e "$YELLOW")[WARNING]$(echo -e "$RESET") Script will execute: '$(echo -e "$RED")sudo$(echo -e "$RED") $(echo -e "$BLUE")pacman -S $(echo -e "$YELLOW")${missing_packages_str}$(echo -e "$RESET")'. Proceed? (yes/no): " answer
case "$answer" in
[Yy]es|y)
echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Installing missing dependencies"
echo -e "$LOG Installing missing dependencies"
if ! sudo pacman -S "${missed_packages[@]}"; then
echo -e "${LOG_ERROR}[ERROR]${LOG_RESET} Pacman terminated with an error."
echo -e "$ERROR Pacman terminated with an error."
exit 1
fi
echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Missing dependencies was installed"
echo -e "$LOG Missing dependencies was installed"
break
;;
[Nn]o|n)
echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Exiting"
echo -e "$LOG Exiting"
exit 1
;;
*)
echo -e "${LOG_WARNING}[WARNING]${LOG_RESET} Invalid input!"
echo -e "$WARNING Invalid input!"
;;
esac
done
;;
*)
echo -e "${LOG_ERROR}[ERROR]${LOG_RESET} For now only ${LOG_NORMAL}Arch Linux${LOG_RESET} is supported."
echo -e "$ERROR For now only ${BLUE}Arch Linux${RESET} is supported."
exit 1
;;
esac
@ -151,27 +185,29 @@ install_deps() {
is_path_exists() {
if [ -d "$1" ]; then
echo -e "${LOG_WARNING}[WARNING]${LOG_RESET} The specified path '$1' already exists."
# BUG
# echo -e "$WARNING The specified path '$1' already exists."
echo -e "$WARNING The specified path already exists."
while true; do
read -p "$(echo -e "$LOG_WARNING")[WARNING]$(echo -e "$LOG_RESET") Do you want to $(echo -e "$LOG_ERROR")delete$(echo -e "$LOG_RESET") previous installation? (yes/no): " answer
read -p "$(echo -e "$YELLOW")[WARNING]$(echo -e "$RESET") Do you want to $(echo -e "$RED")delete$(echo -e "$RESET") previous installation? (yes/no): " answer
case "$answer" in
[Yy]es|y)
if rm -rf "${1:?}"; then
echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Deleted old installation."
echo -e "$LOG Deleted old installation."
break
else
echo -e "${LOG_ERROR}[ERROR]${LOG_RESET} Something went wrong."
echo -e "$ERROR Something went wrong."
exit 1
fi
;;
[Nn]o|n)
echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Exiting."
echo -e "$LOG Exiting."
exit 1
;;
*)
echo -e "${LOG_WARNING}[WARNING]${LOG_RESET} Invalid input!"
echo -e "$WARNING Invalid input!"
;;
esac
done
@ -182,16 +218,16 @@ setup_wine() {
export WINEPREFIX="$INSTALL_PATH"
local vc_libraries=("vcrun2003" "vcrun2005" "vcrun2010" "vcrun2012" "vcrun2013" "vcrun2022")
echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Setting up wine prefix."
echo -e "$LOG Setting up wine prefix."
winecfg /v win10 2> /dev/null
# echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Executing winetricks. All winetricks logs are saved in ${LOG_WARNING}./winetricks.log${LOG_RESET}."
echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Executing winetricks."
echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Downloading and installing core components for wine prefix. This could take some time."
echo -e "$LOG Executing winetricks."
echo -e "$LOG Downloading and installing core components for wine prefix. This could take some time."
if ! winetricks --unattended corefonts win10 vkd3d dxvk2030 msxml3 msxml6 gdiplus &> ./install_log.log; then
echo -e "${LOG_ERROR}[ERROR]${LOG_RESET} Winetricks terminated with an error."
echo -e "${LOG_ERROR}[ERROR]${LOG_RESET} Please open an issue by mentioning the contents of ${LOG_WARNING}./install_log.log${LOG_RESET}."
echo -e "$ERORR Winetricks terminated with an error."
echo -e "$ERROR Please open an issue by mentioning the contents of ${YELLOW}./install_log.log${RESET}."
exit 1
fi
@ -199,11 +235,11 @@ setup_wine() {
echo " Downloading Visual C++ Libraries " >> ./install_log.log
echo "---------------------------------------------------------------------" >> ./install_log.log
echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Downloading and installing Visual C++ libraries."
echo -e "$LOG Downloading and installing Visual C++ libraries."
if ! winetricks --unattended "${vc_libraries[@]}" &>> ./install_log.log; then
echo -e "${LOG_ERROR}[ERROR]${LOG_RESET} Winetricks terminated with an error. Please, refer to ${LOG_WARNING}install_log.log${LOG_RESET} for more info."
echo -e "$ERROR Winetricks terminated with an error. Please, refer to ${YELLOW}install_log.log${RESET} for more info."
# echo -e "${LOG_ERROR}[ERROR]${LOG_RESET} Please open an issue by mentioning the contents of ${LOG_WARNING}./install_log.log${LOG_RESET}."
echo -e "${LOG_ERROR}[ERROR]${LOG_RESET} If you can't solve the issue yourself, please, open an issue on the GitHub."
echo -e "$ERROR If you can't solve the issue yourself, please, open an issue on the GitHub."
exit 1
fi
}
@ -212,37 +248,41 @@ download_photoshop() {
local archive_name="Photoshop.tar.xz"
if [ -f "$archive_name" ]; then
echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Found existing archive."
echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Comparing checksums."
echo -e "$LOG Found existing archive."
echo -e "$LOG Comparing checksums."
# TODO:
# separate function to avoid repeating this task
local local_checksum
local_checksum="$(sha256sum "$archive_name" | awk '{print $1}')"
if [[ "$CHECKSUM" != "$local_checksum" ]]; then
echo -e "${LOG_WARNING}[WARNING]${LOG_RESET} Checksums don't match!"
echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Deleting corrupted archive."
echo -e "$LOG Checksums don't match!"
echo -e "$LOG Deleting corrupted archive."
rm -v "${archive_name:?}" &>> ./install_log.log
fi
return 0
fi
# echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Downloading Photoshop (1.1G). Using ${LOG_WARNING}curl${LOG_RESET} as backend. Logs are available in ${LOG_WARNING}./curl.log${LOG_RESET}."
echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Downloading Photoshop (1.1G)."
echo -e "$LOG Downloading Photoshop (1.1G)."
if ! curl "$PHOTOSHOP_URL" -o "$archive_name" &>> ./install_log.log; then
echo -e "${LOG_ERROR}[ERROR]${LOG_RESET} An error occurred during the download. Please, refer to ${LOG_WARNING}install_log.log${LOG_RESET} for more info."
echo -e "${LOG_ERROR}[ERROR]${LOG_RESET} If you can't solve the issue yourself, please, open an issue on the GitHub."
# TODO:
# separate function to avoid repeating
echo -e "$ERROR An error occurred during the download. Please, refer to ${YELLOW}install_log.log${RESET} for more info."
echo -e "$ERROR If you can't solve the issue yourself, please, open an issue on the GitHub."
exit 1
fi
echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Photoshop Downloaded."
echo -e "$LOG Photoshop Downloaded."
# TODO:
# A separate function so you don't have to write this code multiple times
echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Comparing checksums."
echo -e "$LOG Comparing checksums."
local local_checksum
local_checksum="$(sha256sum "$archive_name" | awk '{print $1}')"
if [[ "$CHECKSUM" != "$local_checksum" ]]; then
echo -e "${LOG_ERROR}[ERROR]${LOG_RESET} Checksums don't match!"
echo -e "$ERROR Checksums don't match!"
exit 1
# TODO
@ -266,7 +306,7 @@ verify_path() {
# Check the validity of the path if the user has specified the absolute path manually. This is necessary in case the user accidentally misspells $HOME paths.
# https://github.com/shvedes/photoshop-linux/issues/1
if [[ ! "$path" =~ $HOME ]]; then
echo -e "${LOG_ERROR}[ERROR]${LOG_RESET} Cannot validade ${LOG_WARNING}\$HOME${LOG_RESET} path."
echo -e "$ERROR Cannot validade ${YELLOW}\$HOME${RESET} path."
exit 1
fi
@ -281,10 +321,10 @@ verify_path() {
if [[ "$reformatted_path" == "$HOME" ]]; then
return 0
else
echo -e "${LOG_SUCCESS}[CHECK]${LOG_RESET} Directory $reformatted_path exist."
echo -e "$CHECK Directory $reformatted_path exist."
fi
else
echo -e "${LOG_ERROR}[ERROR]${LOG_RESET} Path $reformatted_path does not exist!"
echo -e "$ERORR Path $reformatted_path does not exist!"
exit 1
fi
}
@ -296,9 +336,9 @@ install_photoshop() {
# echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Installing Photoshop."
local filename="Photoshop.tar.xz"
echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Extracting Photoshop."
echo -e "$LOG Extracting Photoshop."
if ! tar xvf "$filename" &>> ./install_log.log; then
echo -e "${LOG_ERROR}[ERROR]${LOG_RESET} An error occurred while unpacking the archive."
echo -e "$ERORR An error occurred while unpacking the archive."
exit 1
# TODO:
# A separate function so you don't have to write this code multiple times
@ -308,16 +348,16 @@ install_photoshop() {
# done
fi
echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Installing Photoshop."
echo -e "$LOG Installing Photoshop."
if ! mv "./Adobe Photoshop 2021" "$INSTALL_PATH/drive_c/Program Files"; then
echo -e "${LOG_ERROR}[ERROR]${LOG_RESET} An error occurred during installation."
echo -e "$ERROR An error occurred during installation."
exit 1
fi
else
echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Using local Photoshop archive."
echo -e "$LOG Using local Photoshop archive."
if [[ ! "$LOCAL_ARCHIVE" = *.tar.xz ]]; then
echo -e "${LOG_ERROR}[ERROR]${LOG_RESET} Only tar.xz is accepted for now."
echo -e "$ERORR Only tar.xz is accepted for now."
exit 1
# TODO:
# Allow user to use not only tar.xz / archive from another sources
@ -325,20 +365,20 @@ install_photoshop() {
# TODO:
# A separate function so you don't have to write this code multiple times
echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Comparing checksums."
echo -e "$LOG Comparing checksums."
local local_checksum="$(sha256sum "$LOCAL_ARCHIVE" | awk '{print $1}')"
# TODO:
# Allow user to skip checksum comparing
if [[ "$CHECKSUM" != "$local_checksum" ]]; then
echo -e "${LOG_ERROR}[ERROR]${LOG_RESET} Checksums don't match!"
echo -e "$ERROR Checksums don't match!"
exit 1
fi
echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Extracting Photoshop."
echo -e "$LOG Extracting Photoshop."
if ! tar xvf "$LOCAL_ARCHIVE" &>> ./install_log.log; then
echo -e "${LOG_ERROR}[ERROR]${LOG_RESET} An error occurred while unpacking the archive."
echo -e "$ERROR An error occurred while unpacking the archive."
exit 1
# TODO:
# A separate function so you don't have to write this code multiple times
@ -348,10 +388,10 @@ install_photoshop() {
# done
fi
echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Installing Photoshop."
echo -e "$LOG Installing Photoshop."
if ! mv "./Adobe Photoshop 2021" "$INSTALL_PATH/drive_c/Program Files"; then
echo -e "${LOG_ERROR}[ERROR]${LOG_RESET} An error occurred during installation. Please, refer to ${LOG_WARNING}install_log.log${LOG_RESET} for more info."
echo -e "${LOG_ERROR}[ERROR]${LOG_RESET} If you can't solve the issue yourself, please, open an issue on the GitHub."
echo -e "$ERROR An error occurred during installation. Please, refer to ${YELLOW}install_log.log${RESET} for more info."
echo -e "$ERROR If you can't solve the issue yourself, please, open an issue on the GitHub."
exit 1
fi
fi
@ -375,14 +415,14 @@ install_icon() {
if [ -z "$ICON" ]; then
local icon_url="https://cdn3d.iconscout.com/3d/premium/thumb/adobe-photoshop-file-3d-icon-download-in-png-blend-fbx-gltf-formats--logo-format-graphic-design-pack-development-icons-9831950.png"
if ! curl "$icon_url" -o "icon.webp" &>> ./install_log.log; then
echo -e "${LOG_ERROR}[ERROR]${LOG_RESET} Failed to download icon. Please refer ${LOG_WARNING}install_log.log${LOG_RESET} for info."
echo -e "$ERROR Failed to download icon. Please refer ${YELLOW}install_log.log${RESET} for info."
exit 1
fi
magick "icon.webp" "icon.png"
rm "./icon.webp"
echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Installing icon for .desktop entry."
echo -e "$LOG Installing icon for .desktop entry."
mv "./icon.png" "$XDG_DATA_HOME/icons/photoshop.png"
ICON="$XDG_DATA_HOME/icons/photoshop.png"
fi
@ -394,7 +434,9 @@ install_desktop_entry() {
fi
local path="$XDG_DATA_HOME/applications/photoshop.desktop"
echo -e "$LOG Genarating application menu item"
echo "[Desktop Entry]" > "$path"
echo "Name=Adobe Photoshop CC 2021" >> "$path"
echo "Exec=bash -c "$HOME/.local/bin/photoshop.sh %F"" >> "$path"
@ -412,7 +454,7 @@ install_launcher() {
mkdir "$HOME/.local/bin"
fi
echo -e "${LOG_NORMAL}[LOG]${LOG_RESET} Installing launcher."
echo -e "$LOG Installing launcher."
echo "#!/usr/bin/env bash" > "$LAUNCHER"
echo " " >> "$LAUNCHER"
@ -446,7 +488,7 @@ main() {
install_desktop_entry
install_launcher
echo -e "${LOG_SUCCESS}[SUCCESS]${LOG_RESET} Photoshop is successfully installed."
echo -e "$SUCCES Photoshop is successfully installed."
}
if [[ $# -eq 0 ]]; then