diff --git a/CAU_Installer b/CAU_Installer deleted file mode 100755 index 8e82619..0000000 --- a/CAU_Installer +++ /dev/null @@ -1,263 +0,0 @@ -#!/bin/bash -# Calibre Auto Updater Installscript -# Copyright (C) 2013-2014 Leon Gaultier -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see - - -# Programmversion -PROGNAME=`basename $0` -VERSION="0.14" - -##### Variablen deklaration ##### -# Downloadseite der Linuxinstallation -DOWNLOAD_URL=https://github.com/kovidgoyal/calibre/raw/master/setup/linux-installer.py - -################################# - - - -func_term_output () { # einheitliche Terminalausgabe - ## Beginne mit der Ausgbe ## - tty -s && clear - echo -e "\033[44m \033[0m\033[1m $PROGNAME the Calibre-Autoupdate-Installer Version $VERSION\033[0m\n\033[44m \033[0m 2013-2014 by Leon Gaultier\n\e[m"; - return 0 -} - -func_usage () # Gibt Auskunft über Verwendung des Scriptes -{ - func_term_output - echo "Verwendung: $PROGNAME [OPTION...]" - echo -e "Verwende $PROGNAME --help oder $PROGNAME -h für mehr Informationen.\n" -} - -func_help () # Listet alle Optionsschalter auf -{ - func_term_output - echo "Verwende: $PROGNAME [OPTION...]" - echo "$PROGNAME -- Der Calibre-Autoupdate-Installer (CAUI)" - echo "" - echo "Options:" - echo " -h, --help zeigt die Hilfe an" - echo " -V, --version gibt die Programmversion aus" - echo " -i, --install installiert den Calibre-Autoupdater (CAU)" - echo " --install_calibre installiert Calibre in der aktuellsten Version" - echo "" - echo -e "Sende Fehler an .\n"; -} - -func_version () # Versionsauskunft des Installers -{ - func_term_output - echo "$PROGNAME: Der Calibre-Autoupdate-Installer (CAUI) v$VERSION" - echo "Leon Gaultier 2013-2014. Das Programm darf verteilt werden," - echo -e "in der Hoffnung das es hilfreich ist, aber OHNR IRGENDEINE GARANTIE\n" - -} - -func_change_install_dir() # Funktion zur Abfrage des Installationsortes -{ -read -p "Wo soll der Calibre-Autoupdater installiert werden? [default /usr/local] " UPDATER_INSTALL_LOCATION - - if [ -z $UPDATER_INSTALL_LOCATION ]; then - UPDATER_INSTALL_LOCATION=/usr/local - fi -read -p "Wo befindet sich die Calibre Installation? [default /opt] " CALIBRE_INSTALL_LOCATION - - if [ -z $CALIBRE_INSTALL_LOCATION ]; then - CALIBRE_INSTALL_LOCATION=/opt - fi -# Verzeichnishierarchie im Installationsort -INC=$UPDATER_INSTALL_LOCATION/include/ -ETC=$UPDATER_INSTALL_LOCATION/etc/ -BIN=$UPDATER_INSTALL_LOCATION/bin/ -} - -func_check_dir() # Install oder Update Calibre Updater, Check ob Calibre überhaupt installiert ist -{ - if test ! -d $CALIBRE_INSTALL_LOCATION/calibre ; then - echo -e "\n\033[31mKeine Calibre Installation unter $CALIBRE_INSTALL_LOCATION gefunden.\033[1;34m" - while ((!gueltig)); do # beginn der Ja/Nein Abfrage - echo -e "\033[1;34m" - read -sn1 -t 30 -p "Möchtest Du Calibre jetzt installieren? [j/n] " answer - echo -e "\e[m" - case "$answer" in - [JjYy]) result=1; gueltig=1 ;; - [Nn]) result=0; gueltig=1 ;; - "") result=0; gueltig=1 ;; - *) gueltig=0 ;; - esac - done - echo - if (( ! result )); then - echo -e "\n\033[1;31mDie installation des Calibre-Autoupdaters wurde durch Dich abgebrochen.\e[m\n" - exit 1 - fi - echo -e "\033[1;34mNach der Calibre Installation wird die Installation des Calibre Autoupdaters durchgeführt\e[m" - sleep 3 - func_install_calibre - exit 0 - fi - - if test -f $BIN/calibre-autoupdate ; then # Updater bereits installiert? - while ((!gueltig)); do # beginn der Ja/Nein Abfrage - echo -e "\033[1;34m" - read -sn1 -t 30 -p "Der calibre-autoupdater ist bereits installiert. Möchtest Du ein Update durchführen? [j/n] " answer - echo -e "\e[m" - case "$answer" in - [JjYy]) result=1; gueltig=1 ;; - [Nn]) result=0; gueltig=1 ;; - "") result=0; gueltig=1 ;; - *) gueltig=0 ;; - esac - done - echo - if (( ! result )); then - echo -e "\n\033[1;31mDie installation des Calibre-Autoupdaters wurde durch Dich abgebrochen.\e[m\n" - exit 1 - fi - fi -} - -func_progressbar() -{ - echo -e -n $'\033[34m------------------------------------------------------------------------- 100%\r' - echo -e -n "\033[32m0% " - for ((i=0; i<61; i++)); do - echo -e -n "\033[32m=" - case $i in - 15) - echo -e -n "25%" ;; - 30) - echo -e -n "50%" ;; - 45) - echo -e -n "75%" ;; - 60) - echo -e -n " 100%" ;; - esac - sleep 0.07 - done - echo -e "\e[m" -} - -func_install_noroot() -{ -# Die sed Befehle ersetzen in den Programmdateien Platzhalter für den Installationsort. -# Grund hierfür sind die includes der Header unf Configfiles die den kompletten Fad benörigen - echo -e "\n\033[1;34mDer Calibre-Autoupdater wird nun unter $UPDATER_INSTALL_LOCATION installiert...\e[m"; - echo -e "\033[1;32mProgramm-Dateien wird nach $BIN kopiert\e[m" - cp calibre-autoupdate $BIN - sed -i "s/_-ETC-_/${ETC//\//\/}/g" $BIN"calibre-autoupdate" - sed -i "s/_-VERSION-_/${VERSION//\//\/}/g" $BIN"calibre-autoupdate" - chmod 755 $BIN/calibre-autoupdate - func_progressbar - echo -e "\n\033[1;32mDie Header-Dateien werden nach $INC kopiert\e[m" - cp calibre-autoupdate.h calibre-autoupdate_checks.h $INC - chmod 644 $INC/calibre-autoupdate.h $INC/calibre-autoupdate_checks.h - func_progressbar - echo -e "\n\033[1;32mDie Konfigurations-Dateien wird nach $ETC kopiert\e[m" - cp calibre-autoupdate.conf $ETC - sed -i "s/_-INC-_/${INC//\//\/}/g" $ETC"calibre-autoupdate.conf" - sed -i "s/_-BIN-_/${BIN//\//\/}/g" $ETC"calibre-autoupdate.conf" - sed -i "s/_-CALIBRE_INSTALL_LOCATION-_/${CALIBRE_INSTALL_LOCATION//\//\/}/g" $ETC"calibre-autoupdate.conf" - chmod 644 $ETC/calibre-autoupdate.conf - func_progressbar -} - -func_install_root() -{ -# Die sed Befehle ersetzen in den Programmdateien Platzhalter für den Installationsort. -# Grund hierfür sind die includes der Header unf Configfiles die den kompletten Fad benörigen - echo -e "\n\033[1;34mDu hast kein Schreibrecht auf $UPDATER_INSTALL_LOCATION, daher wird SUDO versucht zu verwenden...\e[m"; - sudo echo -e "\033[1;36mProgramm-Dateien wird nach $BIN kopiert\e[m\e[m" - sudo cp calibre-autoupdate $BIN - sudo sed -i "s/_-ETC-_/${ETC//\//\/}/g" $BIN"calibre-autoupdate" - sudo sed -i "s/_-VERSION-_/${VERSION//\//\/}/g" $BIN"calibre-autoupdate" - sudo chmod 755 $BIN"calibre-autoupdate" - func_progressbar - echo -e "\n\033[1;36mDie Header-Dateien werden nach $INC kopiert\e[m" - sudo cp calibre-autoupdate.h calibre-autoupdate_checks.h $INC - sudo chmod 644 $INC"calibre-autoupdate.h" $INC"calibre-autoupdate_checks.h" - func_progressbar - echo -e "\n\033[1;36mDie Konfigurations-Dateien wird nach $ETC kopiert\e[m" - sudo cp calibre-autoupdate.conf $ETC - sudo sed -i "s/_-INC-_/${INC//\//\/}/g" $ETC"calibre-autoupdate.conf" - sudo sed -i "s/_-BIN-_/${BIN//\//\/}/g" $ETC"calibre-autoupdate.conf" - sudo sed -i "s/_-CALIBRE_INSTALL_LOCATION-_/${CALIBRE_INSTALL_LOCATION//\//\/}/g" $ETC"calibre-autoupdate.conf" - sudo chmod 644 $ETC"calibre-autoupdate.conf"; - func_progressbar -} - -func_install_process() # Installiert den Calibre Updater -{ -func_term_output -func_change_install_dir -func_check_dir - - if [ -w "$UPDATER_INSTALL_LOCATION" ]; then - func_install_noroot - else - func_install_root - fi - echo -e "\n\n\033[1;36mDer Calibre-Autoupdater wurde erfolgreich installiert und" - echo -e "kann nun mit calibre-update oder $BIN"calibre-update" aufgerufen werden\e[m\n" -} - -func_install_calibre() -{ - if [ ! $CALIBRE_INSTALL_LOCATION ]; then - func_term_output - read -p "Wohin soll Calibre installiert werden? [default /opt] " CALIBRE_INSTALL_LOCATION - fi - if [ -z $CALIBRE_INSTALL_LOCATION ]; then - CALIBRE_INSTALL_LOCATION=/opt - fi - if [ -w "$CALIBRE_INSTALL_LOCATION" ]; then - echo -e "\033[1;32mCalibre wird nun installiert...\n\e[m" - wget -nv -O- $DOWNLOAD_URL | python -c "import sys; main=lambda x:sys.stderr.write('Download failed\n'); exec(sys.stdin.read()); main('$CALIBRE_INSTALL_LOCATION')" - else - echo -e "\033[1;34mDu hast kein Schreibrecht auf $CALIBRE_INSTALL_LOCATION. Calibre wird mit SUDO installiert. Bitte gib hierzu Dein Userpasswort ein...\n\e[m" - sudo -v && wget -nv -O- $DOWNLOAD_URL | sudo python -c "import sys; main=lambda x:sys.stderr.write('Download failed\n'); exec(sys.stdin.read()); main('$CALIBRE_INSTALL_LOCATION')" - fi - echo -e "\n\n\033[1;36mHerzlichen Glückwunsch. Calibre wurde installiert und kann nun mit "calibre" verwendet werden.\n\033[0m" - sleep 5 - func_install_process -} - -while test "$#" -gt 0 -do - arg="$1" - shift - - case $arg in - -*=*) optarg=`echo "$arg" | sed -e 's/[-_a-zA-Z0-9]*=//'` ;; - *) optarg= ;; - esac - - case "$arg" in - --help | -h ) - func_help; exit 0 ;; - --version | -V | -v ) - func_version; exit 0 ;; - --install | -i | -I ) - func_install_process; exit 0 ;; - --install_calibre ) - func_install_calibre; exit 0 - esac - -done -func_term_output -func_usage -echo -e "\e[m" -exit 0 \ No newline at end of file diff --git a/CAU_Installer.h b/CAU_Installer.h new file mode 100644 index 0000000..bf15280 --- /dev/null +++ b/CAU_Installer.h @@ -0,0 +1,61 @@ +# Calibre Auto Updater Header File +# Copyright (C) 2013-2014 Leon Gaultier +# + +func_term_output () { # einheitliche Terminalausgabe + ## Beginne mit der Ausgbe ## + tty -s && clear + echo -e "\033[44m \033[0m\033[1m $PROGNAME: Der Calibre-Autoupdate-Installer Version $VERSION\033[0m\n\033[44m \033[0m 2013-2014 by Leon Gaultier\n\e[m"; + return 0 +} + +func_usage () { # Gibt Auskunft über Verwendung des Scriptes + func_term_output + echo "Verwendung: $PROGNAME [OPTION...]" + echo -e "Verwende $PROGNAME --help oder $PROGNAME -h für mehr Informationen.\n" + return 0 +} + +func_help () { # Listet alle Optionsschalter auf + func_term_output + echo "Verwende: $PROGNAME [OPTION...]" + echo "$PROGNAME -- Der Calibre-Autoupdate-Installer (CAUI)" + echo "" + echo "Options:" + echo " -h, --help zeigt die Hilfe an" + echo " -V, --version gibt die Programmversion aus" + echo " -i, --install installiert den Calibre-Autoupdater (CAU)" + echo "" + echo -e "Sende Fehler an .\n" + return 0 +} + +func_version () { # Versionsauskunft des Installers + + func_term_output + echo "$PROGNAME: Der Calibre-Autoupdate-Installer (CAUI) v$VERSION" + echo "Leon Gaultier 2013-2014. Das Programm darf verteilt werden," + echo -e "in der Hoffnung das es hilfreich ist, aber OHNR IRGENDEINE GARANTIE\n" + return 0 +} + +func_progressbar() { + echo -e -n $'\033[34m------------------------------------------------------------------------- 100%\r' + echo -e -n "\033[32m0% " + for ((i=0; i<61; i++)); do + echo -e -n "\033[32m=" + case $i in + 15) + echo -e -n "25%" ;; + 30) + echo -e -n "50%" ;; + 45) + echo -e -n "75%" ;; + 60) + echo -e -n " 100%" ;; + esac + sleep 0.07 + done + echo -e "\e[m" + return 0 +} \ No newline at end of file diff --git a/calibre-autoupdate b/calibre-autoupdate index 5fd5cea..9ccdd30 100644 --- a/calibre-autoupdate +++ b/calibre-autoupdate @@ -71,123 +71,131 @@ # Die Funktion Installation des Updaters wurde aufgeteilt in root_install und noroot_install # Uninstall Funktion für den calibre-autoupdater mit gleichzeitiger nachfrage und eventueller # deinstallation vom Calibre Programm -# Der Code wurde überarbeitet, die Dialoge verbessert, Ergebnisse von Funktionsaufrufen in Variablen geschrieben +# Der Code wurde überarbeitet, die Dialoge verbessert, Ergebnisse von Funktionsaufrufen in Variablen +# geschrieben +# +# v0.15 die Funktion Versionsvergleich wurde mit der Funktion zum auslesen der Vorhanden Version und der verfügbaren +# Version +# zusammen gelegt. +# der Installer kontrolliert ob am Installationsort des Updaters die Verzeichnisstrucktur /bin /include /etc +# vorhanden ist und wenn nicht legt er sie an. +# +# v0.20 Der Code wurde komplett überarbeitet und vieles neu geschrieben. Sauberer Code und weniger Abfragen. +# Die Bedingungen und Schleifen wurden einfacher und logischer geschrieben +# Die Prüfung ob Calibre noch gestartet ist wenn ein Update gemacht wird ist nun simpler geschrieben, +# und es wird nicht mehr hart beendet sondern gewartet bis der Benutzer Calibre beendet +# Die Calibre Installation ist vom Installer in das Updaterskript gewandert, und im Zuge einer Calibre- +# installation wird automatisch die Konfigurationsdatei des Updaters angepasst (übergabe CalibreInstallOrt) +# Es wird wieder geprüft ob Calibre installiert ist bevor der Updater gestartet wird # # TODO Auslesen der Download URL von der Download Seite # kontrolle ob alle benötigten programme für das skript vorhanden sind # # -###################################### -###################################### - -# Installationsfade in der Verzeichnishierarchie -ETC=_-ETC-_ +########################################################## +########################################################## # Programmversion PROGNAME=`basename $0` VERSION="_-VERSION-_" + + ################################# ######### CONFIGURATION ######### # Diese Version funktioniert für alle Linuxsysteme nur so lange # bis Veränderungen auf der Internetseite durchgeführt wurden ################################# +# Installationsfade in der Verzeichnishierarchie +ETC=_-ETC-_ # Einlesen des Configfiles mit den Variablen für die Calibre Downloadseite, Hauptseite # und den Installationsfaden in der Verzeichnishierarchie source $ETC/calibre-autoupdate.conf - ################################# ##### Zusätzliche Funktionen aus Headerfiles laden ##### source $INC/calibre-autoupdate.h source $INC/calibre-autoupdate_checks.h - - - ####################################################### ####################################################### -## main vom Script --- Start des Updater Skripts -func_update () { # Wenn eine grafische Oberfläche vorhanden ist, wird u.a. "notify-send" für Benachrichtigungen verwendet, ansonsten immer "echo" NOTIFY="echo" [ -n "$DISPLAY" ] && NOTIFY="notify-send -t 10000 -i /usr/share/icons/hicolor/256x256/apps/calibre-gui.png Calibre-Auto-Updater" - - -func_term_output # ruft die Funktion für Konsolenausgabe auf -func_check_stat # ruft die Funktion "check Status Netzwerk und Downloadadressen" auf -CHECK_STATE_RESULT="$?" - -case "$CHECK_STATE_RESULT" in - 1) - func_check_version - func_vercomp $CURRENT_VERSION $LATEST_VERSION # Funktion Versionvergleich - CHECK_VERCOMP_RESULT="$?" - - case $CHECK_VERCOMP_RESULT in - 0) - $NOTIFY "Deine Calibre Version ist auf dem aktuellsten Stand ($CURRENT_VERSION).";; - 1) - $NOTIFY "Uh Oh! Deine Calibre Version ist aktueller wie die letzte Verfügbare! (Installiert: $CURRENT_VERSION, Letzte Verfügbare: $LATEST_VERSION)";; - 2) - $NOTIFY "Ein Calibre Update ist verfügbar. (Installiert: $CURRENT_VERSION, letzte Verfügbare: $LATEST_VERSION)" - # Installiert die aktuellste verfügbare Version von der Calibre Homepage - func_check_run_calibre # Aufruf der Funktion ob Calibre gestartet ist - - if [ -w "$CALIBRE_INSTALL_LOCATION" ]; then - $NOTIFY "Das Update wird nun installiert..." - echo -e "\e[m" - wget -nv -O- $DOWNLOAD_URL | python -c "import sys; main=lambda x:sys.stderr.write('Download failed\n'); exec(sys.stdin.read()); main('$CALIBRE_INSTALL_LOCATION')" - else - $NOTIFY "Du hast kein Schreibrecht auf $CALIBRE_INSTALL_LOCATION. Das Update wird mit SUDO installiert. Bitte gib hierzu Dein Userpasswort im Terminalfenster ein..." - echo -e "\e[m" - sudo -v && wget -nv -O- $DOWNLOAD_URL | sudo python -c "import sys; main=lambda x:sys.stderr.write('Download failed\n'); exec(sys.stdin.read()); main('$CALIBRE_INSTALL_LOCATION')" - fi - $NOTIFY "Calibre wurde auf die neuste Version aktuallisiert." - ;; - esac - ;; - 2) - $NOTIFY "Versionsvergleich fehlgeschlagen!!! Die Calibre Homepage $CHECK_CALIBRE_DOWNLOAD_PAGE ist nicht verfügbar!" - ;; - 3) - $NOTIFY "Update fehlgeschlagen!!! Die Download Seite $CHECK_DOWNLOAD_URL ist nicht verfügbar!" - ;; - 4) - $NOTIFY "Update und Versionsvergleich fehlgeschlagen!!! Kann kein Netzwerkinterface finden!" - ;; -esac -echo -e "\e[m" +####################################################### + + +func_update () { + func_term_output # ruft die Funktion für Konsolenausgabe auf + func_check_stat # ruft die Funktion "check Status Netzwerk und Downloadadressen" auf + CHECK_STATE_RESULT="$?" + + case "$CHECK_STATE_RESULT" in + 1) + func_check_version + CHECK_VERCOMP_RESULT="$?" + + case $CHECK_VERCOMP_RESULT in + 0) + $NOTIFY "Deine Calibre Version ist auf dem aktuellsten Stand (Version $CURRENT_VERSION).";; + 1) + $NOTIFY "Uh Oh! Deine Calibre Version ist aktueller wie die letzte Verfügbare! (Installiert: Version $CURRENT_VERSION, Letzte Verfügbare: Version $LATEST_VERSION)";; + 2) + $NOTIFY "Ein Calibre Update ist verfügbar. (Installiert: $CURRENT_VERSION, letzte Verfügbare: $LATEST_VERSION)" + # Installiert die aktuellste verfügbare Version von der Calibre Homepage + func_check_run_calibre # Aufruf der Funktion ob Calibre gestartet ist + if [ -w "$CALIBRE_INSTALL_LOCATION" ]; then + $NOTIFY "Das Update wird nun installiert..." + echo -e "\e[m" + wget -nv -O- $DOWNLOAD_URL | python -c "import sys; main=lambda x:sys.stderr.write('Download failed\n'); exec(sys.stdin.read()); main('$CALIBRE_INSTALL_LOCATION')" + else + $NOTIFY "Du hast kein Schreibrecht auf $CALIBRE_INSTALL_LOCATION. Das Update wird mit SUDO installiert. Bitte gib hierzu Dein Userpasswort im Terminalfenster ein..." + echo -e "\e[m" + sudo -v && wget -nv -O- $DOWNLOAD_URL | sudo python -c "import sys; main=lambda x:sys.stderr.write('Download failed\n'); exec(sys.stdin.read()); main('$CALIBRE_INSTALL_LOCATION')" + fi + $NOTIFY "Calibre wurde auf die neuste Version $LATEST_VERSION aktuallisiert.";; + esac + ;; + 2) + $NOTIFY "Versionsvergleich fehlgeschlagen!!! Die Calibre Homepage $CHECK_CALIBRE_DOWNLOAD_PAGE ist nicht verfügbar!";; + 3) + $NOTIFY "Update fehlgeschlagen!!! Die Download Seite $CHECK_DOWNLOAD_URL ist nicht verfügbar!";; + 4) + $NOTIFY "Update und Versionsvergleich fehlgeschlagen!!! Kann kein Netzwerkinterface finden!";; + esac + echo -e "\e[m" + return 0 } +#### Main Funktion #### while test "$#" -gt 0 do - arg="$1" - shift + arg="$1" + shift + case $arg in + -*=*) optarg=`echo "$arg" | sed -e 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac - case $arg in - -*=*) optarg=`echo "$arg" | sed -e 's/[-_a-zA-Z0-9]*=//'` ;; - *) optarg= ;; - esac - - case "$arg" in - --help | -h ) + case "$arg" in + --help | -h ) func_help; exit 0 ;; - --version | -V | -v ) + --version | -V | -v ) func_version; exit 0 ;; - --check | -C | -c ) + --check | -C | -c ) func_check_prog; exit 0 ;; - --uninstall | -U | -u ) - func_uninstall; exit 0;; - --uninstall_calibre ) + --uninstall | -U | -u ) + func_uninstall; exit 0 ;; + --install-calibre ) + func_install_calibre; exit 0 ;; + --uninstall-calibre ) func_uninstall_calibre; exit 0 ;; - esac - + esac done func_check_prog func_update diff --git a/calibre-autoupdate.conf b/calibre-autoupdate.conf index 7a27e1a..d91a94d 100644 --- a/calibre-autoupdate.conf +++ b/calibre-autoupdate.conf @@ -3,10 +3,10 @@ # # Calibre Download Seite URL. -export CALIBRE_DOWNLOAD_PAGE=http://calibre-ebook.com/download_linux -# The location of the installed application. -export CALIBRE_INSTALL_LOCATION=_-CALIBRE_INSTALL_LOCATION-_ -# The download URL +CALIBRE_DOWNLOAD_PAGE=http://calibre-ebook.com/download_linux +# Installationsor von Calibre. +CALIBRE_INSTALL_LOCATION=_-CALIBRE_INSTALL_LOCATION-_ +# die Download URL DOWNLOAD_URL=https://github.com/kovidgoyal/calibre/raw/master/setup/linux-installer.py # Variablen für den Verfügbarkeitscheck diff --git a/calibre-autoupdate.h b/calibre-autoupdate.h index 9329386..5857715 100644 --- a/calibre-autoupdate.h +++ b/calibre-autoupdate.h @@ -2,14 +2,21 @@ # Copyright (C) 2013-2014 Leon Gaultier # -func_usage () -{ - echo "Verwendung: $PROGNAME [OPTION...]" - echo "Verwende '$PROGNAME --help' oder '$PROGNAME -h' für mehr Informationen." +func_term_output () { + ## Beginne mit der Ausgbe ## + tty -s && clear + echo -e "\033[44m \033[0m\033[1m $PROGNAME Version $VERSION\033[0m\n\033[44m \033[0m 2013-2014 by Leon Gaultier\n\e[m"; + return 0 } -func_help () -{ +func_usage () { + func_term_output + echo "Verwendung: $PROGNAME [OPTION...]" + echo "Verwende '$PROGNAME --help' oder '$PROGNAME -h' für mehr Informationen." + return 0 +} + +func_help () { func_term_output echo "Verwende: $PROGNAME [OPTION...]" echo "$PROGNAME -- Der Calibre! Linux Edition calibre-autoupdater (CAU)" @@ -19,66 +26,58 @@ func_help () echo " -V, --version gibt die Programmversion aus" echo " -c, --check kontrolliert ob benötigte Programme vorhanden sind" echo " -u, --uninstall deinstalliert den Calibre-Autoupdater" - echo " --uninstall_calibre deinstalliert das Calibre Programm" + echo " --install-calibre installiert Calibre in der aktuellsten Version" + echo " --uninstall-calibre deinstalliert das Calibre Programm" echo "" echo -e "Sende Fehler an .\n"; + return 0 } -func_version () -{ +func_version () { func_term_output echo "$PROGNAME: Der Calibre! autoupdater v$VERSION" echo "Leon Gaultier 2013-2014. Das Programm darf verteilt werden," echo -e "in der Hoffnung das es hilfreich ist, aber OHNR IRGENDEINE GARANTIE\n" - + return 0 } -func_term_output () { - ## Beginne mit der Ausgbe ## - tty -s && clear - echo -e "\033[44m \033[0m\033[1m $PROGNAME Version $VERSION\033[0m\n\033[44m \033[0m 2013-2014 by Leon Gaultier\n\e[m"; - return 0 -} - -func_progressbar() -{ +func_progressbar() { echo -e -n $'\033[34m------------------------------------------------------------------------- 100%\r' echo -e -n "\033[32m0% " for ((i=0; i<61; i++)); do echo -e -n "\033[32m=" case $i in - 15) - echo -e -n "25%" ;; - 30) - echo -e -n "50%" ;; - 45) - echo -e -n "75%" ;; - 60) - echo -e -n " 100%" ;; + 15) + echo -e -n "25%" ;; + 30) + echo -e -n "50%" ;; + 45) + echo -e -n "75%" ;; + 60) + echo -e -n " 100%" ;; esac sleep 0.03 done echo -e "\e[m" return 0 } -func_uninstall() -{ - func_term_output - while ((!gueltig)); do # beginn der Ja/Nein Abfrage - echo -e "\033[1;34m" - read -sn1 -t 30 -p "Möchtest Du den Calibre-Autoupdater wirklich DeInstallieren? [j/n] " answer - echo -e "\e[m" - case "$answer" in - [JjYy]) result=1; gueltig=1 ;; - [Nn]) result=0; gueltig=1 ;; - "") result=0; gueltig=1 ;; - *) gueltig=0 ;; - esac - done - echo + +func_uninstall() { + func_term_output + while ((!gueltig)); do # beginn der Ja/Nein Abfrage + echo -e "\033[1;34m" + read -sn1 -t 30 -p "Möchtest Du den Calibre-Autoupdater wirklich DeInstallieren? [j/n] " answer + echo -e "\e[m" + case "$answer" in + [JjYy]) result=1; gueltig=1 ;; + [Nn]) result=0; gueltig=1 ;; + "") result=0; gueltig=1 ;; + *) gueltig=0 ;; + esac + done if (( ! result )); then echo -e "\033[1;31mDie DeInstallation des Calibre-Autoupdaters wurde durch Dich abgebrochen.\e[m\n" - exit 1 + exit 0 fi echo -e "\033[1;31mDer Calibre-Autoupdater wird nun deinstalliert.\e[m" if [ -w "$CALIBRE_INSTALL_LOCATION" ]; then @@ -92,29 +91,29 @@ func_uninstall() fi func_progressbar echo -e "\n\033[1;32mDer Calibre-Autoupdater wurde deinstalliert. Schade das Du ihn nicht weiter verwendest\n\e[m" + return 0 } -func_uninstall_calibre() -{ - func_term_output - if test ! -d $CALIBRE_INSTALL_LOCATION/calibre ; then - echo -e "\033[1;31mEs konnte keine Calibre Installation gefunden werden. Die DeInstallation wurde abgebrochen\e[m\n" - exit 1 - fi - while ((!gueltig)); do # beginn der Ja/Nein Abfrage - echo -e "\033[1;34mMöchtest Du Calibre wirklich DeInstallieren? Calibre kann dann nicht mehr verwendet werden!" - read -sn1 -t 30 -p "Deine Bücher und die Calibre Bibliothek bleiben erhalten. [j/n] " answer - echo -e "\e[m" - case "$answer" in - [JjYy]) result=1; gueltig=1 ;; - [Nn]) result=0; gueltig=1 ;; - "") result=0; gueltig=1 ;; - *) gueltig=0 ;; - esac - done - echo + +func_uninstall_calibre() { + func_term_output + if [ ! -d $CALIBRE_INSTALL_LOCATION/calibre ] ; then + echo -e "\033[1;31mEs konnte keine Calibre Installation gefunden werden. Die DeInstallation wurde abgebrochen\e[m\n" + exit 0 + fi + while ((!gueltig)); do # beginn der Ja/Nein Abfrage + echo -e "\033[1;34mMöchtest Du Calibre wirklich DeInstallieren? Calibre kann dann nicht mehr verwendet werden!" + read -sn1 -t 30 -p "Deine Bücher und die Calibre Bibliothek bleiben erhalten. [j/n] " answer + echo -e "\e[m" + case "$answer" in + [JjYy]) result=1; gueltig=1 ;; + [Nn]) result=0; gueltig=1 ;; + "") result=0; gueltig=1 ;; + *) gueltig=0 ;; + esac + done if (( ! result )); then echo -e "\n\033[1;31mDie DeInstallation von Calibre wurde durch Dich abgebrochen.\e[m\n" - exit 1 + exit 0 fi echo -e "\033[1;34mCalibre wird nun deinstalliert.\e[m" if [ -w "$CALIBRE_INSTALL_LOCATION" ]; then @@ -122,6 +121,37 @@ func_uninstall_calibre() else sudo calibre-uninstall fi - echo -e "\n\033[1;32mCalibre würde DeInstalliert! Schade es ist ein tolles Programm zur eBookverwaltung :-)\n\e[m" - return 0 + echo -e "\n\033[1;32mCalibre würde DeInstalliert! Schade es ist ein tolles Programm zur eBookverwaltung :-)\n\e[m" + return 0 +} + +func_install_calibre() { +# Installationsort von Calibre + func_term_output + read -p "Wohin soll Calibre installiert werden? [default /opt] " CALIBRE_INSTALL_LOCATION + if [ -z $CALIBRE_INSTALL_LOCATION ]; then + CALIBRE_INSTALL_LOCATION=/opt + fi + while [ ! -d $CALIBRE_INSTALL_LOCATION ]; do + echo -e "\n\033[1;31mDas Verzeichnis $CALIBRE_INSTALL_LOCATION existiert nicht. Bitte gib ein existierendes Verzeichnis ein!\e[m" + read -p "Wohin soll Calibre installiert werden? [default /opt] " CALIBRE_INSTALL_LOCATION + done + if [ -w "$CALIBRE_INSTALL_LOCATION" ]; then + echo -e "\n\033[1;32mCalibre wird nun installiert...\n\e[m" + wget -nv -O- $DOWNLOAD_URL | python -c "import sys; main=lambda x:sys.stderr.write('Download failed\n'); exec(sys.stdin.read()); main('$CALIBRE_INSTALL_LOCATION')" + if [ ! -w "$ECT" ]; then + echo -e "\033[1;34mDu hast kein Schreibrecht auf $ETC. Die Updater Konfigurationsdatei wird mit SUDO angepasst. Bitte gib hierzu Dein Userpasswort im Terminal ein...\n\e[m" + sudo sed -i "s/CALIBRE_INSTALL_LOCATION=.*/CALIBRE_INSTALL_LOCATION=${CALIBRE_INSTALL_LOCATION//\//\/}/" $ETC"calibre-autoupdate.conf" + else + sed -i "s/CALIBRE_INSTALL_LOCATION=.*/CALIBRE_INSTALL_LOCATION=${CALIBRE_INSTALL_LOCATION//\//\/}/" $ETC"calibre-autoupdate.conf" + fi + else + echo -e "\033[1;34mDu hast kein Schreibrecht auf $CALIBRE_INSTALL_LOCATION." + echo -e "Calibre wird mit SUDO installiert. Bitte gib hierzu Dein Userpasswort ein...\n\e[m" + sudo -v && wget -nv -O- $DOWNLOAD_URL | sudo python -c "import sys; main=lambda x:sys.stderr.write('Download failed\n'); exec(sys.stdin.read()); main('$CALIBRE_INSTALL_LOCATION')" + sudo sed -i "s/CALIBRE_INSTALL_LOCATION=.*/CALIBRE_INSTALL_LOCATION=${CALIBRE_INSTALL_LOCATION//\//\/}/" $ETC"calibre-autoupdate.conf" + fi + echo -e "\n\n\033[1;32mHerzlichen Glückwunsch. Calibre wurde unter $CALIBRE_INSTALL_LOCATION installiert" + echo -e "und kann nun mit \"calibre\" verwendet werden.\n\033[0m" + return 0 } \ No newline at end of file diff --git a/calibre-autoupdate_checks.h b/calibre-autoupdate_checks.h index 6e919ea..fdcb222 100644 --- a/calibre-autoupdate_checks.h +++ b/calibre-autoupdate_checks.h @@ -3,120 +3,100 @@ # func_http_status_code () { - echo -e "\033[1;34m Hole Status Code von $CHECK_CALIBRE_DOWNLOAD_PAGE. Bitte warten.\e[m" - stat_1=$(curl -o /dev/null --silent --head --write-out '%{http_code}' $CHECK_CALIBRE_DOWNLOAD_PAGE) - func_progressbar - echo -e "\033[32m Status Codes von $CHECK_CALIBRE_DOWNLOAD_PAGE erhalten\e[m" - echo -e "\n\033[1;34m Hole Status Code von $CHECK_DOWNLOAD_URL. Bitte warten.\e[m" - stat_2=$(curl -o /dev/null --silent --head --write-out '%{http_code}' $CHECK_DOWNLOAD_URL) - func_progressbar - echo -e "\033[32m Status Codes von $CHECK_DOWNLOAD_URL erhalten\e[m" - return 0 + echo -e "\033[1;34m Hole Status Code von $CHECK_CALIBRE_DOWNLOAD_PAGE. Bitte warten.\e[m" + stat_1=$(curl -o /dev/null --silent --head --write-out '%{http_code}' $CHECK_CALIBRE_DOWNLOAD_PAGE) + func_progressbar + echo -e "\033[32m Status Codes von $CHECK_CALIBRE_DOWNLOAD_PAGE erhalten\e[m" + echo -e "\n\033[1;34m Hole Status Code von $CHECK_DOWNLOAD_URL. Bitte warten.\e[m" + stat_2=$(curl -o /dev/null --silent --head --write-out '%{http_code}' $CHECK_DOWNLOAD_URL) + func_progressbar + echo -e "\033[32m Status Codes von $CHECK_DOWNLOAD_URL erhalten\e[m" + return 0 } -func_check_stat () { # Funktion zum Check Verfügbarkeit der Downloadseiten und der Internetverbindung -# Test for network conection -echo -e "\n\033[1;34m Suche nach vorhandenen Netzwerk für die Verbindung zum Internet :-)\e[m" -for INTERFACE in $(ls /sys/class/net/ | grep -v lo) -do - if [[ $(cat /sys/class/net/$INTERFACE/carrier) = 1 ]]; then - ONLINE=1 - fi -done -func_progressbar -if [ $ONLINE ]; then - echo -e "\033[32m Es wurde ein Netzwerkinterface gefunden. Verbinde über Interface $INTERFACE\n\e[m" - func_http_status_code - if [[ $stat_1 -eq 200 && $stat_2 -eq 200 ]]; then - return 1 - elif [[ $stat_1 -eq !200 ]]; then - return 2 - else - return 3 - fi -else - echo -e "\n\033[31m Fehler!!! Bitte schau Dir die Desktop Benachrichtigung an!\e[m" - return 4 -fi -} - -func_vercomp () { # Funktion zum Versionsvergleich - if [[ $1 == $2 ]] - then - return 0 +func_check_stat () { # Funktion zum Check Verfügbarkeit der Downloadseiten und der Internetverbindung + # Test for network conection + echo -e "\n\033[1;34m Suche nach vorhandenen Netzwerk für die Verbindung zum Internet :-)\e[m" + for INTERFACE in $(ls /sys/class/net/ | grep -v lo); do + if [[ $(cat /sys/class/net/$INTERFACE/carrier) = 1 ]]; then + ONLINE=1 + fi + done + func_progressbar + if [ $ONLINE ]; then + echo -e "\033[32m Es wurde ein Netzwerkinterface gefunden. Verbinde über Interface $INTERFACE\n\e[m" + func_http_status_code + if [[ $stat_1 -eq 200 && $stat_2 -eq 200 ]]; then + return 1 + elif [[ $stat_1 -eq !200 ]]; then + return 2 + else + return 3 + fi + else + echo -e "\n\033[31m Fehler!!! Bitte schau Dir die Desktop Benachrichtigung an!\e[m" + return 4 fi - local IFS=. - local i ver1=($1) ver2=($2) - # fill empty fields in ver1 with zeros - for ((i=${#ver1[@]}; i<${#ver2[@]}; i++)) - do - ver1[i]=0 - done - for ((i=0; i<${#ver1[@]}; i++)) - do - if [[ -z ${ver2[i]} ]] - then - # fill empty fields in ver2 with zeros - ver2[i]=0 - fi - if ((10#${ver1[i]} > 10#${ver2[i]})) - then - return 1 - fi - if ((10#${ver1[i]} < 10#${ver2[i]})) - then - return 2 - fi - done return 0 } func_check_run_calibre () { - CALIBRE_PID=`ps ax | grep /opt/calibre/bin/calibre | grep -v grep | awk '{printf $1}'` - - while [ $CALIBRE_PID ] - do - $NOTIFY "Um das Update installieren zu können, muss Calibre beendet werden. Calibre wird in einer Minute vom Update Service beendet. !!!Bitte speichere alle wichtigen Daten!!!" - sleep 3 - echo "" - for (( i=60; i>0; i-- )) - do - echo -e -n "\033[31m noch \033[32m>>$i<< \033[31m Sekunden bis zum Calibre Programmende\r\e[m" - sleep 1 + while [ `ps ax | grep /opt/calibre/bin/calibre | grep -v grep | awk '{printf $1}'` ]; do + $NOTIFY "Um das Update installieren zu können, muss Calibre geschlossen werden..." done - kill -15 $CALIBRE_PID return 0 - done - return 0 } func_check_version () { - #Ermitteln der letzten aktuell verfügbaren Version - LATEST_VERSION=`curl -s $CALIBRE_DOWNLOAD_PAGE | grep 'latest release of calibre' | sed 's/[^0-9.]*\([1-9]*[0-9]\.[1-9]*[0-9]\).*/\1/'` - #Ermitteln der aktuell installierten Version. - CURRENT_VERSION=`calibre --version | sed 's/[^0-9.]*\([0-9.]*\).*/\1/'` - return 0 + #Ermitteln der letzten aktuell verfügbaren Version + LATEST_VERSION=`curl -s $CALIBRE_DOWNLOAD_PAGE | grep 'latest release of calibre' | sed 's/[^0-9.]*\([1-9]*[0-9]\.[1-9]*[0-9]\).*/\1/'` + #Ermitteln der aktuell installierten Version. + CURRENT_VERSION=`calibre --version | sed 's/[^0-9.]*\([0-9.]*\).*/\1/'` + + if [[ $CURRENT_VERSION == $LATEST_VERSION ]]; then + return 0 + fi + local IFS=. + local i ver1=($CURRENT_VERSION) ver2=($LATEST_VERSION) + # fill empty fields in ver1 with zeros + for ((i=${#ver1[@]}; i<${#ver2[@]}; i++)); do + ver1[i]=0 + done + for ((i=0; i<${#ver1[@]}; i++)); do + if [[ -z ${ver2[i]} ]]; then + # fill empty fields in ver2 with zeros + ver2[i]=0 + fi + if ((10#${ver1[i]} > 10#${ver2[i]})); then + return 1 + fi + if ((10#${ver1[i]} < 10#${ver2[i]})); then + return 2 + fi + done + return 0 } - -func_check_prog () { - func_term_output - if test ! -f $CURL ; then - $NOTIFY "Du hast Curl nich installiert, es wird aber für die Updatefunktion benötigt" - exit 1 - fi - - if test ! -f $AWK ; then - $NOTIFY "Du hast AWK nich installiert, es wird aber für die Updatefunktion benötigt" - exit 1 - - if test ! -f $NOTIFY ; then - echo -e "\e[0;33mDu hast Notify-Send nich installiert, das Programm ist optional und wird\e[m" - echo -e "für die Upatefunktion nicht unbedingt benötigt\n\e[m" - sleep 10 - fi - - fi +func_check_prog () { # Schaut ob Calibre und benötigte Programme installiert sind + func_term_output + if [ ! -d $CALIBRE_INSTALL_LOCATION/calibre ]; then + $NOTIFY "Check auf Calibre-Updates nicht möglich! Calibre ist gar nicht installiert. Bitte verwende calibre-autoupdate --install-calibre um Calibre zu installieren" + exit 0 + fi + if [ ! -f $CURL ]; then + $NOTIFY "Du hast Curl nich installiert, es wird aber für die Updatefunktion benötigt" + exit 0 + fi + if [ ! -f $AWK ]; then + $NOTIFY "Du hast AWK nich installiert, es wird aber für die Updatefunktion benötigt" + exit 0 + fi + if [ ! -f /usr/bin/notify-send ]; then + echo -e "\e[0;33mDu hast Notify-Send nich installiert, das Programm ist optional und wird\e[m" + echo -e "für die Upatefunktion nicht unbedingt benötigt\n\e[m" + sleep 10 + fi echo -e "\033[32mAlle benötigten Programme sind installiert. Starte $PROGNAME ohne Optionen und" echo -e "es wird nach einer aktuellen Calibre Version gesucht\n\e[m"; + return 0 } \ No newline at end of file