script zenity para zsync

2

Alguém pode criar um script zenity simples para o zsync, o que apenas leva a localização do arquivo a ser sincronizado e o arquivo zsync e mostra o progresso?

    
por Lincity 31.01.2011 / 12:14

1 resposta

5

O zsync tem uma saída terrível para análise. Você seria louco para tentar isso.

Dito isso, estou aparentemente louco.

#!/bin/bash

url=
seedfile=

tempdir=$(mktemp -d)
msgfile=$tempdir/message
trap 'rm -rf "$tempdir"' EXIT

down_filter() {
    local message line percent speed
    echo "Downloading zsync file" > "$msgfile"
    read -r -n1 _
    while read -r line; do
        if [[ $line = [-#]* ]]; then
            read -r _ percent speed <<< "$line"
            echo "#$(<"$msgfile")\n$speed"
            if (( ${percent%%.*} < 100 )); then
                echo "$percent"
            else
                echo "99.9%"
            fi
        fi
    done < <(awk 'BEGIN{RS="[\r\n]"} {print;fflush()}')
}

seed_filter() {
    local message file count size point
    while read -r -d '*' line; do
        file=${line%:*}
        message+="\n$file"
        echo "$message" > "$msgfile"
        file=${file#reading seed file }
        count=1
        size=$(( $(wc -c < "$file") / 1000000 + 1 ))
        echo "#$message"
        while read -r -n1 point; do
            [[ $point = '*' ]] || break
            ((count++))
            echo "$(( 100 * count / size ))%"
        done
        read -r message;
        echo "$message" > "$msgfile"
    done
}

if [[ -z $url ]]; then
    url=$(zenity --entry \
                 --title=zsync \
                 --text="Enter URL to zsync file" \
                 --width=500 \
                 --height=100 \
    ) || exit
fi

if [[ -z $seedfile || ! -e $seedfile ]]; then
    seedfile=$(zenity --file-selection \
                      --title="zsync $url" \
                      --text="Choose a seed-file" \
    )
fi

{ 
    zsync ${seedfile:+-i "$seedfile"} "$url" \
          > >(down_filter >&3) 2> >(seed_filter >&3)
} 3> >(zenity --progress \
              --title="zsync $url" \
              --width=500 \
              --height=100 \
)

O script terá muitas fraquezas. Qualquer pequena alteração na saída do zsync em uma versão mais recente provavelmente a quebraria. (Testado apenas no zsync v0.6.1 do Ubuntu 10.04). Por alguma razão estranha, ele gera alguns dos progressos para stdout e alguns para stderr, o que dificulta ainda mais a análise.

Além disso, ele não manipulará determinados caracteres ímpares em nomes de arquivos, como \ , * ou novas linhas.

Espere por erros; Eu não testei tanto assim.

De qualquer forma, eu nunca tinha ouvido falar do zsync antes. É uma ferramenta legal, então obrigado por me avisar, pelo menos. :)

Imagens:

    
por geirha 03.02.2011 / 02:42