#!/bin/bash

# Skript zum Erzeugen einer Meta-Verzeichnisstruktur aus symbolischen Links
# Anlage von Genre-Verzeichnissen in denen Audio-Quellen verlinkt werden
# Der Aufruf kann zyklisch mit cron oder diskontinuierlich erfolgen

IFS=$'\t\n'

### Pfad zum Konfigurationsverzeichnis: ###

Config=~/.scripts/raise-genres/conf

###########################################

if [ -f "${Config}/$1" ]; then
    source "${Config}/$1"
else
    echo "Verwendung: raise-genre.sh ARGUMENT"
    echo "ARGUMENT kann sein: $( ls -x ${Config} )"
    exit 1
fi

### Leeres Genre-Verzeichnis bereitstellen: ###

if [ -d "$MediaHome" ]; then
    cd "$MediaHome"
else
    echo "Fehler: Basisverzeichnis ${MediaHome} existiert nicht!"
    exit 1
fi

if [ ! "$append" = "ja" ]; then
  if [ ! -e "$GenreVerz" ]; then
    mkdir $GenreVerz
  elif [ -d "$GenreVerz" ]; then
    if [ "$(ls ${GenreVerz})" ]; then
        rm -r ${GenreVerz}/*
        rm ${GenreVerz}/.* 2> /dev/null
    fi
  else
    echo "Fehler: ${GenreVerz} ist kein Verzeichnis!"
    exit 1
  fi

### Genres anlegen: ###

  if [ -e "${Bilder}/${GenreVerz}.jpg" ]; then
    cp "${Bilder}/${GenreVerz}.jpg" "${GenreVerz}/folder.jpg"
  fi
  z=1
  for gen in ${Genre[@]}; do
    mkdir "${GenreVerz}/${z} ${gen}"
    if [ -e "${Bilder}/${gen}.jpg" ]; then
        cp "${Bilder}/${gen}.jpg" "${GenreVerz}/${z} ${gen}/folder.jpg"
    fi
    ((z+=1))
  done
else
  if [ ! -d "${GenreVerz}" ] || [ ! "$(ls ${GenreVerz})" ]; then
    echo "Fehler: Keine Verzeichnisse zum Hinzufügen gefunden!"
    exit 1
  fi
fi

### Verzeichnisse ein- oder ausschließen: ###

if [ "${ExcludeString}" ]; then
    PfadListe=(`ls ${TagPfad} | grep -v -E "${ExcludeString}"`)
elif [ "${IncludeString}" ]; then
    PfadListe=(`ls ${TagPfad} | grep -E "${IncludeString}"`)
else
    PfadListe=(`ls ${TagPfad}`)
fi

### Quellen in Genres verlinken: ###

Ct=1
for Pfad in ${PfadListe[@]}; do
    TitelPfad=${Pfad: 0: -${#TagName}}
    Titel=`basename ${TitelPfad}`
    TopPfad=${TitelPfad: 0: -$(( ${#Titel}+1 )) }
    Klammer=`expr "${Titel}" : ".*\(\ \[.*\]\)"`
    if [ "$Klammer" ]; then
        Titel=${Titel: 0: -${#Klammer}}
    fi
    Jahr=''
    Komma=''
    Top=''
    if [ "$CutJahrString" ]; then
        Jahr="${Titel: 0: 4}"
        Titel=`expr "${Titel}" : "${CutJahrString}"`
        Komma=", "
    fi
    if [ "$verwendeTopVerz" = "ja" ]; then
        Top=`basename ${TopPfad}`
        if [ "$holeTopTop" = "ja" ]; then
            Top=`basename ${TopPfad: 0: -$(( ${#Top}+1 )) }`
        fi
        Top="${Komma}${Top}"
    fi
    if [ "$verwendeTopVerz" = "ja" ] || [ "$CutJahrString" ]; then
        if [ "$reverse" = "ja" ] && [ "$Top" ]; then
            if [ "$TitelExString" ] && [[ "$Titel" =~ $TitelExString ]]; then
                Titel="${Top}"
            else
                Titel="${Top} (${Jahr}${Titel})"
            fi
        else
            Titel="${Titel} (${Jahr}${Top})"
        fi
    fi
    for Zeile in $( cat "$Pfad" ); do
        ZeilePfad=''
        for Verz in $( ls ${GenreVerz} ); do
            if [[ "$Verz" =~ ^[0-9]{1,3}\ ${Zeile}$ ]]; then
                ZeilePfad=${GenreVerz}/${Verz}
            fi
        done
        if [ "$ZeilePfad" ] && [ ! -e "${ZeilePfad}/${Titel}" ]; then
            ln -s "../../${TitelPfad}" "${ZeilePfad}/${Titel}"
            echo "$Ct ${Titel} --> ${Zeile}"
            if [ "$PlaylistString" ]; then
                ZeileVerz=$(basename $ZeilePfad)
                ls -d "${ZeilePfad}"/"${Titel}"/*.* | grep -E "$PlaylistString" >> ${GenreVerz}/.${ZeileVerz}
            fi
        fi
    done
    ((Ct+=1))
done
exit 0

