#!/usr/bin/env bash
# plik receptury: load_mp3
# Skrypt zapełnia odtwarzacz MP3 maksymalną liczbą utworów.
# Założenie: odtwarzacz MP3 jest zamontowany w katalogu /media/mp3
#

#
# wyznaczenie rozmiaru pliku
#
function FILESIZE ()
{
   FN=${1:-/dev/null}
   if [[ -e $FN ]]
   then
       # FZ=$(ls -s $FN | cut -d ' ' -f 1)
       set -- $(ls -s "$FN")
       FZ=$1
   fi
}

#
# obliczenie ilości wolnego miejsca w pamięci odtwarzacza MP3
#
function FREESPACE
{
   # FREE=$(df /media/mp3 | awk '/^\/dev/ {print $4}')
   set -- $(df /media/mp3 | grep '^/dev/')
   FREE=$4
}

# odjęcie (przekazanego) rozmiaru pliku od (globalnej) wartości wolnego miejsca
function REDUCE ()
(( FREE-=${1:-0}))

#
# główna część skryptu
#
let SUM=0
let COUNT=0
export FZ
export FREE
FREESPACE
find . -name '*.mp3' -print | \
(while read PATHNM
do
   FILESIZE "$PATHNM"
   if ((FZ <= FREE))
   then
       echo zapisywanie $PATHNM
       cp "$PATHNM" /media/mp3
       if (( $? == 0 ))
       then
           let SUM+=FZ
           let COUNT++
           REDUCE $FZ
       else
           echo "błąd kopiowania pliku $PATHNM do katalogu /media/mp3"
           rm -f /media/mp3/$(basename "$PATHNM")
           # ponowne obliczenie - nie wiadomo, jaka część zadania jest wykonana
           FREESPACE
       fi
       # czy można kontynuować?
       if (( FREE <= 0 ))
       then
           break
       fi
   else
       echo pominięcie $PATHNM
   fi
done
printf "%d utworów (%d bloków)"  $COUNT $SUM
printf " zostało zapisanych w katalogu /media/mp3 (%d bloków wolnych)\n" $FREE
)
# koniec skryptu
