source: zero-center/trunk/fuentes/install-files/usr/bin/zero-lliurex-axel @ 2108

Last change on this file since 2108 was 2108, checked in by Juanma, 4 years ago

WIP on notifications and installation results

  • Property svn:executable set to *
File size: 6.8 KB
Line 
1#!/bin/bash
2export TEXTDOMAIN="zero-center"
3
4MSG_DONWLOADED=$(gettext "is downloaded in your directory")
5MSG_STARTING=$(gettext "Starting to download your file")
6MSG_CANCELLED=$(gettext "Your dowloading has been cancelled about your file")
7
8
9
10        #Esta funcion intentara bajar lo que sea sin saber si existe o no en la red
11        #Arg1: detecta si es "-u" o no.
12        #Arg2: URL del fichero a descargar
13        #Arg3: Donde se descargara.
14        function untester {
15                if [ "$1" == "-u" ]; then
16                        #OBTENGO EL NOMBRE DEL FICHERO A DESCARGAR
17                        if [ "$4" == "" ]; then
18                                NAME_FILE=$(echo $2 | rev | cut -d "/" -f1 | rev)
19                        else
20                                NAME_FILE="$4"
21                        fi
22                        mainwget "$2" "$3" "$NAME_FILE"
23                        exit 0
24                fi
25       
26        }
27
28        function check_parameters {
29                #Compruebo que el directorio existe
30                [ -d $2 ] || mkdir -p $2
31                #Compruebo que la direccion existe
32               
33                if  wget --spider -o /tmp/axel.log "$1"; then
34                        #OBTENGO EL NOMBRE DEL FICHERO A DESCARGAR
35                        NAME_FILE=$(echo $1 | rev | cut -d "/" -f1 | rev)
36                        #Si el fichero ya estaba descargado no puedo descargarlo de nuevo, antes he de borrarlo
37                        if [ -f "$2"/"$NAME_FILE" ] ; then
38                                echo "$2/$NAME_FILE exists, you have to delete it before if you want to download it again"
39                                exit 1
40                        else
41                        #Todo es correcto no existe el fichero y si existe la URL puedo descargarlo
42                        echo ""
43                        echo "URL exists, downloading......."
44                        fi
45                       
46                else
47                        echo ""
48                        echo "URL does not exist: $1"
49                        echo "Please check it."
50                        echo ""
51                        exit 1
52                fi
53               
54                if [ -f "/tmp/axel.log" ]; then
55                        rm /tmp/axel.log -rf
56                fi
57        }
58
59        function helper {
60                if [ $1 = "--help" ] || [ $1 = "-h" ]; then
61                        echo
62                        echo "----ZERO-DOWNLOADED-HELPER----"
63                        echo
64                        echo "zero-lliurex-axel <option> <arg1> <arg2> <arg3>"
65                        echo
66                        echo "-u option: you can untested if URL exsist, downloading forced"
67                        echo
68                        echo "arg1: Is the URL from you download the file"
69                        echo "arg2: Is the directory to save the file."
70                        echo "arg3: It is an optional argument, you can define the name for the untested downloads"
71                        echo
72                        echo "If arg2 is blank you can restore the download when you want, and the directory to save it, it will be the actually."
73                        echo "--------------------------------------------"
74                        echo
75                        echo "example: zero-lliurex-axel http://sourceforge.net/projects/arasuite/files/arasuite_unix_2.1.sh /tmp/borrame"
76                        echo
77                        exit 1
78                fi                     
79        }
80
81
82        function main {
83               
84                #Creamos un fichero que nos servirá de ayuda para escribir y leer el tanto por cien del fichero descargado
85                touch /tmp/axel.log
86                #En segundo plano realizaremos la descaraga del fichero almacenando su salida en nuestro log, eliminando ést al termianr la descarga
87                (axel -o "$2" "$1" > /tmp/axel.log; if [ -f "/tmp/axel.log" ]; then rm /tmp/axel.log; fi) &
88
89                #Mientras que el fichero de ayuda existe es que estamos descargando
90                #Cuando y ano exista saldremos del while
91                rc=0
92                        while [ -f  "/tmp/axel.log" ]; do
93                                #En la variable PERCENT almacenamos el tanto por cien que llevamos de descarga
94                                #accediento a la ultima linea escrita en el fichero de ayuda y seleccionando solo el dato que necesitamos.
95                                PERCENT=$( tail -1 /tmp/axel.log  2>/dev/null  | grep % | sed 's/[^0-9.]*\([0-9.]*\).*/\1/' )
96                                #Hacemos echo de los datos que necesita el zenity
97                                echo "#Downloading $3 in $2 ...................$PERCENT%"
98                                echo "$PERCENT"
99                                #por ultimo entubamos la salida al zenity progress para que nos muestre el resultado en pantalla
100                        done | zenity --progress percentage=0 --auto-close --width 550 --title="Zero-Downloader-Helper"  > /dev/null 2>&1  || rc=1
101                       
102                        #Si se presiono cancel en la descarga matamos los procesos para finiquitarla
103                       
104                        if [ ${rc} -eq 1 ] ; then
105                               
106                                #Borramos el axel.log
107                                if [ -f "/tmp/axel.log" ]; then
108                                        rm /tmp/axel.log -rf
109                                fi
110                                #CREAMOS UNA LISTA CON LOS PID NECESARIOS Y LOS FINALIZAMOS
111                                LISTA=( $( ps -aux | grep axel | grep $1 | grep -v zero | awk '{print $2}') )
112                                #echo "The package list is....."
113                                #Comento el echo que muestra la lista
114                                #echo ${LISTA[@]}
115                                        for i in "${LISTA[@]}"; do
116                                                #echo "You cancel zero-lliurex-axel process with PID $i"
117                                                kill $i > /dev/null 2>&1
118                                        done
119                        rm $2/$NAME_FILE*
120                        notify-send -t 5000 -u normal -i /usr/share/icons/lliurex-neu/scalable/apps/zero-center.svg "Zero-Downloader-Helper" "$MSG_CANCELLED $NAME_FILE"
121                        echo "Your downloading file $1 has been cancelled"
122                        echo ""
123                        exit 1
124                        fi
125                notify-send -t 5000 -u normal -i /usr/share/icons/lliurex-neu/scalable/apps/zero-center.svg "Zero-Downloader-Helper" "$NAME_FILE $MSG_DONWLOADED $2"
126                echo "File $1 is downloaded in $2"
127        }
128       
129       
130       
131        function mainwget {
132                #Arg1: La URL del fichero a descargar
133                #Arg2: PATH de descarga del fichero
134                #Arg3: Nombre del fichero una vez descargado.
135                       
136                #Me aseguro que el nombre del fichero a descargar no es muy largo
137                NAME=$(echo "$3" | cut -c1-35)
138               
139                #variable que nos indica que se cancela o no la descarga del proceso
140                rc=0
141               
142                #intruccion de descarga del fichero:           
143                # wget outputs progress messages that look like this:
144                #      0K .......... .......... .......... .......... ..........  0%  823K 40s
145                # This function replaces each such line with the pair of lines
146                # 0%
147                # # Downloading... 823K (40s)
148                # It uses minimal buffering, so each line is output immediately
149                # and the user can watch progress as it happens.
150                # Old instruction:
151                #( wget -O "$2"/"$3" "$1" 2>&1 | grep --line-buffered -o "[0-9]*%" | sed  -u -e 's/.* \([0-9]\+%\)\ \+\([0-9.]\+.\) \(.*\)/\1\n# Downloaded \1\ from "'$NAME'"  at \2\/s, ETA \3/' | zenity  --progress percentage=0 --auto-close --auto-kill --width 600 --title="Zero-Downloader-Helper" > /dev/null 2>&1  )|| rc=1
152                ( wget -O "$2"/"$3" "$1" 2>&1 |  sed -u 's/.*\ \([0-9]\+\)%\ \+\(.*\)$/\1\n#Downloaded \1\% from "'$NAME'" at \2/' | zenity  --progress percentage=0 --auto-close --auto-kill --width 600 --title="Zero-Downloader-Helper" --text="$MSG_STARTING '$NAME'........." > /dev/null 2>&1  )|| rc=1
153
154                #Esta parte cancela el proceso del wget si se cancela la descarga en el zenity.
155               
156                        if [ ${rc} -eq 1 ] ; then
157                               
158                                #CREAMOS UNA LISTA CON LOS PID NECESARIOS Y LOS FINALIZAMOS
159                                LISTA=( $( ps -aux | grep wget | grep $1 |  awk '{print $2}') )
160                                #echo "The package list is....."
161                                #Comento el echo que muestra la lista
162                                #echo ${LISTA[@]}
163                                        for i in "${LISTA[@]}"; do
164                                                #echo "You cancel zero-lliurex-axel process with PID $i"
165                                                kill $i > /dev/null 2>&1
166                                               
167                                        done
168                        rm "$2"/"$3"*
169                        notify-send -t 5000 -u normal -i /usr/share/icons/lliurex-neu/scalable/apps/zero-center.svg "Zero-Downloader-Helper" "$MSG_CANCELLED $1"
170                        echo "Your downloading file $1 has been cancelled"
171                        echo ""
172                        exit 1
173                        fi
174                notify-send -t 5000 -u normal -i /usr/share/icons/lliurex-neu/scalable/apps/zero-center.svg "Zero-Downloader-Helper" "$1 $MSG_DONWLOADED $2"
175                echo "File $3 is downloaded in $2"
176        }
177
178helper "$1"
179untester "$1" "$2" "$3" "$4"
180check_parameters "$1" "$2"
181main "$1" "$2" "$NAME_FILE"
182
183exit 0
184
Note: See TracBrowser for help on using the repository browser.