#!/bin/bash

abcnews () {
# Kuvaus: Tallentaa 6 minuuttia Australian radion uutisvirtaa seuraavasta tasatunnista alkaen.
clear
echo -e "\n" "Abc-äänitys ajastettu. Tee lisää valintoja tai soita funkRadiota."
(
nytt=$(date +%H) ; nyth=$(date -d "$nytt + 1 hour" +'%H:%M') ; nytm=$(date +%H%M) ; SEC1=$(date +%s -d "${nytm}") ; SEC2=$(date +%s -d "${nyth}") ; DIFFSEC=$(( SEC2 - SEC1 - 30 )) ; sleep "$DIFFSEC"
nyt=$(date +%F_%H-%M)
cvlc -q http://live-radio02.mediahubaustralia.com/PBW/mp3/ --sout file/mp3:/tmp/ABCnews_$nyt.mp3 \
--run-time=360 vlc://quit &
wait
mv /tmp/ABCnews_$nyt.mp3 /home/$USER/Radio/Puhe/
echo "ABC-uutinen siirretty Puhe-kansioon."
)
}

abcpm () {
# Kuvaus: Maailmanluokan ajankohtaisohjelma Australista. Voidaan ladata arkipäivisin yleensä klo 11.30 jälkeen.
nyt=$(date +%F_%H-%M)
wget -O ~/Radio/Puhe/ABCpm_$nyt.mp3 `curl -s https://www.abc.net.au/radio/programs/pm/feed/8863592/podcast.xml | grep -o 'https*://[^"]*mp3' | head -1`
echo "ABCpm"_$nyt >> ~/Radio/Arkisto/radioloki.txt
}

bbc4today () {
# Kuvaus: Osa BBC Radio 4:n Today-ohjelmasta. Sisältää usein lippulaivaohjelman talousosuuden. Ladattavissa arkisin yleensä klo 10:n jälkeen.
nyt=$(date +%F_%H-%M)
wget -O ~/Radio/Puhe/BBC4today_$nyt.mp3 `curl -s https://podcasts.files.bbci.co.uk/p02nrtvg.rss | grep -o 'https*://[^"]*mp3' | head -1`
echo "BBC4today"_$nyt >> ~/Radio/Arkisto/radioloki.txt
}

bbcnews () {
# Kuvaus: BBC:n ulkomaanpalvelun kansainvälinen uutiskatsaus.
(
nyt=$(date +%F_%H-%M)
addr=$(wget -q -O - https://www.bbc.co.uk/programmes/p002vsmz/episodes/player | grep https://www.bbc.co.uk/sounds/play | grep -o -P '(?<=href=").*(?=")' | head -1)
youtube-dl -q --no-warnings -o ~/Radio/Puhe/BBCnews_$nyt "${addr}"
ffmpeg -nostats -loglevel 0 -i ~/Radio/Puhe/BBCnews_$nyt -acodec libmp3lame -ac 2 -ab 128k -ar 48000 ~/Radio/Puhe/BBCnews_$nyt.mp3
echo "BBCnews_"$nyt >> ~/Radio/Arkisto/radioloki.txt
mv ~/Radio/Puhe/BBCnews_$nyt ~/Radio/Arkisto/
)
# Kiitokset Eesaurukselle neuvosta:
# https://forum.ubuntu-fi.org/index.php?topic=55389.msg422784#msg422784
}

deutschlandfunk () {
# Kuvaus: Uutisia saksaksi lähinnä Saksasta.
nyt=$(date +%F_%H-%M)
wget -O ~/Radio/Puhe/Deutschlandfunk_$nyt.mp3 http://ondemand-mp3.dradio.de/file/dradio/nachrichten/nachrichten.mp3 > /dev/null 2>&1
echo "Deutschlandfunk"_$nyt >> ~/Radio/Arkisto/radioloki.txt

# mp3-tiedoston osoitteen saa tiedostosta https://de1.api.radio-browser.info/pls/url/9bce1899-bc6e-11e9-acb2-52543be04c81
}

npr () {
# Kuvaus: Yhdysvaltalaisen julkisen palvelun radion NPR:n uutiset tulevat tasatunnein.
nyt=$(date +%F_%H-%M)
cvlc "http://pd.npr.org/anon.npr-mp3/npr/news/newscast.mp3" --sout file/mp3:/home/$USER/Radio/Puhe/Npr_$nyt.mp3 --run-time=300 --stop-time=300 vlc://quit  > /dev/null 2>&1
echo "Npr"_$nyt >> ~/Radio/Arkisto/radioloki.txt
}

sverigesradio () {
# Kuvaus: Uutisia ja ajankohtaiskatsauksia Ruotsista.
nyt=$(date +%F_%H-%M)
rimpsu="$(wget -q -O - https://api.sr.se/api/rss/pod/3795 | grep enclosure | head -1)"
osoite="$(echo "$rimpsu" | grep -oP '(?<=url=").*(?=" length)')"
wget -q -O ~/Radio/Puhe/Sverigesradio_$nyt.mp3 "${osoite}"
echo "Sverigesradio"_$nyt >> ~/Radio/Arkisto/radioloki.txt
}

ylepsavo () {
# Kuvaus: Uutisia Savosta lähinnä suomeksi.
nyt=$(date +%F_%H-%M)
wget -O ~/Radio/Puhe/Ylepsavo_$nyt.mp3 `curl -s https://feeds.yle.fi/areena/v1/series/1-4479312.rss? | grep -o 'https*://[^"]*mp3' | head -1` > /dev/null 2>&1
echo "YLE_Pohjois-Savo"_$nyt >> ~/Radio/Arkisto/radioloki.txt
}

yleradiosuomi () {
# Kuvaus: Yleisradion uutiskatsaus.
nyt=$(date +%F_%H-%M)
wget -O ~/Radio/Puhe/YLE_Radio_Suomi_$nyt.mp3 `curl -s https://feeds.yle.fi/areena/v1/series/1-1440981.rss? | grep -o 'https*://[^"]*mp3' | head -1` > /dev/null 2>&1
touch ~/Radio/Puhe/YLE_Radio_Suomi_$nyt.mp3 # Tällä korjataan ladatun tiedoston aikaleima.
echo "YLE_Radio_Suomi"_$nyt >> ~/Radio/Arkisto/radioloki.txt
}


teesoittolista () {
cd $(dirname $0) # siirry tämän skriptin sisältävään kansioon
Musiikkikansio="/home/$USER/Musiikki/"
echo "Enter: mukaan vain alle 10 minuutin biisit. Muu merkki: kestolla ei väliä."
read Kestonvalinta
if [ "$Kestonvalinta" != "" ]
then
    Kestorajaus="Ei"
else
    Kestorajaus="Joo"
fi

echo "Enter: mukaan vain biisit jotka hankittu tietyn ajankohdan jälkeen. Muu merkki: ei tätä rajoitusta."
read Aikarajoitus
if [ "$Aikarajoitus" = "" ] ; then
    echo "Monenko päivän jaksolta hankitut/muutetut musiikkitiedostot otetaan mukaan? Vastaa päivien lukumäärällä."
    read HankinnastaPaivia
    Hankintaaika=$(date --date="$HankinnastaPaivia days ago" +"%Y%m%d")
    Soittolista="Biisitlahtien_${Hankintaaika}Alle10min.m3u"
    # echo ${Soittolista}

    if [ -e "${Soittolista}" ] ; then
      echo "" > "${Soittolista}"
    fi
    # find /home/$USER/Musiikki -newermt "${hankintaaika}" -print -type f -iname "*.mp3" > "${Soittolista}"
    # for biisi in $(find "${Musiikkikansio}" -type f -name "*.mp3" -print | grep -i "${Hakusana}")
    # for biisi in $(find "${Musiikkikansio}" -type f -name "*.mp3" -newermt "${Hankintaaika}" -print)
    IFS=$'\n'
    for biisi in $(find "${Musiikkikansio}" -newermt "${Hankintaaika}" -type f -iname "*.mp3" -print)
    do
            Kesto=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "${biisi}")
            if (( ${Kesto%.*} <= 600 ))
            then
                echo "${biisi}" >> "${Soittolista}"
            fi
    done
    Soittolistanpituus=$(wc -l "${Soittolista}" | awk '{ print $1 }')
    Ohjausohje="Musiikin soittolista on ${Soittolista} - siinä on $Soittolistanpituus biisiä."
    ohjaus
fi
  Hakujenlkm=0
  Lopetusvalinta=alkuehto
  until [ "${Lopetusvalinta}" = "start" ]
  do
      echo "Anna musiikin hakuun hakusana. Sana 'start' käynnistää soittolistan teon."
      read Lopetusvalinta
      if [ "${Lopetusvalinta}" != "start" ]
      then
          Haettavat[$Hakujenlkm]="${Lopetusvalinta}"
          ((Hakujenlkm++))
      fi
  done

  echo "Hakusanojen lukumäärä:" $Hakujenlkm
  Haettavatsanat="$(printf "%s" "${Haettavat[@]}")"
  echo "Soittolista tehdään seuraavien sanojen perusteella:" "${Haettavatsanat}"
  Soittolista="${Haettavatsanat}.m3u"

  if [ -e "${Soittolista}" ] ; then
    echo "" > "${Soittolista}"
  fi

  for i in "${Haettavat[@]}"
  do
    Hakusana="${i}"
    IFS=$'\n'
    for biisi in $(find "${Musiikkikansio}" -type f -name "*.mp3" -print | grep -i "${Hakusana}")
    do
        if [ "$Kestorajaus" = "Joo" ]
        then
            Kesto=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "${biisi}")
            # echo "Kesto: ${Kesto} ${biisi}"
            # exit
            if (( ${Kesto%.*} <= 600 ))
            then
                echo "${biisi}" >> "${Soittolista}"
            fi
        else
            echo "${biisi}" >> "${Soittolista}"
        fi
    done
  done

  Soittolistanpituus=$(wc -l "${Soittolista}" | awk '{ print $1 }')
  echo "Soittolistassa ${Soittolista} on $Soittolistanpituus riviä."
  if [ $Soittolistanpituus -lt 5 ]
  then
    Soittolistaohje="Soittolistassa ${Soittolista} on alle 5 riviä. Tehdään uusi!"
    mv "${Soittolista}" ~/Radio/Arkisto/
    teesoittolista
  else
    if [ "$Kestorajaus" = "Joo" ]
    then
        filename=$(basename "$Soittolista") ; fname="${filename%.*}" ; mv "${Soittolista}" "${fname}_alle10min.m3u" ; Soittolista="${fname}_alle10min.m3u"
    fi
    Ohjausohje="Musiikin soittolista on ${Soittolista} - siinä on $Soittolistanpituus biisiä."
    ohjaus
  fi
}

# Funktio *soitetaan' soittaa ensin musiikkikappaleen ja sitten vanhimman uutiskatsauksen.
# Komennolla Ctrl+C voi vaihtaa musiikista uutiseen ja uutisesta musiikkiin.

soitetaan () {
  cd /home/$USER/Radio/
  clear
  echo "Aloitetaan musiikin soitto"
  # soitettava=$(sort -R ${Soittolista} | head -n 1)
  soitettava="$(shuf -n 1 ${Soittolista})" # kun shuf palaa Ubuntuun
  Tiedosto=$(basename "${soitettava}")
  echo "Soitetaan" "${Tiedosto}"
  echo "${Tiedosto}" >> ~/Radio/Arkisto/radioloki.txt
  mpg123 -C "${soitettava}"

  cd /home/$USER/Radio/Puhe/
  uutinen=$(find "/home/$USER/Radio/Puhe/" -type f -printf '%T+ %f\n' | sort | head -n 1 | cut -d" " -f2)
  if [[ "${uutinen}" != "" ]]
  then
    clear
    echo "Aloitetaan uutisen soitto"
    echo "Soitetaan:" "${uutinen}"
    # mp3gain -r -k -p "${uutinen}"
    mp3gain -g 2 -p "${uutinen}"
    mpg123 -C "${uutinen}"
    mv "${uutinen}" /home/$USER/Radio/Arkisto/
    sleep 1
    soitetaan
  else
    echo "Uutisia ei ole."
    soitetaan
  fi
}

ohjaus () {
while true
do
clear
echo "${Ohjausohje}"
cat <<- end
1 Ladataan kokoelma varsinaisia uutisia sekä aloitetaan niiden ja musiikin soitto.
2 ABCnews - tallentaa Australian radiosta seuraavan tasatunnin uutisia 6 minuutin ajan.
3 BBCnews - lataa BBC:n ulkomaanpalvelun uutiskatsaus.
4 NPR - lataa yhdysvaltalaisen julkisen palvelun radion NPR uutiskatsaus.
5 Deutschlandfunk - lataaa uutiskatsaus Saksasta saksaksi.
6 Sverigesradio - lataa Ruotsin yleisradion uutiskatsaus.
7 Yleradiosuomi - lataa Yleisradion uutiskatsaus.
8 Ylepsavo - lataa Yleiradion uutisia Pohjois-Savosta.
9 BBC4today - lataa osa BBC:n ajankohtaisohjelmasta Today.
10 ABCpm - lataa ABC:n ajankohtaisohjelma PM.
11 Tee uusi soittolista - hae mielimusiikkia hakusanojen perusteella.
12 Kuunte funkRadiota - kuuntele musiikkia soittolistalta ja lataamiasi uutisia.
13 Sulje funkRadio - lopeta ohjelman toiminta.
end

  echo -n "Mikä on valintasi? Valitse jokin listatuista numeroista."
  read Valinta

  case "$Valinta" in
  "1")
      echo "Soitetaan musiikkia ja taustalla ladataan kokoelma uutiskatsauksia."
      ( deutschlandfunk ) &
      ( npr ) &
      ( sverigesradio ) &
      ( ylepsavo ) &
      ( yleradiosuomi ) &
      ( abcnews ) &
      ( bbcnews ) &
      soitetaan
      ;;
  "2")
      echo "Ajastetaan seuraavien ABC:n uutisten tallennus. Odota hetki ennen seuraavaa valintaasi."
      abcnews
      ;;
  "3")
      echo "Tallennetaan viimeisimmät BBC:n uutiset. Odota hetki."
      bbcnews
      ;;
  "4")
      echo "Ladataan yhdysvaltalaisen julkisen palvelun radion NPR:n uutiset. Odota hetki."
      npr
      ;;
  "5")
      echo "Ladataan saksankielinen uutiskatsaus Deutschlandfunkista. Odota hetki."
      deutschlandfunk
      ;;
  "6")
      echo "Ladataan Ruotsin yleisradion SR:n uutiskatsaus. Odota hetki."
      sverigesradio
      ;;
  "7")
      echo "Ladataan yleisradion uutiskatsaus. Odota hetki."
      yleradiosuomi
      ;;
  "8")
      echo "Ladataan Pohjois-Savon uutiset Yleisradiosta. Odota hetki."
      ylepsavo
      ;;
  "9")
      echo "Ladataan osa BBC Radio 4:n ajankohtaisohjelmaa Today. Odota hetki."
      bbc4today
      ;;
  "10")
      echo "Ladataan ABC:n ajankohtaisohjelma PM (tarjolla arkipäivisin). Odota hetki."
      abcpm
      ;;
  "11")
      echo "Tehdään uusi soittolista"
      teesoittolista
      ;;
  "12")
      echo "Kuunnellaan lataamiasi uutisia ja musiikkia."
      soitetaan
      ;;
  "13")
      echo "funkRadio suljettiin!"
      exit
      ;;
  *) echo "Valitse toimiva vaihtoehto!"
      ;;
  esac
done
}

# set -x

# Ohjelman suoritus alkaa tästä.
clear

echo "Käynnistä funkRadio painalla Enter. Muu merkki lopettaa ohjelman toiminnan."
read Avausvalinta
if [ "$Avausvalinta" != "" ]
then
    exit
else
    cd $(dirname $0) # siirrytään tämän skriptin sisältävään kansioon
    Uutistenlkm=$(find ~/Radio/Puhe/ -type f -name "*.mp3" | wc -l)
    if [ $Uutistenlkm -gt 0 ]
    then
    echo "Uutisia valmiina $Uutistenlkm kpl. Jos valitset Enter, ne poistetaan."
    read Tyhjennysvalinta
    if [ "$Tyhjennysvalinta" = "" ]
    then
        find ~/Radio/Puhe/ -type f -name "*.mp3" -exec mv {} ~/Radio/Arkisto/ \;
        echo "Äänitiedostot siirrettiin Arkistoon."
    else
        echo "Uutiskatsauksia valmiina $Uutistenlkm kpl."
    fi
    fi
fi

clear
declare -a Matriisi
for Valitaansoittolista in $(find . -maxdepth 1 -name "*.m3u")
do
  Matriisi=("${Matriisi[@]}" "$Valitaansoittolista")
done


if [ ${#Matriisi[@]} -eq 0 ]
then
  teesoittolista
else
  clear
  echo "Soittolistoja on " "${#Matriisi[@]}" " kpl."
  PS3='Valitse soittolista numerolla. Valinnalla 0 pääset tekemään uuden.'
  select Soittolista in "${Matriisi[@]}"
  do
    if [[ $REPLY == "0" ]]
    then
        teesoittolista
    else
        break
    fi
  done
  echo "Soittolistaksi valittiin" "$REPLY" "${Soittolista}"
  Soittolistanpituus=$(wc -l "${Soittolista}" | awk '{ print $1 }')
  Ohjausohje="Musiikin soittolista on ${Soittolista} - siinä on $Soittolistanpituus biisiä."
  ohjaus
fi

# ~/Radio/funkRadio_.sh
