scripts / flightgear / mount.terrafs /
fdda1d2 a year ago
1 contributor
78 lines | 1.881kb
#!/bin/zsh

terrafs_d=${1:-$HOME/.fgfs/terrafs.d}

typeset -A osm2city_urls=(
        cdn.merspieler.tk       o2c
        ukmirror.flightgear.org osm2city
    )

typeset -A ws20_urls=(
        cdn.merspieler.tk          ts
        ukmirror.flightgear.org    fgscenery
        flightgear.sourceforge.net scenery
    )

osm2city_dirs=(
        Buildings
        Details
        Pylons
        Roads
        Trees
    )

ws20_dirs=(
        Airports
        Models
        Objects
        Terrain
    )

get_url () {
    eval "local hosts=(\${(k)${1}_urls[@]})"
    echo ${hosts[$(( $RANDOM % ${#hosts[@]} + 1 ))]}
}

remove_url () {
    eval "unset \"${1}_urls[$2]\""
}

get_largest () {
    eval "local _1=\${#${1}_urls[@]}"
    eval "local _2=\${#${2}_urls[@]}"
    if test $_1 -gt $_2; then
        echo largest=$1
        echo smallest=$2
    else
        echo largest=$1
        echo smallest=$2
    fi
}

mount_dirs () {
    local dir=
    eval "local oserver=https://\${${1}_url}/\${${1}_urls[\${${1}_url}]}"
    eval "local dirs=(\${${1}_dirs[@]})"
    for dir in ${dirs[@]}; do
        mkdir -p $HOME/.fgfs/terrafs.d/$dir
        printf "- %-10s " $dir && $HOME/.fgfs/terrafs -oserver=$oserver/$dir $terrafs_d/$dir && echo "ok" || echo "ERROR"
    done
}

eval $(get_largest ws20 osm2city)

if test $(grep -Ec "^terrafs +$terrafs_d" /proc/mounts) -ne $(( ${#ws20_dirs[@]} + ${#osm2city_dirs[@]} )); then
    eval "${largest}_url=$(get_url $largest)"
    eval "remove_url $smallest \$${largest}_url"
    eval "${smallest}_url=$(get_url $smallest)"

    for m in ws20 osm2city; do
        eval "printf 'montage %s depuis %s\n' ${(U)m} \$${m}_url"
        mount_dirs $m
    done
else
    echo "démontage $terrafs_d"
    for dir in ${osm2city_dirs[@]} ${ws20_dirs[@]}; do
        printf "- %-10s " $dir && fusermount -u $terrafs_d/$dir && echo "ok" || echo "ERROR"
    done
fi