This commit is contained in:
Vincent Riquer 2013-03-15 19:57:06 +01:00
parent 121e586b08
commit 7d57f59dd5

126
atom
View File

@ -1001,13 +1001,13 @@ decodeFile() {
source_file $fileid source_file $fileid
command_line $commandline command_line $commandline
status 0 status 0
cleanup $tempdir/$tmpfile.wav
EOInsert EOInsert
) )
progressSpin progressSpin
fi fi
if (( sox_needed )) if (( sox_needed ))
then then
cleanup="$tempdir/$tmpfile"
decodeSox "$tempdir/$tmpfile.wav" decodeSox "$tempdir/$tmpfile.wav"
if ! soxtaskid=$( if ! soxtaskid=$(
Select tasks id <<<"key = $tmpfile" Select tasks id <<<"key = $tmpfile"
@ -1019,8 +1019,9 @@ decodeFile() {
source_file $fileid source_file $fileid
command_line $commandline command_line $commandline
requires $decodetaskid requires $decodetaskid
required $decodetaskid
status 0 status 0
cleanup $tempdir/$tmpfile.wav cleanup $cleanup
EOInsert EOInsert
) )
progressSpin progressSpin
@ -1128,7 +1129,11 @@ encodeFile::mp3() {
Insert tasks <<-EOInsert Insert tasks <<-EOInsert
key ${fileid}lame$destination key ${fileid}lame$destination
requires ${soxtaskid:-$decodetaskid} requires ${soxtaskid:-$decodetaskid}
required ${soxtaskid:-$decodetaskid}
fileid $destfileid
filename $destdir/$destfile.mp3
command_line lame $lameopts "$tempdir/$tmpfile.wav" "$destdir/$destfile.mp3" command_line lame $lameopts "$tempdir/$tmpfile.wav" "$destdir/$destfile.mp3"
cleanup "$tempdir/$tmpfile.wav"
source_file $fileid source_file $fileid
status 0 status 0
EOInsert EOInsert
@ -1152,7 +1157,11 @@ encodeFile::vorbis() {
Insert tasks <<-EOInsert Insert tasks <<-EOInsert
key ${fileid}oggenc$destination key ${fileid}oggenc$destination
requires ${soxtaskid:-$decodetaskid} requires ${soxtaskid:-$decodetaskid}
required ${soxtaskid:-$decodetaskid}
fileid $destfileid
filename $destdir/$destfile.ogg
command_line oggenc $oggencopts -o "$destdir/$destfile.ogg" "$tempdir/$tmpfile.wav" command_line oggenc $oggencopts -o "$destdir/$destfile.ogg" "$tempdir/$tmpfile.wav"
cleanup "$tempdir/$tmpfile.wav"
source_file $fileid source_file $fileid
status 0 status 0
EOInsert EOInsert
@ -1194,6 +1203,103 @@ transcodeLauncher() {
#update counter / metadata #update counter / metadata
} }
worker() {
while :
do
if [ -f "$tempdir/worker-lock" ]
then
sleep 0.001
continue
else
touch "$tempdir/worker-lock"
concurrency=$(Select worker_comm value <<<"parameter = concurrency")
active_workers=$(Select tasks 'count(*)' <<<"status = 1")
if (( active_workers < concurrency ))
then
echo '
SELECT COUNT(*)
FROM tasks
WHERE status = 0
AND requires is NULL;
SELECT
id,
source_file,
required,
command_line,
cleanup,
fileid,
filename
FROM tasks
WHERE status = 0
AND requires is NULL
ORDER BY source_file
LIMIT 1;
' >&3
read -u4 count
if (( count == 0 ))
then
rm "$tempdir/worker-lock"
exit
fi
read -u4 line
taskid=${line%%|*}
rest="${line#*|}|"
sourcefileid=${rest%%|*}
rest=${rest#*|}
required=${rest%%|*}
rest=${rest#*|}
commandline=${rest%%|*}
rest=${rest#*|}
cleanup=${rest%%|*}
rest=${rest#*|}
destfileid=${rest%%|*}
rest=${rest#*|}
destfilename=${rest%%|*}
rest=${rest#*|}
Update tasks status 1 <<<"id = $taskid"
rm "$tempdir/worker-lock"
if eval $commandline 2>>"$tempdir/errors.log"
then
Delete tasks <<<"id = $taskid"
if [ -n "$destfilename" ]
then
echo \
"UPDATE destination_files" \
"SET filename=\"$destfilename\"," \
" last_change=(" \
" SELECT last_change" \
" FROM source_files" \
" WHERE id=$sourcefileid"\
" )" \
"WHERE id=$destfileid;" \
>&3
fi
else
Update tasks status 2 <<<"id = $taskid"
[ -n "$filename" ] && rm -f "$filename"
[ -n "$cleanup" ] && rm -f "$cleanup"
fi
if [ -n "$cleanup" -a -n "$required" ]
then
echo "SELECT COUNT(*)
FROM tasks
WHERE ( status = 0 OR status = 1 )
AND required = $required;">&3
read -u4 count
if (( count == 0 ))
then
eval rm $cleanup
fi
fi
else
rm "$tempdir/worker-lock"
exit
fi
fi
done
}
#UI #UI
if [ ! -f ~/.atom/atom.cfg ] if [ ! -f ~/.atom/atom.cfg ]
@ -1373,14 +1479,25 @@ echo '
id INTEGER PRIMARY KEY, id INTEGER PRIMARY KEY,
key TEXT UNIQUE, key TEXT UNIQUE,
source_file INTEGER, source_file INTEGER,
fileid INTEGER,
filename TEXT,
command_line TEXT, command_line TEXT,
requires INTEGER, requires INTEGER,
required INTEGER,
status INTEGER NOT NULL, status INTEGER NOT NULL,
cleanup TEXT, cleanup TEXT,
FOREIGN KEY(requires) REFERENCES tasks(id) FOREIGN KEY(requires) REFERENCES tasks(id)
ON DELETE SET NULL ON DELETE SET NULL
); );
CREATE INDEX tasks_by_key ON tasks ( key );' >&3 CREATE INDEX tasks_by_key ON tasks ( key );
CREATE INDEX tasks_by_sourcefile ON tasks ( source_file );
CREATE TEMPORARY TABLE worker_comm(
parameter TEXT UNIQUE NOT NULL,
value TEXT
);
CREATE INDEX wrkcomm_by_param ON worker_comm ( parameter );
' >&3
echo ' echo '
SELECT COUNT(source_files.id) SELECT COUNT(source_files.id)
@ -1571,6 +1688,9 @@ echo 'COMMIT;' >&3
echo -e "\rCreated ${count:-0} tasks for $filecount files" echo -e "\rCreated ${count:-0} tasks for $filecount files"
unset count unset count
InsertOrUpdate worker_comm value 1 <<<"parameter concurrency"
worker
closeDatabase closeDatabase
# vim:set ts=8 sw=8: # vim:set ts=8 sw=8: