#!/bin/bash

VERSION="kokomi"

TEST_NETCONNECT_HOST="www.baidu.com"

SOURCES_MIRRORS_FILE="/etc/yoyo-apt/sources_mirrors.list"   

MIRRORS_SPEED_FILE="/etc/yoyo-apt/mirrors_speed.list"

SOURCES_MIRRORS_FILE_URL="https://packages.yzzi.icu/sources_mirrors.list"

function get_mirror_list()
{
    wget $SOURCES_MIRRORS_FILE_URL --output-document=$SOURCES_MIRRORS_FILE
}

function get_ping_speed()    #return average ping $1 time

{

    local speed=`ping -W1 -c1 $1 2> /dev/null | grep "^rtt" |  cut -d '/' -f5`

    echo $speed

}

function test_mirror_speed()    #

{

    rm $MIRRORS_SPEED_FILE 2> /dev/null; touch $MIRRORS_SPEED_FILE

   

     cat $SOURCES_MIRRORS_FILE | while read mirror

    do

        if [ "$mirror" != "" ]; then

            echo -e "Ping $mirror c"

            local mirror_host=`echo $mirror | cut -d '/' -f3`    #change mirror_url to host

   

            local speed=$(get_ping_speed $mirror_host)

   

            if [ "$speed" != "" ]; then

                echo "Time is $speed"

                echo "$mirror $speed" >> $MIRRORS_SPEED_FILE

            else

                echo "Connected failed."

            fi

        fi

    done

}

function get_fast_mirror()

{

    sort -k 2 -n -o $MIRRORS_SPEED_FILE $MIRRORS_SPEED_FILE

    local fast_mirror=`head -n 1 $MIRRORS_SPEED_FILE | cut -d ' ' -f1`

    echo $fast_mirror

}

function update_sources()

{

    local COMP="main"

    local mirror="$1"

    local tmp=$(mktemp)

    echo "deb $mirror $VERSION $COMP" >> $tmp

    sudo mv "$tmp" /etc/apt/sources.list.d/yoyo-os.list

    echo -e "Your sources has been updated.n";

}

echo -e "nTesting the network connection.nPlease wait...   c"

if [ "$(get_ping_speed $TEST_NETCONNECT_HOST)" == "" ]; then

    echo -e "Network is bad.nPlease check your network."; exit 1

else

    echo -e "Network is good.n"

    mkdir -p /etc/yoyo-apt/

    get_mirror_list

    test -f $SOURCES_MIRRORS_FILE

    if [ "$?" != "0" ]; then 

        echo -e "$SOURCES_MIRRORS_FILE is not exist.n"; exit 2

    else

        test_mirror_speed

        fast_mirror=$(get_fast_mirror)

        if [ "$fast_mirror" == "" ]; then

            echo -e "Can't find the fastest software sources. Please check your $SOURCES_MIRRORS_FILEn"

            exit 0

        fi

        update_sources $fast_mirror

    fi

fi

exit 0
