#!/usr/bin/env bash declare -r \ DOCDIR=%DOCDIR% \ LIBDIR=%LIBDIR% \ SHAREDIR=%SHAREDIR% declare -r \ exampleconf=$DOCDIR/example.cfg \ schema=$SHAREDIR/schema.sql \ \ oldIFS="$IFS" ## Define exit codes source "$SHAREDIR"/errorcodes # config structures declare -A \ destinationchannels \ destinationfat32compat \ destinationcopymime \ destinationformat \ destinationfrequency \ destinationid \ destinationloss \ destinationmaxbps \ destinationnormalize \ destinationpath \ destinationquality \ destinationrename \ destinationnoresample \ destinationrenamepath \ destinationskipmime \ || { echo "Check your Bash version. You need >= 4.0" >&2 exit $EBASHVERS } LC_ALL=C shopt -s extglob for function in "$LIBDIR"/*/* do source "$function" done if ! [[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/AtOM/atom.cfg" ]] \ && [[ -f "$HOME/.atom/atom.cfg" ]] then echo "Configuration found in legacy location $HOME/.atom/atom.cfg."\ "Migrating configuration and data to XDG standard" xdgMigrate fi cffile="${XDG_CONFIG_HOME:-$HOME/.config}/AtOM/atom.cfg" while getopts 'fm:o:p:*:uD' opt do case $opt in f) mimetypes+=("audio/x-flac") bitrates+=("") ;; m) mimetypes+=("audio/mpeg") bitrates+=("$OPTARG") ;; o) mimetypes+=("application/ogg vorbis") bitrates+=("$OPTARG") ;; p) mimetypes+=("application/ogg opus") bitrates+=("$OPTARG") ;; \*) mimetypes+=("*") bitrates+=("$OPTARG") ;; u) update=1 ;; D) (( debug++ )) ;; esac done getConfig sanityCheck openDatabase if (( update )) then getFiles updateMimes updateTags fi echo ' SELECT DISTINCT mime_type_actions.mime_text, tags.bitrate, source_files.filename FROM source_files INNER JOIN tags ON source_files.id=tags.source_file INNER JOIN mime_type_actions ON mime_type_actions.id=source_files.mime_type WHERE mime_type_actions.action=1 AND ( ' >&3 for indice in ${!mimetypes[@]} do (( notfirst )) && echo OR >&3 case ${mimetypes[indice]} in 'audio/x-flac') echo 'mime_type_actions.mime_text="audio/x-flac"'>&3 ;; '*') echo '( ( NOT mime_type_actions.mime_text="audio/x-flac" AND NOT mime_type_actions.mime_text="audio/mpeg" AND NOT mime_type_actions.mime_text="application/ogg vorbis" AND NOT mime_type_actions.mime_text="application/ogg opus" ) AND tags.bitrate < '${bitrates[indice]}' )' >&3 ;; *) echo '( mime_type_actions.mime_text="'"${mimetypes[indice]}"'" AND tags.bitrate < '${bitrates[indice]}' )' >&3 ;; esac notfirst=1 done echo ') ORDER BY bitrate;' >&3 echo 'SELECT "AtOM:NoMoreFiles";' >&3 read -u4 -d $'\0' line until [[ $line == AtOM:NoMoreFiles ]] do echo "${line//::AtOM:SQL:Sep::/$'\t'}" read -u4 -d $'\0' line done closeDatabase