#!/bin/bash # rapibash version 0.2 # gestor de descargas de rapidshare # Bash script # # Escrito por _Poseidon_, comenzado el domingo 3 de agosto de 2008 # Última modificación Viernes 10 de octubre de 2008 # Webpage http://pablo777.wordpress.com/ function main { settings if [ $# = 0 ] then if which zenity >"/dev/null"; then zenity-gui; elif which Xdialog >"/dev/null"; then Xdialog-gui; fi else case "$1" in start) PROCESS="$(ps ax -o pid,args)" if [ $(echo "$PROCESS"| grep "$0 start"| wc -l) -gt 1 ] then echo "$ERR5" else start_download fi ;; stop) stop_download ;; clean) clean_list ;; move) move_URI "$2" "$3";; add) add_URIs "$@" ;; z) zenity-gui ;; x) Xdialog-gui ;; esac fi } function start_download { settings if [ ! -w "$LIST_FILE" ] || [ ! -w "$LOG_FILE" ] || [ ! -w "$DOWNLOAD_STATUS_FILE" ] || [ ! -w "$DOWNLOAD_DIR" ] then echo "$ERR6" return 1 fi while [ $(cat "$LIST_FILE"| wc -l) -gt 0 ]; do each_URI="$(head -n 1 "$LIST_FILE")" echo "$each_URI" > "$DOWNLOAD_STATUS_FILE" echo "$MSG1 $(basename $each_URI)" if HTML_FILE1="$(wget -q -O - "$each_URI")" ; then DIR1="$( echo "$HTML_FILE1"| grep 'action='| head -n 1| sed -e 's/^.*action="//'| sed -e 's/".*$//' )" if [ ! -z "$DIR1" ]; then if HTML_FILE2="$(wget -q -O - --post-data 'dl.start=Free' "$DIR1")" ; then DIR2="$( echo "$HTML_FILE2"| grep 'action='| head -n 1| sed -e 's/^.*action="//'| sed -e 's/".*$//' )" while echo "$HTML_FILE2" |grep -q "You have reached the download limit for free-users" do echo "$ERR3" WAIT_LIMIT_EXCEDED="$(echo "$HTML_FILE2" |grep "Or try again in about" |sed -e 's/.*Or try again in about //' |sed -e 's/ minutes.*//')" sleep $(($WAIT_LIMIT_EXCEDED*60)) if HTML_FILE2="$(wget -q -O - --post-data 'dl.start=Free' "$DIR1")" then DIR2="$( echo "$HTML_FILE2"| grep 'action='| head -n 1| sed -e 's/^.*action="//'| sed -e 's/".*$//' )" fi done WAIT="$(echo "$HTML_FILE2"|grep 'var c='| head -n 1 | sed -e 's/^.*var c=//'|sed -e 's/;.*$//')" if [ -z "$WAIT" ] then ( echo "$ERR4"; WAIT=300) fi echo "$MSG3" sleep "$WAIT" echo -e "$MSG4 $(basename $DIR2)" cd "$DOWNLOAD_DIR" if wget -a "$DOWNLOAD_STATUS_FILE" "$DIR2" then echo "$MSG5" LIST="$(cat "$LIST_FILE" | grep -vx "$each_URI")" if [ ! -z "$LIST" ] then echo "$LIST" >"$LIST_FILE" else echo -n >"$LIST_FILE" fi else echo "$ERR1 $each_URI $MSG6" fi else echo "$ERR0 $each_URI $MSG6" fi else echo -e "$ERR2 $each_URI" LIST="$(cat "$LIST_FILE" | grep -vx "$each_URI")" if [ ! -z "$LIST" ] then echo "$LIST" >"$LIST_FILE" else echo -n >"$LIST_FILE" fi fi else echo "$ERR0 $each_URI $MSG6" fi done } function stop_download { set_status if [ "$DOWNLOADING" = "yes" ] then kill -9 $(echo "$PROCESS" | grep "$0 start" | awk -F " " '{print $1}') kill -9 $(echo "$PROCESS" | egrep ".*wget.*http://.+\.rapidshare\.com/files/.*" | awk -F " " '{print $1}') fi } function clean_list { if echo -n >"$LIST_FILE";then return 0; else return 1; fi } function add_URIs { LIST="$(cat "$LIST_FILE")" for each_argument in $(echo "$@" | tr -sc '[:alnum:]/:_.-' '\n' | egrep 'http://(www\.)?rapidshare(\.com|\.de)/files') do LIST="$LIST $each_argument" done LIST="$(really_uniq $LIST)" echo "$LIST" > "$LIST_FILE" } function move_URI { FROM="$1" TO="$2" FILE="$(cat "$LIST_FILE")" if [ "$FROM" != "$TO" ] then if [ $FROM -le $(echo "$FILE"| wc -l) ] && [ $TO -le $(echo "$FILE"| wc -l) ]; then LINE="$(echo "$FILE"| sed -n "$FROM"p)" NEW_LIST="$(echo "$FILE"| grep -vx "$LINE")" if [ "$TO" = 0 ] ; then NEW_LIST="$(echo "$NEW_LIST"| sed 1i"$LINE")" elif [ "$FROM" -lt "$TO" ] then NEW_LIST="$(echo "$NEW_LIST"| sed "$(($TO-1))"a"$LINE")" else NEW_LIST="$(echo "$NEW_LIST"| sed "$TO"a"$LINE")" fi echo "$NEW_LIST" >"$LIST_FILE"&& return 0 else return 1 fi fi } function zenity-gui { set_status if [ "$DOWNLOADING" = "yes" ] then startorstop="stop"; startorstoplabel="$ZG16" else startorstop="start"; startorstoplabel="$ZG15" fi if OPTION="$(zenity --list --hide-column=1 --column "" --column "" --text="$(if [ "$WGET_RUNNING" = "yes" ]; then echo -e "$DOING $(if [ $(echo $DOWNLOAD_PROGRESS| tr -d K ) -gt 1024 ];then echo $[$(echo $DOWNLOAD_PROGRESS | tr -d K )/1024]M; else echo $DOWNLOAD_PROGRESS; fi )/$DOWNLOAD_SIZE_H ($DOWNLOAD_PERCENTAGE)\n$ZG19 $DOWNLOAD_TIME_LEFT $ZG20 $DOWNLOAD_SPEED"; else echo "$DOING"; fi)" --title="$ZG1" --width 600 --height 410 actualizar "$ZG2" "$startorstop" "$startorstoplabel" view_list "$ZG3" add_uri "$ZG4" delete_uri "$ZG5" move_uri "$ZG6" clean_list "$ZG7" add_webpage "$ZG8" add_file "$ZG9" configure "$ZG22" view_log "$ZG21" )" then case "$OPTION" in view_list) zenity --list --column "" --title "$ZG3" --text="$DOING" --width 600 --height 410 $(cat "$LIST_FILE") ;; add_uri) if URIS="$(zenity --entry --text="$ZG11" --title="$ZG4" --width 600)" ;then add_URIs $URIS;fi ;; delete_uri) ARGS=""; for i in $(cat "$LIST_FILE"); do ARGS="$ARGS false $i ";done if DELETE="$(zenity --list --column "" --column "$ZG5" --checklist --separator " " --title "$ZG5" --text="$ZG5" --width 600 --height 410 $ARGS)"; then NEW_LIST="$(cat "$LIST_FILE")" for j in $DELETE do NEW_LIST="$(echo "$NEW_LIST" | grep -vx "$j")" if [ ! -z "$NEW_LIST" ] then echo "$NEW_LIST"> "$LIST_FILE" else echo -n > "$LIST_FILE" fi done fi ;; clean_list) clean_list ;; move_uri) ARGS="" COUNT=0 for each_line in $(cat "$LIST_FILE"); do COUNT="$(($COUNT+1))"; ARGS="$ARGS $COUNT $each_line"; done if FROM="$(zenity --list --column "" --column "" --title "$ZG6" --width 600 --height 410 --text "$ZG13" $ARGS)" && TO="$(zenity --list --column "" --column "" --title "$ZG6" --width 600 --height 410 --text "$ZG14" 0 "$ZG12" $ARGS)" then move_URI "$FROM" "$TO" fi ;; stop) stop_download ;; start) nohup "$0" "start" >>"$LOG_FILE"& sleep 1 ;; add_file) if A="$(zenity --file-selection --save --title="$ZG9")"; then add_URIs $(cat "$A") fi ;; add_webpage) if URI="$(zenity --entry --text="$ZG8" --title="$ZG8" --width 600)" && WEB_TEXT="$(wget -O - "$URI")" then add_URIs $WEB_TEXT fi ;; view_log) cat "$LOG_FILE" | zenity --text="$ZG21" --title="$Z21" --width 600 --height 410 --text-info;; configure) settings while OPTION2="$(zenity --title "$ZG22" --hide-column=1 --column "" --column "" --text "$ZG22" --width 600 --height 410 --list download_dir "$ZG24 [$DOWNLOAD_DIR]" list_file "$ZG25 [$LIST_FILE]" download_status_file "$ZG26 [$DOWNLOAD_STATUS_FILE]" log_file "$ZG27 [$LOG_FILE]" permissions "$ZG28 [$PERMISSIONS]" )";do case $OPTION2 in download_dir) if D=$(zenity --title "$ZG24" --file-selection --directory) then change DOWNLOAD_DIR "$D" fi ;; list_file) if F="$(zenity --title "$ZG25" --file-selection --save)" then change LIST_FILE "$F" fi ;; download_status_file) if F="$(zenity --title "$ZG26" --file-selection --save)" then change DOWNLOAD_STATUS_FILE "$F" fi ;; log_file) if F="$(zenity --title "$ZG27" --file-selection --save)" then change LOG_FILE "$F" fi ;; permissions) if P="$(zenity --title "$ZG28" --text "$ZG29" --entry)" then change PERMISSIONS "$P" fi ;; esac settings done ;; esac zenity-gui fi } ### COMENTARIO IMPORTANTE: TENÍA INTENCIONES DE HACER UN GUI CON KDIALOG, PERO ME DI CUENTA QUE KDIALOG ES ASQUEROSO, POR ESO NO LO HICE. function Xdialog-gui { set_status if [ "$DOWNLOADING" = "yes" ] then startorstop="stop"; startorstoplabel="$ZG16" else startorstop="start"; startorstoplabel="$ZG15" fi if OPTION="$(Xdialog --stdout --title="$ZG0" --cancel-label "$ZG23" --no-tags --menubox "$(if [ "$WGET_RUNNING" = "yes" ]; then echo -e "$DOING $DOWNLOAD_PROGRESS/$DOWNLOAD_SIZE_H ($DOWNLOAD_PERCENTAGE)\n$ZG19 $DOWNLOAD_TIME_LEFT $ZG20 $DOWNLOAD_SPEED"; else echo "$DOING"; fi)" 20 55 0 actualizar "$ZG2" "$startorstop" "$startorstoplabel" view_list "$ZG3" add_uri "$ZG4" delete_uri "$ZG5" move_uri "$ZG6" clean_list "$ZG7" add_webpage "$ZG8" add_file "$ZG9" configure "$ZG22" view_log "$ZG21")" then case "$OPTION" in view_list) Xdialog --title "$ZG3" --no-cancel --textbox "$LIST_FILE" 20 55 ;; add_uri) if URIS="$(Xdialog --stdout --title="$ZG4" --inputbox "$ZG11" 0 0)" ;then add_URIs $URIS;fi ;; delete_uri) ARGS=""; for i in $(cat "$LIST_FILE"); do ARGS="$ARGS $i $i off ";done if DELETE="$(Xdialog --stdout --separator " " --no-tags --title "$ZG5" --checklist "$ZG5" 20 55 0 $ARGS)"; then NEW_LIST="$(cat "$LIST_FILE")" for j in $DELETE do NEW_LIST="$(echo "$NEW_LIST" | grep -vx "$j")" if [ ! -z "$NEW_LIST" ] then echo "$NEW_LIST"> "$LIST_FILE" else echo -n > "$LIST_FILE" fi done fi ;; clean_list) clean_list ;; move_uri) ARGS="" COUNT=0 for each_line in $(cat "$LIST_FILE"); do COUNT="$(($COUNT+1))"; ARGS="$ARGS $COUNT $each_line"; done if FROM="$(Xdialog --stdout --title "$ZG6" --menubox "$ZG13" 20 55 0 $ARGS)" && TO="$(Xdialog --stdout --title "$ZG6" --menubox "$ZG14" 20 55 0 0 "$ZG12" $ARGS)" then move_URI "$FROM" "$TO" fi ;; stop) stop_download ;; start) nohup "$0" "start" >>"$LOG_FILE"& sleep 1 ;; add_file) if A="$(Xdialog --stdout --title="$ZG9" --fselect "*" 0 0)"; then add_URIs $(cat "$A") fi ;; add_webpage) if URI="$(Xdialog --stdout --title="$ZG8" --inputbox "$ZG8" 0 0)" && WEB_TEXT="$(wget -O - "$URI")" then add_URIs $WEB_TEXT fi ;; view_log) Xdialog --title "$ZG21" --no-cancel --textbox "$LOG_FILE" 20 55 ;; configure) settings while OPTION2="$(Xdialog --stdout --title "$ZG22" --no-tags --menubox "$ZG22" 20 55 0 download_dir "$ZG24 [$DOWNLOAD_DIR]" list_file "$ZG25 [$LIST_FILE]" download_status_file "$ZG26 [$DOWNLOAD_STATUS_FILE]" log_file "$ZG27 [$LOG_FILE]" permissions "$ZG28 [$PERMISSIONS]" )";do case $OPTION2 in download_dir) if D="$(Xdialog --stdout --title "$ZG24" --dselect "*" 20 55)" then change DOWNLOAD_DIR "$D" fi ;; list_file) if F="$(Xdialog --stdout --title "$ZG25" --fselect "*" 20 55)" then change LIST_FILE "$F" fi ;; download_status_file) if F="$(Xdialog --stdout --title "$ZG26" --fselect "*" 20 55)" then change DOWNLOAD_STATUS_FILE "$F" fi ;; log_file) if F="$(Xdialog --stdout --title "$ZG27" --fselect "*" 20 55)" then change LOG_FILE "$F" fi ;; permissions) if P="$(Xdialog --stdout --title "$ZG28" --inputbox "$ZG29" 0 0)" then change PERMISSIONS "$P" fi ;; esac settings done ;; esac Xdialog-gui fi } function change { variable="$1" value="$2" TEMPRC="$(grep -v "$variable=" "$CONF_FILE_USER")" echo "$TEMPRC" > "$CONF_FILE_USER" echo "$variable=$value" >> "$CONF_FILE_USER" } function set_status { PROCESS="$(ps ax -o pid,args)" DOWNLOADING="no" WGET_RUNNING="no" DOWNLOAD_FILE="" DOWNLOAD_SIZE="" DOWNLOAD_SIZE_H="" DOWNLOAD_PERCENTAGE="" DOWNLOAD_PROGRESS="" DOWNLOAD_SPEED="" DOWNLOAD_TIME_LEFT="" DOWNLOAD_URI="" DOING="$ZG18" if echo "$PROCESS"| grep "$0 start" > "/dev/null" then DOWNLOADING="yes" DOWNLOAD_URI="$(head -n 1 "$DOWNLOAD_STATUS_FILE")" DOING="$(tail -n 1 "$LOG_FILE")" if echo "$DOING" | grep "$MSG4" > "/dev/null" then WGET_RUNNING="yes" DOWNLOAD_FILE="$(cat "$DOWNLOAD_STATUS_FILE" | sed -n 7p | sed -e 's/^.*`//' | sed -e 's/'\''.*$//')" DOWNLOAD_SIZE="$(cat "$DOWNLOAD_STATUS_FILE" | sed -n 6p | sed -e 's/^.*: //' | sed -e 's/ .*$//')" DOWNLOAD_SIZE_H="$(cat "$DOWNLOAD_STATUS_FILE" | sed -n 6p | sed -e 's/^.*(//' | sed -e 's/).*$//')" DOWNLOAD_PERCENTAGE="$(cat "$DOWNLOAD_STATUS_FILE"| tail -n 2 | head -n 1| awk -F " " '{print $7}')" DOWNLOAD_PROGRESS="$(cat "$DOWNLOAD_STATUS_FILE"| tail -n 2 | head -n 1| awk -F " " '{print $1}')" DOWNLOAD_SPEED="$(cat "$DOWNLOAD_STATUS_FILE"| tail -n 2 | head -n 1| awk -F " " '{print $8}')" DOWNLOAD_TIME_LEFT="$(cat "$DOWNLOAD_STATUS_FILE"| tail -n 2 | head -n 1| awk -F " " '{print $9}')" fi fi } function really_uniq { OuT="$1" for i in $@; do if echo "$OuT"|grep -qx "$i" then true else OuT="$OuT $i" fi done echo "$OuT" } function settings { DOWNLOAD_DIR="$HOME" LIST_FILE="$HOME/.rapibash-list" DOWNLOAD_STATUS_FILE="$HOME/.rapibash.download.status" LOG_FILE="$HOME/.rapibash.log" PERMISSIONS="600" CONF_FILE_GLOBAL="/etc/rapibash.conf" CONF_FILE_USER="$HOME/.rapibash.conf" if [ -r "$CONF_FILE_GLOBAL" ] then . "$CONF_FILE_GLOBAL" fi if [ -r "$CONF_FILE_USER" ] then . "$CONF_FILE_USER" fi if [ ! -e "$LIST_FILE" ]; then echo -n >"$LIST_FILE"; fi if [ ! -e "$LOG_FILE" ]; then echo -n >"$LOG_FILE"; fi if [ ! -e "$DOWNLOAD_STATUS_FILE" ]; then echo -n >"$DOWNLOAD_STATUS_FILE"; fi if [ ! -e "$CONF_FILE_USER" ]; then echo -n >"$CONF_FILE_USER"; fi chmod "$PERMISSIONS" "$LIST_FILE"; chmod "$PERMISSIONS" "$LOG_FILE"; chmod "$PERMISSIONS" "$DOWNLOAD_STATUS_FILE"; chmod "$PERMISSIONS" "$CONF_FILE_USER"; case $LANG in es*) MSG1="Buscando enlace de descarga para" MSG3="Esperando que el servidor autorice la descarga" MSG4="Descargando" MSG5="Descarga completa" MSG6="Reintentando" MSG11="Lista de descargas borrada" ERR0="Error: No se puede determinar el enlace de descarga para" ERR1="Error al descargar" ERR2="Archivo borrado" ERR3="Limite de descargas excedido, esperando a que el servidor autorice la descarga" ERR4="Error: no se puede determinar cuanto tiempo esperar, esperando 300 segundos" ERR5="Error: Este programa ya está ejecutándose" ERR6="Error: Permisos insuficientes" ZG0="RapiBash" ZG1="RapiBash GUI basado en zenity" ZG2="Actualizar información sobre el estado del programa" ZG3="Ver lista de descargas" ZG4="Agregar URI a la lista de descargas" ZG5="Borrar URI de la lista de descargas" ZG6="Reordenar lista de descargas" ZG7="Borrar lista de descargas" ZG8="Encontrar enlaces en página web" ZG9="Encontrar enlaces en archivo" ZG10="Detener las descargas" ZG11="Agregar URI a la lista de descargas. Se pueden agregar varias separadas por un espacio." ZG12="Mover al principio de la lista" ZG13="Mover la descarga" ZG14="Despues de" ZG15="Iniciar descargas" ZG16="Detener descargas" ZG17="Estado actual:" ZG18="Detenido" ZG19="Tiempo restante estimado:" ZG20="Velocidad de descarga:" ZG21="Ver log" ZG22="Modificar configuración" ZG23="Cerrar ventana" ZG24="Directorio de descargas" ZG25="Archivo de lista" ZG26="Archivo de estado de descarga" ZG27="Archivo de log" ZG28="Permisos para archivos" ZG29="Permisos para archivos. Poner este valor a 666 para permitir a otros usuarios modificar la lista. Ponerlo a 600 para denegarselo." ;; *) MSG1="Looking for the download link for" MSG3="Waiting for the server allow downloading" MSG4="Downloading" MSG5="Download complete" MSG6="Retrying" MSG11="Download list cleared" ERR0="Error: Can't find the download link for" ERR1="Error while downloading" ERR2="File has been deleted" ERR3="Download limit exceded, waiting for the server allow downloading" ERR4="Error: can't be determinated the wait time, waiting 300 seconds" ERR5="Error: this program is already running" ERR6="Error: Permission denied" ZG0="RapiBash" ZG1="RapiBash zenity based GUI" ZG2="Refresh download status info" ZG3="View download list" ZG4="Add URI to the download list" ZG5="Delete URI from the download list" ZG6="Move an element in the download list" ZG7="Delete the download list" ZG8="Find links in webpage" ZG9="Find links in file" ZG10="Stop downloads" ZG11="Add URI to the download list. Multiple allowed" ZG12="Move to the begin of the list" ZG13="Move the download" ZG14="Under" ZG15="Start downloads" ZG16="Stop downloads" ZG17="Status:" ZG18="Stopped" ZG19="Estimated time left:" ZG20="Download speed:" ZG21="View log" ZG22="Settings" ZG23="Close window" ZG24="Download directory" ZG25="List file" ZG26="Download status file" ZG27="Log file" ZG28="File permissions" ZG29="File permissions. Set this value to 666 will allow to another users to modify de download list. Set it to 600 to deny them." ;; esac } main "$@"