#!/bin/bash

abcnews () {
# Kuvaus: Tallentaa 5 minuuttia Australian radion uutisvirtaa. Voit ajastaa tämän aikataulu.sh-skriptillä.
clear
echo "Keskeytä äänitys: CTRL+C"
nyt=$(date +%F_%H-%M)
cvlc "http://www.abc.net.au/res/streaming/audio/mp3/news_radio.pls" --sout file/mp3:/home/$USER/Radio/Puhe/ABCnews_$nyt.mp3 \
--run-time=300 --stop-time=300 vlc://quit
echo "ABCnews"_$nyt >> ~/Radio/Arkisto/radioloki.txt
}

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 -o ~/Radio/Puhe/BBCnews_$nyt "${addr}"
ffmpeg -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
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
}

linuxheadlines () {
# Kuvaus: Linux and open source headlines every Monday, Wednesday, & Friday, in under 3 minutes.
nyt=$(date +%F_%H-%M)
wget -O ~/Radio/Puhe/Linuxheadlines_$nyt.mp3 `curl -s https://feeds.fireside.fm/linuxheadlines/rss | grep enclosure | sed -n 's/.*url="\([^"]*\)".*/\1/p' | head -1`
echo "Linuxheadlines_"$nyt >> ~/Radio/Arkisto/radioloki.txt
}

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
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 -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)
yle-dl -o ~/Radio/Puhe/Ylepsavo_$nyt.mp3 https://areena.yle.fi/1-4479312 --latestepisode
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`
touch ~/Radio/Puhe/YLE_Radio_Suomi_$nyt.mp3 # Tällä korjataan ladatun tiedoston aikaleima.
echo "YLE_Radio_Suomi"_$nyt >> ~/Radio/Arkisto/radioloki.txt
}


teesoittolista () {
  # set -x
  echo "${Soittolistaohje}"
  Hakujenlkm=0
  Lopetusvalinta=alkuehto
  until [ "${Lopetusvalinta}" = "start" ]
  do
      echo "Kirjoita hakusana, jolla soittolista tehdään. 'start' aloittaa listan teon."
      read Lopetusvalinta
      if [ "${Lopetusvalinta}" != "start" ]
      then
          Haettavat[$Hakujenlkm]="${Lopetusvalinta}"
          ((Hakujenlkm++))
      fi
  done

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

  Musiikkikansio="/home/$USER/Musiikki/"
  Soittolista="${Haettavatsanat}.m3u"

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

  for i in "${Haettavat[@]}"
  do
    Hakusana="${i}"
    for b in "$(find "${Musiikkikansio}" -type f -name "*.mp3" -print | grep -i "${Hakusana}")"
    do
      echo "${b}" >> "${Soittolista}"
    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
    Ohjausohje="Musiikin soittolista on ${Soittolista}"
    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 -g 2 "${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 ABCnews - äänitä Australian radion uutisvirtaa oletuksena 5 minuutin ajan.
2 ABCpm - lataa ABC:n ajankohtaisohjelma PM.
3 BBC4today - lataa osa BBC:n ajankohtaisohjelmasta Today.
4 BBCnews - lataa BBC:n ulkomaanpalvelun uutiskatsaus.
5 Deutschlandfunk - lataaa uutiskatsaus Saksasta saksaksi.
6 Linuxheadlines - lataa uusia Linux uutisia (ma, ke, pe).
7 NPR - lataa yhdysvaltalaisen julkisen palvelun radion NPR uutiskatsaus.
8 Sverigesradio - lataa Ruotsin yleisradion uutiskatsaus.
9 Ylepsavo - lataa Yleiradion uutisia Pohjois-Savosta.
10 Yleradiosuomi - lataa Yleisradion uutiskatsaus.
11 Kuunte funkRadiota - kuuntele musiikkia soittolistalta ja lataamiasi uutisia.
12 Sulje funkRadio - lopeta ohjelman toiminta.
13 Tee uusi soittolista - tee hakusanan perusteella soittolista.
end

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

  case "$Valinta" in
  "1")
      echo "Tallenna muutama minuutti ABCNewsin ohjelmavirtaa."
      abcnews
      ;;
  "2")
      echo "Ladataan ABC:n ajankohtaisohjelma PM."
      abcpm
      ;;
  "3")
      echo "Ladataan osa BBC Radio 4:n ajankohtaisohjelmaa Today"
      bbc4today
      ;;
  "4")
      echo "Ladataan BBC:n ulkomaanpalvelun uutiskatsaus."
      bbcnews
      ;;
  "5")
      echo "Ladataan saksankielinen uutiskatsaus Deutschlandfunkista."
      deutschlandfunk
      ;;
  "6")
      echo "Uusia Linux-uutisia joka maanantai, keskiviikko ja perjantai."
      linuxheadlines
      ;;
  "7")
      echo "Ladataan yhdysvaltalaisen julkisen palvelun radion NPR:n uutiset."
      npr
      ;;
  "8")
      echo "Ladataan Ruotsin yleisradion SR:n uutiskatsaus."
      sverigesradio
      ;;
  "9")
      echo "Ladataan Pohjois-Savon uutiset Yleisradiosta."
      ylepsavo
      ;;
  "10")
      echo "Ladataan yleisradion uutiskatsaus."
      yleradiosuomi
      ;;
  "11")
      echo "Kuuntele lataamiasi uutisia ja musiikkia."
      soitetaan
      ;;
  "12")
      echo "Suljetaan funkRadio!"
      exit
      ;;
  "13")
      echo "Tehdään uusi soittolista"
      teesoittolista
      ;;
  *) echo "Valitse toimiva vaihtoehto!"
      ;;
  esac
done
}

# set -x

# Ohjelman suoritus alkaa tästä.
clear

echo "Käynnistä funkRadio painalla Enter. Muu merkki lopettaa."
read Avausvalinta
if [ "$Avausvalinta" != "" ]
then
    exit
else
    cd $(dirname $0) # siirry tämän skriptin sisältävään kansioon
    Ohjausohje="Lataa ensin haluamasi uutiskatsaukset ja valitse sitten kohta 'kuuntele funkRadiota'."
fi

clear
echo "Aluksi valitaan vanha musiikin soittolista tai tehdään uusi."
declare -a Matriisi
for Valitaansoittolista in $(find . -maxdepth 1 -name "*.m3u")
do
  Matriisi=("${Matriisi[@]}" "$Valitaansoittolista")
done
# if [[ $Soittolista != "" ]]; then
#     soitetaan
# fi

if [ ${#Matriisi[@]} -eq 0 ]
then
  teesoittolista
else
  clear
  echo "Soittolistoja on " "${#Matriisi[@]}" " kpl."
  PS3='Valitse soittolista numerolla. Valinnalla 0 pääset lopettamaan tai tekemään uuden.'
  select Soittolista in "${Matriisi[@]}"
  do
    if [[ $REPLY == "0" ]]; then
        echo 'Ei valittu soittolistaa'
        echo "Tee uusi soittolista valitsemalla Enter. Muu merkki lopettaa."
        read Soittolistavalinta
        if [ "$Soittolistavalinta" = "" ]
        then
            teesoittolista
        else
            exit
        fi
    else
        break
    fi
  done
  echo "Soittolistaksi valittiin" "$REPLY" "${Soittolista}"
  Ohjausohje="Soittolistana on ${Soittolista}"
  ohjaus
fi

# ~/Radio/funkRadio.sh
