Compare commits
1 Commits
27-script-
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7a359ad2d6 |
14
README.md
14
README.md
@ -20,13 +20,13 @@ in the same format, it will want a constant sample-rate and bitrate. You can
|
||||
have AtOM do that!
|
||||
|
||||
Here's what I have for my tests:
|
||||
| Directory | Format | Sample rate | Bitrate | Channels | FAT32 compat. | ASCII | Size |
|
||||
| --------- | ------ | ----------- | --------- | -------- | ------------- | ----- | ---- |
|
||||
| 0-Full | Mixed | Mixed | Mixed | Mixed | No | No | 568G |
|
||||
| 1-High | Vorbis | Same | Quality 5 | Same | Yes | No | 143G |
|
||||
| 2-Medium | Opus | Same | 64 | Same | Yes | No | 60G |
|
||||
| 3-Small | Opus | Same | 32 | Same | Yes | No | 31G |
|
||||
| 4-MP3 | MP3 | 44100 | 128 | 2 | Yes | Yes | 119G |
|
||||
| Directory | Format | Sample rate | Bitrate | Channels | FAT32 compat. | ASCII | Size |
|
||||
| --------- | ------ | ----------- | ------- | -------- | ------------- | ----- | ---- |
|
||||
| 0-Full | Mixed | Mixed | Mixed | Mixed | No | No | 508G |
|
||||
| 1-High | Opus | Same | 128 | Same | Yes | No | 101G |
|
||||
| 2-Medium | Opus | Same | 64 | Same | Yes | No | 59G |
|
||||
| 3-Small | Opus | Same | 32 | Same | Yes | No | 30G |
|
||||
| 4-MP3 | MP3 | 44100 | 128 | 2 | Yes | Yes | 114G |
|
||||
|
||||
|
||||
|
||||
|
||||
162
atom
162
atom
@ -1,17 +1,15 @@
|
||||
#!/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
|
||||
# General config errors [10-19]
|
||||
ELOAD=10
|
||||
EINTERVAL=11
|
||||
ENOCFG=19
|
||||
# Source cofig errors [20-29]
|
||||
# Destination config errors [30-49]
|
||||
EFORMAT=30
|
||||
ECHANNEL=31
|
||||
EFMTINVPARM=49
|
||||
|
||||
# config structures
|
||||
declare -A \
|
||||
@ -38,11 +36,21 @@ declare -A \
|
||||
exit $EBASHVERS
|
||||
}
|
||||
|
||||
declare -r \
|
||||
DOCDIR=%DOCDIR% \
|
||||
LIBDIR=%LIBDIR% \
|
||||
SHAREDIR=%SHAREDIR%
|
||||
declare -r \
|
||||
exampleconf=$DOCDIR/example.cfg \
|
||||
schema=$SHAREDIR/schema.sql \
|
||||
\
|
||||
oldIFS="$IFS"
|
||||
|
||||
LC_ALL=C
|
||||
|
||||
shopt -s extglob
|
||||
|
||||
source "$SHAREDIR"/id3genres
|
||||
source $SHAREDIR/id3genres
|
||||
|
||||
for function in "$LIBDIR"/*/*
|
||||
do
|
||||
@ -117,12 +125,12 @@ do
|
||||
:)
|
||||
echo "-$OPTARG requires an argument"
|
||||
help
|
||||
exit $EINVARG
|
||||
exit 127
|
||||
;;
|
||||
*)
|
||||
echo "Unrecognized option: -$OPTARG"
|
||||
help
|
||||
exit $EINVARG
|
||||
exit 127
|
||||
;;
|
||||
esac
|
||||
done
|
||||
@ -206,13 +214,9 @@ read -u4 removecount
|
||||
until (( ${#removefile[@]} == removecount ))
|
||||
do
|
||||
echo '
|
||||
SELECT destination_files.id,
|
||||
destinations.name,
|
||||
destination_files.filename
|
||||
SELECT id,
|
||||
filename
|
||||
FROM destination_files
|
||||
INNER JOIN destinations
|
||||
ON destination_files.destination_id
|
||||
= destinations.id
|
||||
WHERE source_file_id is NULL
|
||||
LIMIT 500 OFFSET '${#removefile[@]}';
|
||||
|
||||
@ -222,17 +226,13 @@ do
|
||||
read -u4 line
|
||||
until [[ $line == AtOM:NoMoreFiles ]]
|
||||
do
|
||||
removeFileId=${line%%::AtOM:SQL:Sep::*}
|
||||
rest=${line#*::AtOM:SQL:Sep::}
|
||||
removeFileDestName=${line%%::AtOM:SQL:Sep::*}
|
||||
rest=${line#*::AtOM:SQL:Sep::}
|
||||
removefile[$removeFileId]="${destinationpath["$removeFileDestName"]}/${rest%%::AtOM:SQL:Sep::*}"
|
||||
removefile[${line%::AtOM:SQL:Sep::*}]="${line#*::AtOM:SQL:Sep::}"
|
||||
read -u4 line
|
||||
done
|
||||
done
|
||||
|
||||
unset deleted
|
||||
unset removed
|
||||
deleted=0
|
||||
removed=0
|
||||
echo 'BEGIN TRANSACTION;' >&3
|
||||
for id in ${!removefile[@]}
|
||||
do
|
||||
@ -256,9 +256,9 @@ do
|
||||
done
|
||||
echo 'COMMIT;' >&3
|
||||
(( cron )) || echo -n $'\r'
|
||||
echo -n "${deleted+$deleted files deleted${removed:+, }}${removed:+$removed removed from database}"
|
||||
echo -n "Suppressed $deleted files, $removed removed from database"
|
||||
(( cron )) || echo -ne "\033[K"
|
||||
(( deleted || removed )) && echo
|
||||
echo
|
||||
unset removecount deleted removed removefile
|
||||
|
||||
updateTags
|
||||
@ -272,8 +272,7 @@ do
|
||||
Update destination_files last_change 0 \
|
||||
<<<"destination_id = $forcedestid"
|
||||
else
|
||||
echo "Full rebuild of destination $forcedest was requested," \
|
||||
"but it does not exist!" >&2
|
||||
echo "Destination $forcedest does not exist!" >&2
|
||||
fi
|
||||
done
|
||||
|
||||
@ -289,7 +288,6 @@ echo '
|
||||
ascii INTEGER,
|
||||
source_file INTEGER,
|
||||
fileid INTEGER,
|
||||
destdir TEXT,
|
||||
filename TEXT,
|
||||
cmd_arg0 TEXT,
|
||||
cmd_arg1 TEXT,
|
||||
@ -442,7 +440,7 @@ do
|
||||
decodefiles+=("$line::AtOM:SQL:Sep::")
|
||||
read -u4 line
|
||||
done
|
||||
(( cron )) || echo -n $'Creating tasks...\033[K'
|
||||
(( cron )) || echo -n 'Creating tasks... '
|
||||
|
||||
(( textunidecodeneeded )) && ascii
|
||||
|
||||
@ -548,11 +546,8 @@ do
|
||||
tmpfile
|
||||
done
|
||||
echo 'COMMIT;' >&3
|
||||
(( cron )) || echo -n $'\r\033[K'
|
||||
(( count )) \
|
||||
&& echo "Created $count tasks for $filecount files \
|
||||
${togo:+($togo left) } \
|
||||
${copies:+($copies immediate copies)}"
|
||||
(( cron )) || echo -n $'\r'
|
||||
echo "Created ${count:-0} tasks for $filecount files ${togo:+($togo left) }(${copies:-0} immediate copies)"
|
||||
|
||||
# remove perl unicode to ascii coprocess
|
||||
(( textunidecodeneeded )) && eval exec "${toascii[1]}>&-"
|
||||
@ -567,7 +562,7 @@ remaining=$taskcount
|
||||
failed=0
|
||||
echo 'BEGIN TRANSACTION;' >&3
|
||||
committime=$EPOCHSECONDS
|
||||
while (( remaining || ${#workers[@]} ))
|
||||
while (( (remaining || ${#workers[@]}) && ! quit ))
|
||||
do
|
||||
timestamp=$EPOCHSECONDS
|
||||
if (( $timestamp - committime >= 60 ))
|
||||
@ -581,15 +576,16 @@ do
|
||||
then
|
||||
concurrency="$fixed_workers"
|
||||
else
|
||||
if (( timestamp - concurrencychange >= loadinterval ))
|
||||
if [ -z "$quit" ] \
|
||||
&& (( ! pause )) \
|
||||
&& (( timestamp - concurrencychange >= loadinterval ))
|
||||
then
|
||||
if (( concurrency > 1 || allow_zero_running )) \
|
||||
&& (( load > maxload && concurrency ))
|
||||
if (( concurrency > 1 )) \
|
||||
&& (( load > maxload ))
|
||||
then
|
||||
concurrencychange=$timestamp
|
||||
(( --concurrency ))
|
||||
elif (( load < maxload )) \
|
||||
&& (( active > concurrency - 1 ))
|
||||
elif (( load < maxload )) && (( active > concurrency - 1 ))
|
||||
then
|
||||
concurrencychange=$timestamp
|
||||
(( ++concurrency ))
|
||||
@ -598,11 +594,16 @@ do
|
||||
fi
|
||||
checkworkers
|
||||
cleaner
|
||||
master
|
||||
(( pause )) || master
|
||||
if (( ran - failed ))
|
||||
then
|
||||
currenttime=$timestamp
|
||||
(( runtime = currenttime - starttime ))
|
||||
if (( pause ))
|
||||
then
|
||||
(( runtime = pausestart - starttime - pausedtime ))
|
||||
else
|
||||
(( runtime = currenttime - starttime - pausedtime ))
|
||||
fi
|
||||
avgduration=$((
|
||||
( runtime * 1000)
|
||||
/
|
||||
@ -638,7 +639,11 @@ do
|
||||
fmtprogress="T:%${#taskcount}i/%i (F:%i) %3i%%"
|
||||
fmttime='%2id %2ih%02im%02is (A:%4.1fs/task)'
|
||||
eta="ETA:$(
|
||||
printf "%(%c)T" "$(( currenttime + secsremaining ))"
|
||||
date -d "${days:-0} days
|
||||
${hours:-0} hours
|
||||
${minutes:-0} minutes
|
||||
${seconds:-0} seconds" \
|
||||
+'%d/%m %H:%M:%S'
|
||||
)"
|
||||
(( cron )) || printf \
|
||||
"\r$fmtload $fmtworkers $fmtprogress $fmttime $eta\033[K"\
|
||||
@ -655,7 +660,7 @@ do
|
||||
${minutes:-0} \
|
||||
${seconds:-0} \
|
||||
${avgdsec:-0}.${avgdmsec:-0}
|
||||
if ! (( concurrency )) && ! (( cron ))
|
||||
if (( pause ))
|
||||
then
|
||||
if (( active ))
|
||||
then
|
||||
@ -670,25 +675,22 @@ unset count
|
||||
|
||||
endtime=$EPOCHSECONDS
|
||||
|
||||
(( elapsedseconds = endtime - starttime ))
|
||||
(( elapsedseconds = endtime - starttime - pausedtime ))
|
||||
(( days =
|
||||
elapsedseconds
|
||||
/
|
||||
( 24*60*60 )
|
||||
)) || true
|
||||
(( days )) || unset days
|
||||
(( hours =
|
||||
( elapsedseconds - ( days*24*60*60 ) )
|
||||
/
|
||||
( 60*60 )
|
||||
)) || true
|
||||
(( days && hours )) || unset hours
|
||||
(( minutes =
|
||||
( elapsedseconds - ( ( days*24 + hours ) *60*60 ) )
|
||||
/
|
||||
60
|
||||
)) || true
|
||||
(( days && hours && minutes )) || unset minutes
|
||||
(( seconds =
|
||||
elapsedseconds
|
||||
-
|
||||
@ -696,15 +698,10 @@ endtime=$EPOCHSECONDS
|
||||
)) || true
|
||||
|
||||
(( cron )) || echo -n $'\r'
|
||||
(( ran )) \
|
||||
&& echo -n "Ran $ran tasks${failed:+, $failed of which failed,} \
|
||||
in ${days:+$days days,} \
|
||||
${hours:+$hours hours,} \
|
||||
${minutes:+$minutes minutes and} \
|
||||
$seconds seconds."
|
||||
echo -n "Ran ${ran:=0} tasks, $failed of which failed, in $days" \
|
||||
"days, $hours hours, $minutes minutes and $seconds seconds."
|
||||
(( cron )) || echo -en "\033[K"
|
||||
(( ran )) && echo
|
||||
|
||||
echo
|
||||
if (( failed ))
|
||||
then
|
||||
echo $'\nFailed tasks:\n'
|
||||
@ -787,10 +784,17 @@ then
|
||||
echo "${line%%::AtOM:SQL:Sep::*}"
|
||||
line="${line#*::AtOM:SQL:Sep::}"
|
||||
line="${line//::AtOM:SQL:Sep::/ }"
|
||||
echo $'\t'"${line/+( )$/}"$'\n'
|
||||
echo $'\t'"${line/+( )$/}"
|
||||
echo
|
||||
done
|
||||
fi
|
||||
|
||||
if [ -n "$quit" ]
|
||||
then
|
||||
closeDatabase
|
||||
exit
|
||||
fi
|
||||
|
||||
for destination in "${!destinationpath[@]}"
|
||||
do
|
||||
echo '
|
||||
@ -890,9 +894,7 @@ do
|
||||
progressSpin
|
||||
if [[ "$oldfilename" != "$destfilename" ]]
|
||||
then
|
||||
mv \
|
||||
"${destinationpath[$destination]}/$oldfilename" \
|
||||
"${destinationpath[$destination]}/$destfilename"
|
||||
mv "$oldfilename" "$destfilename"
|
||||
(( changedcount++ ))
|
||||
commit=1
|
||||
fi
|
||||
@ -904,7 +906,7 @@ do
|
||||
"${destinationfat32compat["$destination"]}," \
|
||||
" ascii=" \
|
||||
"${destinationascii["$destination"]}" \
|
||||
"WHERE id=$destfileid;" \
|
||||
"WHERE id=$destfileid;" \
|
||||
>&3
|
||||
if (( commit ))
|
||||
then
|
||||
@ -917,10 +919,9 @@ do
|
||||
(( textunidecodeneeded )) && eval exec "${toascii[1]}>&-"
|
||||
echo 'COMMIT;' >&3
|
||||
(( cron )) || echo -n $'\r'
|
||||
(( changedcount )) \
|
||||
&& echo -n "$destination: Renamed $changedcount files"
|
||||
echo -n "$destination: Renamed ${changedcount:-0} files"
|
||||
(( cron )) || echo -en "\033[K"
|
||||
(( changedcount )) && echo
|
||||
echo
|
||||
fi
|
||||
unset count changedcount renamefiles
|
||||
done
|
||||
@ -928,20 +929,16 @@ done
|
||||
copyFiles_action
|
||||
|
||||
echo '
|
||||
SELECT destination_files.id,
|
||||
destination_files.filename,
|
||||
destination_files.old_filename,
|
||||
destinations.name
|
||||
SELECT id,
|
||||
filename,
|
||||
old_filename
|
||||
FROM destination_files
|
||||
INNER JOIN destinations
|
||||
ON destination_files.destination_id
|
||||
= destinations.id
|
||||
WHERE old_filename IS NOT NULL;
|
||||
|
||||
SELECT "AtOM:NoMoreFiles";
|
||||
' >&3
|
||||
|
||||
(( cron )) || echo -n 'Removing obsolete files...'$'\033[K'
|
||||
(( cron )) || echo -n 'Removing obsolete files... '
|
||||
lines=()
|
||||
read -u4 line
|
||||
while [[ $line != AtOM:NoMoreFiles ]]
|
||||
@ -955,12 +952,10 @@ do
|
||||
id=${line%%::AtOM:SQL:Sep::*}
|
||||
rest=${line#*::AtOM:SQL:Sep::}
|
||||
filename=${rest%%::AtOM:SQL:Sep::*}
|
||||
rest=${line#*::AtOM:SQL:Sep::}
|
||||
oldfilename=${rest%%::AtOM:SQL:Sep::*}
|
||||
destination=${rest#*::AtOM:SQL:Sep::}
|
||||
oldfilename=${rest#*::AtOM:SQL:Sep::}
|
||||
if [[ $oldfilename != "$filename" ]] && [ -f "$oldfilename" ]
|
||||
then
|
||||
rm -f "${destinationpath[$destination]}/$oldfilename"
|
||||
rm -f "$oldfilename"
|
||||
fi
|
||||
Update destination_files old_filename NULL <<<"id = $id"
|
||||
(( count++ ))
|
||||
@ -968,12 +963,11 @@ do
|
||||
done
|
||||
echo 'COMMIT;' >&3
|
||||
(( cron )) || echo -n $'\r'
|
||||
(( count )) \
|
||||
&& echo -n "Removed $count obsolete files."
|
||||
echo -n "Removed ${count:-0} obsolete files."
|
||||
(( cron )) || echo -en "\033[K"
|
||||
(( count )) && echo
|
||||
echo
|
||||
|
||||
(( debug )) && echo "Purging empty directories..."
|
||||
echo "Purging empty directories."
|
||||
for path in "${destinationpath[@]}"
|
||||
do
|
||||
find "$path" -type d -empty -delete
|
||||
|
||||
@ -39,11 +39,6 @@ Sections:
|
||||
* debug <level>: Integer. Currently defined values:
|
||||
* 1: few additional status informations.
|
||||
* 3: log SQL queries.
|
||||
* skip-timestamp-microsec <bool>: Ignore microsecond precision in timestamps.
|
||||
Microsec precise timestamps are still stored as-is in the DB, this
|
||||
setting just impacts comparisons when determining if a file has been
|
||||
changed.
|
||||
|
||||
|
||||
[source]
|
||||
This section defines where are the files you want transcoded.
|
||||
|
||||
@ -34,9 +34,6 @@ database /home/user/.local/share/AtOM/atom.db
|
||||
# 3: log SQL queries to <temporary-directory>/debug.log
|
||||
#debug 1
|
||||
|
||||
# * skip-timestamp-microsec: Ignore microsecond precision in timestamps.
|
||||
skip-timestamp-microsec 0
|
||||
|
||||
|
||||
[source]
|
||||
# This section defines where are the files you want transcoded.
|
||||
|
||||
@ -5,7 +5,7 @@ getConfigDestination() {
|
||||
destinationenabled["$destination"]="$value"
|
||||
;;
|
||||
'path')
|
||||
destinationpath["$destination"]="${value%/}"
|
||||
destinationpath["$destination"]="$value"
|
||||
;;
|
||||
'format')
|
||||
case "$value" in
|
||||
|
||||
@ -75,9 +75,6 @@ getConfigGeneral() {
|
||||
'database')
|
||||
database="$value"
|
||||
;;
|
||||
'skip-timestamp-microsec')
|
||||
skip_us_timestamp="$value"
|
||||
;;
|
||||
debug)
|
||||
(( value > debug )) && debug=$value
|
||||
;;
|
||||
|
||||
@ -33,9 +33,6 @@ database $database
|
||||
# * debug <level>: Integer.
|
||||
#debug 1
|
||||
|
||||
# * skip-timestamp-microsec: Ignore microsecond precision in timestamps.
|
||||
skip-timestamp-microsec ${skip_us_timestamp:-0}
|
||||
|
||||
|
||||
[source]
|
||||
# This section defines where are the files you want transcoded.
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
copyFiles_action() {
|
||||
(( cron )) || echo -n $'Copying files...\033[K'
|
||||
(( cron )) || echo -n "Copying files... "
|
||||
echo '
|
||||
SELECT
|
||||
source_files.filename,
|
||||
@ -79,29 +79,15 @@ copyFiles_action() {
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if cp -a --reflink=always \
|
||||
"$sourcepath/$sourcefilename" \
|
||||
"$destdir" \
|
||||
2>/dev/null \
|
||||
|| cp -al \
|
||||
"$sourcepath/$sourcefilename" \
|
||||
"$destdir" \
|
||||
2>/dev/null \
|
||||
|| cp -a \
|
||||
"$sourcepath/$sourcefilename" \
|
||||
"$destdir"
|
||||
if cp -al "$sourcepath/$sourcefilename" "$destdir" 2>/dev/null\
|
||||
|| cp -a "$sourcepath/$sourcefilename" "$destdir"
|
||||
then
|
||||
Update destination_files \
|
||||
filename \
|
||||
"$destdir/${sourcefilename##*/}"\
|
||||
rename_pattern \
|
||||
"${destinationrenamepath[$destination]}/${destinationrename[$destination]}"\
|
||||
fat32compat \
|
||||
${destinationfat32compat["$destination"]}\
|
||||
ascii \
|
||||
${destinationascii["$destination"]}\
|
||||
last_change \
|
||||
$lastchange \
|
||||
filename "$destdir/${sourcefilename##*/}"\
|
||||
rename_pattern "${destinationrenamepath[$destination]}/${destinationrename[$destination]}"\
|
||||
fat32compat ${destinationfat32compat["$destination"]}\
|
||||
ascii ${destinationascii["$destination"]}\
|
||||
last_change $lastchange \
|
||||
<<-EOWhere
|
||||
id = $destfileid
|
||||
EOWhere
|
||||
@ -112,12 +98,12 @@ copyFiles_action() {
|
||||
if (( count ))
|
||||
then
|
||||
(( cron )) || echo -n $'\r'
|
||||
echo -n "Copied ${done:-0} of $count" \
|
||||
"files${postponed+ ($postponed postponed)}."
|
||||
echo -n "Copied ${done:-0} of $count" \
|
||||
"files${postponed+ ($postponed postponed)}."
|
||||
(( cron )) || echo -en "\033[K"
|
||||
echo
|
||||
else
|
||||
(( cron )) || echo -n $'\r\033[K'
|
||||
(( cron )) || echo -e "\rNothing to copy.\033[K"
|
||||
fi
|
||||
unset count done
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
currentdbversion=7
|
||||
currentdbversion=6
|
||||
checkDatabaseVersion() {
|
||||
local dbversion
|
||||
if dbversion=$(Select atom version <<<"\"1\" = 1")
|
||||
@ -18,7 +18,7 @@ checkDatabaseVersion() {
|
||||
echo "Database schema version $dbversion is higher than
|
||||
that of this version of AtOM
|
||||
($currentdbversion). Bailing out." >&2
|
||||
exit $EDBVERSION
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
Insert atom 1 <<<"version $currentdbversion"
|
||||
|
||||
@ -1,11 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
upgradedatabase_6_7() {
|
||||
echo "Upgrading database to version 7... (backup is $database.bak_v6)"
|
||||
cp "$database" "$database.bak_v6"
|
||||
for destination in "${destinations[@]}"
|
||||
do
|
||||
echo "UPDATE destination_files SET filename = REPLACE(filename,'${destinationpath[$destination]}/','') WHERE filename LIKE '${destinationpath[$destination]}/%';" >&3
|
||||
done
|
||||
Update atom version 7 <<<"1 = 1"
|
||||
}
|
||||
@ -53,7 +53,7 @@ encodeFile::mp3() {
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
lameopts+=("$tempdir/$tmpfile.wav" "${destinationpath[$destination]}/$destdir/$destfile.mp3")
|
||||
lameopts+=("$tempdir/$tmpfile.wav" "$destdir/$destfile.mp3")
|
||||
encodetaskid=$(
|
||||
Insert tasks <<-EOInsert
|
||||
key ${fileid}lame$destination
|
||||
|
||||
@ -23,7 +23,7 @@ encodeFile::opus() {
|
||||
[ -n "$track" ] && opusencopts+=(--comment "TRACKNUMBER=${track%/*}")
|
||||
[ -n "${track#*/}" ] && opusencopts+=(--comment "TRACKTOTAL=${track#*/}")
|
||||
[ -n "$year" ] && opusencopts+=(--comment "DATE=$year")
|
||||
opusencopts+=("$tempdir/$tmpfile".wav "${destinationpath[$destination]}/$destdir/$destfile.opus")
|
||||
opusencopts+=("$tempdir/$tmpfile".wav "$destdir/$destfile.opus")
|
||||
encodetaskid=$(
|
||||
Insert tasks <<-EOInsert
|
||||
key ${fileid}opusenc$destination
|
||||
|
||||
@ -17,7 +17,7 @@ encodeFile::vorbis() {
|
||||
[ -n "$title" ] && oggencopts+=(-t "$title")
|
||||
[ -n "$track" ] && oggencopts+=(-N "$track")
|
||||
[ -n "$year" ] && oggencopts+=(-d "$year")
|
||||
oggencopts+=(-o "${destinationpath[$destination]}/$destdir/$destfile.ogg" "$tempdir/$tmpfile.wav")
|
||||
oggencopts+=(-o "$destdir/$destfile.ogg" "$tempdir/$tmpfile.wav")
|
||||
encodetaskid=$(
|
||||
Insert tasks <<-EOInsert
|
||||
key ${fileid}oggenc$destination
|
||||
|
||||
@ -41,7 +41,7 @@ getDestDir() {
|
||||
)
|
||||
)
|
||||
then
|
||||
destdir=""
|
||||
destdir="${destinationpath[$destination]}/"
|
||||
if (( ${destinationascii["$destination"]} ))
|
||||
then
|
||||
echo "$album" >&${toascii[1]}
|
||||
@ -83,7 +83,8 @@ getDestDir() {
|
||||
replace=$(sanitizeFile "$disc" dir)
|
||||
destdir="${destdir//?(\[)%\{disc\}?(\])/$replace}"
|
||||
else
|
||||
destdir=$(sanitizeFile "${filename%%/*}" dir)
|
||||
destdir="${destinationpath[$destination]}/"
|
||||
destdir+=$(sanitizeFile "${filename%%/*}" dir)
|
||||
part=${filename#*/}
|
||||
while [[ $part =~ / ]]
|
||||
do
|
||||
@ -100,7 +101,7 @@ getDestDir() {
|
||||
fi
|
||||
if ! [ -d "$destdir" ]
|
||||
then
|
||||
mkdir -p "${destinationpath[$destination]}/$destdir"
|
||||
mkdir -p "$destdir"
|
||||
fi
|
||||
destdir="${destdir//+(\/)//}"
|
||||
}
|
||||
|
||||
@ -10,17 +10,10 @@ getFiles() {
|
||||
echo 'BEGIN TRANSACTION;' >&3
|
||||
while read time size filename
|
||||
do
|
||||
if (( skip_us_timestamp ))
|
||||
then
|
||||
compare_time=${time%.*}.%
|
||||
else
|
||||
compare_time=$time
|
||||
fi
|
||||
if ! Select source_files id >/dev/null <<-EOWhere
|
||||
filename = $filename
|
||||
mime_type > 0
|
||||
last_change LIKE $compare_time
|
||||
size = $size
|
||||
last_change = $time
|
||||
EOWhere
|
||||
then
|
||||
mimetype=$(file -b --mime-type "$sourcepath/$filename")
|
||||
@ -67,10 +60,6 @@ getFiles() {
|
||||
)
|
||||
echo 'COMMIT;' >&3
|
||||
(( cron )) || echo -n $'\r'
|
||||
if (( count ))
|
||||
then
|
||||
echo "$count files found${new:+, $new new or changed}." \
|
||||
$'\033[K'
|
||||
fi
|
||||
echo "${count:-0} files found, ${new:=0} new or changed."$'\033[K'
|
||||
unset count
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
getTags_version='unknown-4'
|
||||
getTags() {
|
||||
local type
|
||||
unset type
|
||||
case "$mimetype" in
|
||||
audio/mpeg)
|
||||
type=ffmpeg
|
||||
|
||||
@ -206,8 +206,8 @@ echo '
|
||||
done
|
||||
echo 'COMMIT;' >&3
|
||||
(( cron )) || echo -n $'\r'
|
||||
(( count )) && echo -n "Read tags from $count files."
|
||||
(( cron )) || echo -n $'\033[K'
|
||||
(( count )) && echo
|
||||
echo -n "Read tags from ${count:-0} files."
|
||||
(( cron )) || echo -ne "\033[K"
|
||||
echo
|
||||
unset count tagfiles
|
||||
}
|
||||
|
||||
@ -220,7 +220,7 @@ master() {
|
||||
echo "Waiting for children to come back home..."
|
||||
wait
|
||||
echo $'\nGood luck!'
|
||||
exit $ETASKLEFT
|
||||
exit 1
|
||||
elif (( ready == 0 ))
|
||||
then
|
||||
sleep 0.1
|
||||
|
||||
@ -1,24 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
## Define exit codes
|
||||
# General config errors [10-19]
|
||||
EDBVERSION=10
|
||||
ELOAD=11
|
||||
EINTERVAL=12
|
||||
ELOAD=13
|
||||
EIONICE=14
|
||||
ENOCFG=19
|
||||
# Source cofig errors [20-29]
|
||||
# Destination config errors [30-49]
|
||||
EFORMAT=30
|
||||
ECHANNEL=31
|
||||
EQUALITY=32
|
||||
EMAXBPS=33
|
||||
EINVDEST=34
|
||||
EFMTINVPARM=49
|
||||
# Tasks
|
||||
ETASKLEFT=50
|
||||
# Sanity
|
||||
ESANITY=60
|
||||
# Invalid arguments
|
||||
EINVARG=127
|
||||
@ -1,26 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
cat <<-EOWarn
|
||||
This script is unmaintained and provided as-is. It may or may not work.
|
||||
|
||||
Use at your own risk!
|
||||
EOWarn
|
||||
|
||||
read -p "Press Enter to continue or Ctrl-C to abort"
|
||||
|
||||
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 \
|
||||
@ -43,6 +22,16 @@ declare -A \
|
||||
exit $EBASHVERS
|
||||
}
|
||||
|
||||
declare -r \
|
||||
DOCDIR=%DOCDIR% \
|
||||
LIBDIR=%LIBDIR% \
|
||||
SHAREDIR=%SHAREDIR%
|
||||
declare -r \
|
||||
exampleconf=$DOCDIR/example.cfg \
|
||||
schema=$SHAREDIR/schema.sql \
|
||||
\
|
||||
oldIFS="$IFS"
|
||||
|
||||
LC_ALL=C
|
||||
|
||||
shopt -s extglob
|
||||
|
||||
@ -1,18 +1,5 @@
|
||||
#!/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 \
|
||||
@ -35,6 +22,16 @@ declare -A \
|
||||
exit $EBASHVERS
|
||||
}
|
||||
|
||||
declare -r \
|
||||
DOCDIR=%DOCDIR% \
|
||||
LIBDIR=%LIBDIR% \
|
||||
SHAREDIR=%SHAREDIR%
|
||||
declare -r \
|
||||
exampleconf=$DOCDIR/example.cfg \
|
||||
schema=$SHAREDIR/schema.sql \
|
||||
\
|
||||
oldIFS="$IFS"
|
||||
|
||||
LC_ALL=C
|
||||
|
||||
shopt -s extglob
|
||||
|
||||
@ -1,18 +1,5 @@
|
||||
#!/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 \
|
||||
@ -35,6 +22,16 @@ declare -A \
|
||||
exit $EBASHVERS
|
||||
}
|
||||
|
||||
declare -r \
|
||||
DOCDIR=%DOCDIR% \
|
||||
LIBDIR=%LIBDIR% \
|
||||
SHAREDIR=%SHAREDIR%
|
||||
declare -r \
|
||||
exampleconf=$DOCDIR/example.cfg \
|
||||
schema=$SHAREDIR/schema.sql \
|
||||
\
|
||||
oldIFS="$IFS"
|
||||
|
||||
LC_ALL=C
|
||||
|
||||
shopt -s extglob
|
||||
@ -65,42 +62,27 @@ getConfig
|
||||
sanityCheck
|
||||
openDatabase
|
||||
|
||||
echo '
|
||||
SELECT
|
||||
destination_files.id,
|
||||
destinations.name,
|
||||
destination_files.filename
|
||||
FROM destinations
|
||||
INNER JOIN destination_files
|
||||
ON destinations.id=destination_files.destination_id
|
||||
WHERE filename IS NOT NULL;' >&3
|
||||
echo 'SELECT id,filename FROM destination_files WHERE filename IS NOT NULL;' >&3
|
||||
echo 'SELECT "AtOM:NoMoreFiles";' >&3
|
||||
|
||||
declare -a \
|
||||
destination_names \
|
||||
files
|
||||
read -u4 line
|
||||
until [[ $line == AtOM:NoMoreFiles ]]
|
||||
read -u4 filename
|
||||
until [[ $filename == AtOM:NoMoreFiles ]]
|
||||
do
|
||||
id=${line%%::AtOM:SQL:Sep::*}
|
||||
rest=${line#*::AtOM:SQL:Sep::}
|
||||
destination_names[id]=${rest%%::AtOM:SQL:Sep::*}
|
||||
rest=${rest#*::AtOM:SQL:Sep::}
|
||||
files[id]=${rest}
|
||||
read -u4 line
|
||||
files+=("$filename")
|
||||
read -u4 filename
|
||||
done
|
||||
|
||||
echo 'BEGIN TRANSACTION;' >&3
|
||||
|
||||
echo -n "Checking for missing files... "
|
||||
for index in "${!files[@]}"
|
||||
for filename in "${files[@]}"
|
||||
do
|
||||
destination=${destination_names[index]}
|
||||
filename="${destinationpath[$destination]}/${files[index]}"
|
||||
id=${filename%%::AtOM:SQL:Sep::*}
|
||||
filename=${filename#*::AtOM:SQL:Sep::}
|
||||
if ! [ -f "$filename" ]
|
||||
then
|
||||
echo -e "\r$filename\033[K"
|
||||
((regen))&&Update destination_files last_change 0 <<<"id = $index"
|
||||
((regen))&&Update destination_files last_change 0 <<<"id = $id"
|
||||
echo -n "Checking for missing files... "
|
||||
(( missing++ ))
|
||||
fi
|
||||
@ -109,6 +91,6 @@ done
|
||||
|
||||
echo 'COMMIT;' >&3
|
||||
|
||||
echo -e "\r${missing:-No} missing files\033[K"
|
||||
echo -e "\r${missing:-0} missing files\033[K"
|
||||
|
||||
closeDatabase
|
||||
|
||||
@ -1,18 +1,5 @@
|
||||
#!/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 \
|
||||
@ -35,6 +22,16 @@ declare -A \
|
||||
exit $EBASHVERS
|
||||
}
|
||||
|
||||
declare -r \
|
||||
DOCDIR=%DOCDIR% \
|
||||
LIBDIR=%LIBDIR% \
|
||||
SHAREDIR=%SHAREDIR%
|
||||
declare -r \
|
||||
exampleconf=$DOCDIR/example.cfg \
|
||||
schema=$SHAREDIR/schema.sql \
|
||||
\
|
||||
oldIFS="$IFS"
|
||||
|
||||
LC_ALL=C
|
||||
|
||||
shopt -s extglob
|
||||
@ -76,7 +73,7 @@ do
|
||||
do
|
||||
if ! Select destination_files id \
|
||||
>/dev/null \
|
||||
<<<"filename = ${filename#${destinationpath["$destination"]}/}"
|
||||
<<<"filename = $filename"
|
||||
then
|
||||
echo -e $'\r'"$filename\033[K"
|
||||
(( remove )) && rm -f "$filename"
|
||||
|
||||
@ -1,17 +1,6 @@
|
||||
#!/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
|
||||
#!/bin/bash
|
||||
|
||||
# config structures
|
||||
declare -A \
|
||||
@ -35,6 +24,16 @@ declare -A \
|
||||
exit $EBASHVERS
|
||||
}
|
||||
|
||||
declare -r \
|
||||
DOCDIR=%DOCDIR% \
|
||||
LIBDIR=%LIBDIR% \
|
||||
SHAREDIR=%SHAREDIR%
|
||||
declare -r \
|
||||
exampleconf=$DOCDIR/example.cfg \
|
||||
schema=$SHAREDIR/schema.sql \
|
||||
\
|
||||
oldIFS="$IFS"
|
||||
|
||||
LC_ALL=C
|
||||
|
||||
shopt -s extglob
|
||||
@ -453,10 +452,7 @@ do
|
||||
expr2='(,|$)'
|
||||
if ! [[ $channelss =~ $expr1"$channels"$expr2 ]]
|
||||
then
|
||||
if [[ -n "$channels" ]]
|
||||
then
|
||||
:
|
||||
elif [ -n "$channelss" ] \
|
||||
if [ -n "$channelss" ] \
|
||||
&& (( channels < ${channelss%%,*} ))
|
||||
then
|
||||
channelss="$channels,$channelss"
|
||||
@ -466,10 +462,7 @@ do
|
||||
fi
|
||||
if ! [[ $rates =~ $expr1"$rate"$expr2 ]]
|
||||
then
|
||||
if [[ -n "$rate" ]]
|
||||
then
|
||||
:
|
||||
elif [ -n "$rates" ] \
|
||||
if [ -n "$rates" ] \
|
||||
&& (( rate < ${rates%%,*} ))
|
||||
then
|
||||
rates="$rate,$rates"
|
||||
@ -479,10 +472,7 @@ do
|
||||
fi
|
||||
if [ -n "$depth" ] && ! [[ $depths =~ $expr1"$depth"$expr2 ]]
|
||||
then
|
||||
if [[ -n "$depth" ]]
|
||||
then
|
||||
:
|
||||
elif [ -n "$depths" ] \
|
||||
if [ -n "$depths" ] \
|
||||
&& (( depth < ${depths%%,*} ))
|
||||
then
|
||||
depths="$depth,$depths"
|
||||
|
||||
@ -1,18 +1,5 @@
|
||||
#!/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 \
|
||||
@ -35,6 +22,16 @@ declare -A \
|
||||
exit $EBASHVERS
|
||||
}
|
||||
|
||||
declare -r \
|
||||
DOCDIR=%DOCDIR% \
|
||||
LIBDIR=%LIBDIR% \
|
||||
SHAREDIR=%SHAREDIR%
|
||||
declare -r \
|
||||
exampleconf=$DOCDIR/example.cfg \
|
||||
schema=$SHAREDIR/schema.sql \
|
||||
\
|
||||
oldIFS="$IFS"
|
||||
|
||||
LC_ALL=C
|
||||
|
||||
shopt -s extglob
|
||||
|
||||
@ -1,18 +1,5 @@
|
||||
#!/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 \
|
||||
@ -36,6 +23,16 @@ declare -A \
|
||||
exit $EBASHVERS
|
||||
}
|
||||
|
||||
declare -r \
|
||||
DOCDIR=%DOCDIR% \
|
||||
LIBDIR=%LIBDIR% \
|
||||
SHAREDIR=%SHAREDIR%
|
||||
declare -r \
|
||||
exampleconf=$DOCDIR/example.cfg \
|
||||
schema=$SHAREDIR/schema.sql \
|
||||
\
|
||||
oldIFS="$IFS"
|
||||
|
||||
LC_ALL=C
|
||||
|
||||
shopt -s extglob
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user