diff --git a/README.md b/README.md index 177e4c211..088ae801a 100644 --- a/README.md +++ b/README.md @@ -161,15 +161,15 @@ You can compile Spotube's source code by [following these instructions](CONTRIBU - [Kingkor Roy Tirtho](https://github.com/KRTirtho) - The Founder, Maintainer and Lead Developer - [Owen Connor](https://github.com/owencz1998) - The Cool Discord Moderator -- [Piotr Rogowski](https://github.com/karniv00l) - The MacOS Developer - [RaptaG](https://github.com/RaptaG) - The GitHub Moderator and Community Manager +- [Piotr Rogowski](https://github.com/karniv00l) - The MacOS Developer - [Rusty Apple](https://github.com/RustyApple) - The Mysterious Unknown Guy ## 💼 License Spotube is open source and licensed under the [BSD-4-Clause](/LICENSE) License. -If you are concerned, feel free to [read the reason of choosing this license](https://dev.to/krtirtho/choosing-open-source-license-wisely-1m3p). +If you are concerned, you can [read the reason of choosing this license](https://dev.to/krtirtho/choosing-open-source-license-wisely-1m3p).
diff --git a/scripts/install.sh b/scripts/install.sh index 52526f95c..4d54c0690 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -1,182 +1,166 @@ -#!/bin/bash - - -INSTLLATION_DIR=/usr/share/spotube -DESKTOP_FILE_PATH=/usr/share/applications/spotube.desktop -APP_DATA_PATH=/usr/share/appdata/spotube.appdata.xml -ICON_PATH=/usr/share/icons/spotube/spotube-logo.png -BIN_SYMLINK_PATH=/usr/bin/spotube - -TEMP_DIR=/tmp/spotube-installer - -# get latest version from github api -VERSION=$(curl --silent "https://api.github.com/repos/KRTirtho/spotube/releases/latest" \ - | grep -Po '"tag_name": "\K.*?(?=")') +#!/usr/bin/env bash + +# Varibles +fname="$(basename $0)" +installDir='/usr/share/spotube' +desktopFile='/usr/share/applications/spotube.desktop' +appdata='/usr/share/appdata/spotube.appdata.xml' +icon='/usr/share/icons/spotube/spotube-logo.png' +symlink='/usr/bin/spotube' +temp='/tmp/spotube-installer' +latestVer="$(wget -qO- "https://api.github.com/repos/KRTirtho/spotube/releases/latest" \ | grep -Po '"tag_name": "\K.*?(?=")')" + +# Root check - From CAAIS (https://codeberg.org/RaptaG/CAAIS), under GPL-3.0 +function rootCheck() { + if [ "${EUID}" -ne 0 ]; then + echo "Error: Root permissions are required for ${fname} to work." + echo "Please run './${fname}' for more information." + exit 1 + fi +} -function spotube_help(){ - # available flags are -v or --version to specify what version to download - echo "Usage: ./install.sh [flags]" - echo "Flags:" - echo " -v, --version Specify what version to download. Default: $VERSION" - echo " -h, --help Show this help message" - echo " -r, --remove Remove spotube from your system" +# Flags +function help(){ + echo "Usage: sudo ./${fname} [flags]" + echo 'Flags:' + echo ' -i, --install Install any Spotube version (if not specified, the latest is installed).' + echo ' -h, --help This help menu' + echo ' -r, --remove Removes Spotube from your system' exit 0 } -# a function to check if a given command exists or not and returns bool +# Checks whether a given command exists or not and returns bool function command_exists() { command -v "$@" >/dev/null 2>&1 } function install_deps(){ - local DEBIAN_DEPS="curl tar mpv libappindicator3-1 gir1.2-appindicator3-0.1 libsecret-1-0 libnotify-bin libjsoncpp25" - local RPM_DEPS="curl tar mpv libappindicator jsoncpp libsecret libnotify" - local ARCH_DEPS="curl tar mpv libappindicator-gtk3 libsecret jsoncpp libnotify" + local debianDeps='mpv libappindicator3-1 gir1.2-appindicator3-0.1 libsecret-1-0 libnotify-bin libjsoncpp25' + local rpmDeps='mpv libappindicator jsoncpp libsecret libnotify' + local archDeps='mpv libappindicator-gtk3 libsecret jsoncpp libnotify' if command_exists apt; then - sudo apt install -y $DEBIAN_DEPS + apt install -y ${debianDeps} elif command_exists dnf; then - sudo dnf install -y $RPM_DEPS + dnf install -y ${debianDeps} elif command_exists yum; then - sudo yum install -y $RPM_DEPS + yum install -y ${rpmDeps} elif command_exists zypper; then - sudo zypper install -y $RPM_DEPS + zypper install -y ${rpmDeps} elif command_exists pacman; then - sudo pacman -Sy $ARCH_DEPS - else - echo "Your package manager is not supported by this script. Please install the dependencies manually." - echo "The dependencies are: curl, tar, mpv, appindicator, libsecret, jsoncpp, libnotify" -fi + pacman -Sy ${archDeps} + else + # Maybe one day + # # Deps + # # JsonCpp + # wget https://github.com/open-source-parsers/jsoncpp/tarball/master -O jsoncpp.tar.gz + # tar -xf jsoncpp.tar.gz && cd open-source-parsers-jsoncpp-* + echo 'You have to install some dependancies manually in order for Spotube to work.' + echo "The deps are the following: ${rpmDeps}" + fi } function download_extract_spotube(){ - local TAR_PATH=/tmp/spotube-$VERSION.tar.xz - local DOWNLOAD_URL=https://github.com/KRTirtho/spotube/releases/download/v$VERSION/spotube-linux-$VERSION-x86_64.tar.xz + local tarPath="/tmp/spotube-${ver}.tar.xz" + local donwloadURL="https://github.com/KRTirtho/spotube/releases/download/v${ver}/spotube-linux-${ver}-x86_64.tar.xz" - # check if version is nightly - - if [ "$VERSION" = "nightly" ]; then - DOWNLOAD_URL=https://github.com/KRTirtho/spotube/releases/download/nightly/spotube-linux-nightly-x86_64.tar.xz + if [ "${ver}" = "nightly" ]; then + downloadURL"=https://github.com/KRTirtho/spotube/releases/download/nightly/spotube-linux-nightly-x86_64.tar.xz" fi - - rm -rf $TEMP_DIR - mkdir -p $TEMP_DIR - + rm -rf ${temp} + mkdir -p ${temp} - # check if already exists downloaded file - if [ -f $TAR_PATH ]; then - echo "Found spotube-$VERSION.tar.xz in /tmp. Skipping download..." + # Check if already exists downloaded file + if [ -f ${tarPath} ]; then + echo "Installation file detected. Skipping download..." else - echo "Downloading spotube-$VERSION.tar.xz..." - curl -L $DOWNLOAD_URL -o $TAR_PATH + echo "Downloading spotube-${ver}.tar.xz..." + wget -q ${downloadURL} -P ${tarPath} fi - # Extract the tarball - tar -xf $TAR_PATH -C $TEMP_DIR - - # check if $TEMP_DIR empty or not + tar -xf ${tarPath} -C ${temp} - if [ ! "$(ls -A $TEMP_DIR)" ]; then - echo "Failed to extract the tarball. Redownloading..." - rm -f $TAR_PATH - curl -L $DOWNLOAD_URL -o $TAR_PATH - tar -xf $TAR_PATH -C $TEMP_DIR + # Is $temp empty or not + if [ ! "$(ls -A ${temp})" ]; then + echo 'Failed to extract the tarball. Redownloading...' + rm -f ${tarPath} + wget -q ${downloadURL} -P ${tarPath} + tar -xf ${tarPath} -C ${temp} fi - # checking one last time - if [ ! "$(ls -A $TEMP_DIR)" ]; then - echo "Failed to extract the tarball. Aborting installation..." + # Once again + if [ ! "$(ls -A ${temp})" ]; then + echo 'Failed to extract the tarball. Installation aborted.' exit 1 fi } function install_spotube(){ - # check if exists and uninstall if user allows - - if [ -d $INSTLLATION_DIR ]; then - echo "Spotube is already installed. Do you want to uninstall it and then install? [y/N]" - read -r uninstall - if [ "$uninstall" = "y" ] || [ "$uninstall" = "Y" ]; then - uninstall_spotube - else - echo "Aborting installation..." - exit 1 - fi + if [ -d ${installDir} ]; then + echo -n "Spotube is already installed. Do you want to reinstall it? [y/N] " + read reinstall + + case "${reinstall}" in + [yY]*) + uninstall_spotube ;; + *) + echo 'Aborting installation...' + exit 1 ;; + esac fi - - # Move the files to /usr/share/spotube - - sudo mkdir -p $INSTLLATION_DIR - - sudo mv $TEMP_DIR/data $INSTLLATION_DIR - sudo mv $TEMP_DIR/lib $INSTLLATION_DIR - sudo mv $TEMP_DIR/spotube $INSTLLATION_DIR - - # Move the desktop file to /usr/share/applications - - sudo mv $TEMP_DIR/spotube.desktop $DESKTOP_FILE_PATH - - # Move the appdata file to /usr/share/appdata - - sudo mv $TEMP_DIR/com.github.KRTirtho.Spotube.appdata.xml $APP_DATA_PATH - # Move the logo to /usr/share/icons/spotube - - sudo mkdir -p /usr/share/icons/spotube - - sudo mv $TEMP_DIR/spotube-logo.png $ICON_PATH - - # Create a symlink to /usr/bin - - sudo ln -s /usr/share/spotube/spotube $BIN_SYMLINK_PATH - - # Clean up - - rm -rf $TEMP_DIR - - echo "Spotube $VERSION has been installed successfully!" + # Install Spotube from temp dir + mkdir -p ${installDir} + mv ${temp}/data ${installDir} + mv ${temp}/lib ${installDir} + mv ${temp}/spotube ${installDir} + mv ${temp}/spotube.desktop ${desktopDir} + mv ${temp}/com.github.KRTirtho.Spotube.appdata.xml ${appdata} + mkdir -p /usr/share/icons/spotube + mv ${temp}/spotube-logo.png ${icon} + ln -s /usr/share/spotube/spotube ${symlink} + + rm -rf ${temp} # Remove temp dir + echo "Spotube ${ver} has been installed successfully!" } function uninstall_spotube(){ - # confirm - - echo "Are you sure you want to uninstall Spotube?" - echo - echo "This will remove following files and directories:" - echo " $INSTLLATION_DIR" - echo " $DESKTOP_FILE_PATH" - echo " $APP_DATA_PATH" - echo " $ICON_PATH" - echo " $BIN_SYMLINK_PATH" - echo - echo "[y/N]" - - read -r CONFIRMATION - - if [[ "$CONFIRMATION" != "y" ]]; then - echo "Aborting uninstallation..." - exit 0 - fi - - # remove the files - - - sudo rm -rf $INSTLLATION_DIR $DESKTOP_FILE_PATH $APP_DATA_PATH $ICON_PATH $BIN_SYMLINK_PATH -} - -# parse arguments -v, --version, -r, --remove, -h, --help - -while [[ "$#" -gt 0 ]]; do - case $1 in - -v|--version) VERSION="$2"; shift ;; - -r|--remove) uninstall_spotube; exit 0 ;; - -h|--help) spotube_help; exit 0 ;; - *) echo "Unknown parameter passed: $1"; spotube_help; exit 1 ;; + echo -n "Are you sure you want to uninstall Spotube? [y/N] " + read confirm + + case "${confirm}" in + [yY]*) + echo 'Unstalling Spotube..' + rm -rf ${installDir} ${desktopDir} ${appdata} ${icon} ${symlink} ;; + *) + echo 'Aborting...' + exit 0 ;; esac - shift -done +} -install_deps -download_extract_spotube -install_spotube \ No newline at end of file +case "$1" in +-i | --install) + if [ "$2" != "" ]; then + ver="$2" + else + ver="${latestVer}" + fi + + rootCheck + install_deps + download_extract_spotube + install_spotube + exit 0 ;; +-r | --remove) + rootCheck + uninstall_spotube + exit 0 ;; +-h | --help | "") + help + exit 0 ;; +*) + echo "Invalid flag '$1'" + echo "Please run ./${fname} for more information." + exit 1 ;; +esac