diff --git a/atom b/atom index cc401a7..11e16b7 100755 --- a/atom +++ b/atom @@ -398,20 +398,22 @@ echo ' mime_type_actions.mime_text, destinations.name, destination_files.id, - tags.depth, - tags.rate, - tags.channels, - tags.bitrate, - tags.genre, - tags.albumartist, - tags.year, tags.album, - tags.disc, + tags.albumartist, tags.artist, - tags.track, - tags.title, + tags.bitrate, + tags.channels, tags.composer, - tags.performer + tags.depth, + tags.disc, + tags.genre, + tags.performer, + tags.rate, + tags.replaygain_alb, + tags.replaygain_trk, + tags.title, + tags.track, + tags.year FROM source_files INNER JOIN destination_files ON source_files.id @@ -454,33 +456,37 @@ do rest=${rest#*::AtOM:SQL:Sep::} destfileid=${rest%%::AtOM:SQL:Sep::*} rest=${rest#*::AtOM:SQL:Sep::} - bitdepth=${rest%%::AtOM:SQL:Sep::*} - rest=${rest#*::AtOM:SQL:Sep::} - rate=${rest%%::AtOM:SQL:Sep::*} - rest=${rest#*::AtOM:SQL:Sep::} - channels=${rest%%::AtOM:SQL:Sep::*} - rest=${rest#*::AtOM:SQL:Sep::} - bitrate=${rest%%::AtOM:SQL:Sep::*} - rest=${rest#*::AtOM:SQL:Sep::} - genre=${rest%%::AtOM:SQL:Sep::*} + album=${rest%%::AtOM:SQL:Sep::*} rest=${rest#*::AtOM:SQL:Sep::} albumartist=${rest%%::AtOM:SQL:Sep::*} rest=${rest#*::AtOM:SQL:Sep::} - year=${rest%%::AtOM:SQL:Sep::*} - rest=${rest#*::AtOM:SQL:Sep::} - album=${rest%%::AtOM:SQL:Sep::*} - rest=${rest#*::AtOM:SQL:Sep::} - disc=${rest%%::AtOM:SQL:Sep::*} - rest=${rest#*::AtOM:SQL:Sep::} artist=${rest%%::AtOM:SQL:Sep::*} rest=${rest#*::AtOM:SQL:Sep::} - track=${rest%%::AtOM:SQL:Sep::*} + bitrate=${rest%%::AtOM:SQL:Sep::*} rest=${rest#*::AtOM:SQL:Sep::} - title=${rest%%::AtOM:SQL:Sep::*} + channels=${rest%%::AtOM:SQL:Sep::*} rest=${rest#*::AtOM:SQL:Sep::} composer=${rest%%::AtOM:SQL:Sep::*} rest=${rest#*::AtOM:SQL:Sep::} + depth=${rest%%::AtOM:SQL:Sep::*} + rest=${rest#*::AtOM:SQL:Sep::} + disc=${rest%%::AtOM:SQL:Sep::*} + rest=${rest#*::AtOM:SQL:Sep::} + genre=${rest%%::AtOM:SQL:Sep::*} + rest=${rest#*::AtOM:SQL:Sep::} performer=${rest%%::AtOM:SQL:Sep::*} + rest=${rest#*::AtOM:SQL:Sep::} + rate=${rest%%::AtOM:SQL:Sep::*} + rest=${rest#*::AtOM:SQL:Sep::} + replaygain_alb=${rest%%::AtOM:SQL:Sep::*} + rest=${rest#*::AtOM:SQL:Sep::} + replaygain_trk=${rest%%::AtOM:SQL:Sep::*} + rest=${rest#*::AtOM:SQL:Sep::} + title=${rest%%::AtOM:SQL:Sep::*} + rest=${rest#*::AtOM:SQL:Sep::} + track=${rest%%::AtOM:SQL:Sep::*} + rest=${rest#*::AtOM:SQL:Sep::} + year=${rest%%::AtOM:SQL:Sep::*} unset rest case ${destinationformat["$destination"]} in vorbis) (( disableoggenc )) && continue ;; @@ -508,13 +514,13 @@ do album \ albumartist \ artist \ - bitdepth \ bitrate \ channels \ commandline \ composer \ copied \ decodetaskid \ + depth \ destfileid \ destination \ disc \ @@ -523,6 +529,8 @@ do mimetype \ performer \ rate \ + replaygain_alb \ + replaygain_trk \ rest \ sox_needed \ soxoptions_in \ diff --git a/lib/database/checkVersion b/lib/database/checkVersion index 5b3b94d..932afa5 100644 --- a/lib/database/checkVersion +++ b/lib/database/checkVersion @@ -1,5 +1,5 @@ -#!/bin/bash -currentdbversion=5 +#!/usr/bin/env bash +currentdbversion=6 checkDatabaseVersion() { local dbversion if dbversion=$(Select atom version <<<"\"1\" = 1") diff --git a/lib/database/open b/lib/database/open index 796890a..c11da4f 100644 --- a/lib/database/open +++ b/lib/database/open @@ -1,5 +1,6 @@ -#!/bin/bash +#!/usr/bin/env bash openDatabase() { + [[ -f "$database" ]] || populate_db=1 rm -f "$tempdir"/sqlite.{in,out} mkfifo "$tempdir"/sqlite.{in,out} sqlite3 -bail "$database" \ @@ -13,7 +14,7 @@ openDatabase() { exec 5>&3 exec 3> >(tee -a "$tempdir/debug.log" >&5) fi - cat $schema >&3 + (( populate_db )) && cat $schema >&3 echo '.separator ::AtOM:SQL:Sep::' >&3 echo 'PRAGMA foreign_keys = ON;' >&3 echo 'PRAGMA recursive_triggers = ON;' >&3 diff --git a/lib/database/upgradedatabase_1_2 b/lib/database/upgradedatabase_1_2 index b1d3ed1..0985774 100644 --- a/lib/database/upgradedatabase_1_2 +++ b/lib/database/upgradedatabase_1_2 @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash upgradedatabase_1_2() { local data \ diff --git a/lib/database/upgradedatabase_2_3 b/lib/database/upgradedatabase_2_3 index 998556f..d2fb25c 100644 --- a/lib/database/upgradedatabase_2_3 +++ b/lib/database/upgradedatabase_2_3 @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash upgradedatabase_2_3() { local data \ @@ -11,4 +11,4 @@ upgradedatabase_2_3() { Update destinations enabled 1 <<< "1 = 1" Update atom version 3 <<<"1 = 1" -} \ No newline at end of file +} diff --git a/lib/database/upgradedatabase_3_4 b/lib/database/upgradedatabase_3_4 index d236a3c..b7b3830 100644 --- a/lib/database/upgradedatabase_3_4 +++ b/lib/database/upgradedatabase_3_4 @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash upgradedatabase_3_4() { echo "Upgrading database to version 4... (backup is $database.bak_v3)" @@ -6,4 +6,4 @@ upgradedatabase_3_4() { echo 'ALTER TABLE tags ADD COLUMN releasecountry TEXT;' >&3 Update atom version 4 <<<"1 = 1" -} \ No newline at end of file +} diff --git a/lib/database/upgradedatabase_4_5 b/lib/database/upgradedatabase_4_5 index 568f3d3..f356411 100644 --- a/lib/database/upgradedatabase_4_5 +++ b/lib/database/upgradedatabase_4_5 @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash upgradedatabase_4_5() { echo "Upgrading database to version 5... (backup is $database.bak_v4)" @@ -21,7 +21,7 @@ upgradedatabase_4_5() { rate, channels, bitrate, - bitdepth + depth ON tags BEGIN UPDATE destination_files SET last_change=0 @@ -30,4 +30,4 @@ upgradedatabase_4_5() { ' >&3 Update atom version 5 <<<"1 = 1" -} \ No newline at end of file +} diff --git a/lib/database/upgradedatabase_5_6 b/lib/database/upgradedatabase_5_6 new file mode 100644 index 0000000..0a7c62f --- /dev/null +++ b/lib/database/upgradedatabase_5_6 @@ -0,0 +1,37 @@ +#!/usr/bin/env bash + +upgradedatabase_5_6() { + echo "Upgrading database to version 6... (backup is $database.bak_v5)" + cp "$database" "$database.bak_v5" + echo ' + ALTER TABLE tags ADD COLUMN replaygain_alb TEXT; + ALTER TABLE tags ADD COLUMN replaygain_trk TEXT; + DROP TRIGGER force_destination_update_on_tag_update; + CREATE TRIGGER IF NOT EXISTS force_destination_update_on_tag_update + AFTER UPDATE OF + genre, + albumartist, + year, + album, + disc, + artist, + track, + title, + composer, + performer, + releasecountry, + replaygain_alb, + replaygain_trk, + rate, + channels, + bitrate, + depth + ON tags + BEGIN + UPDATE destination_files SET last_change=0 + WHERE source_file_id=old.source_file; + END; + ' >&3 + + Update atom version 6 <<<"1 = 1" +} diff --git a/lib/decode/sox b/lib/decode/sox index ef4c7f6..b9d4c0e 100644 --- a/lib/decode/sox +++ b/lib/decode/sox @@ -26,7 +26,7 @@ decodeSox() { commandline+=(-c ${destinationchannels["$destination"]}) soxoptions_out+=" -c ${destinationchannels["$destination"]}" fi - if (( ${bitdepth:-0} > 16 )) + if (( ${depth:-0} > 16 )) then commandline+=(-b 16) soxoptions_out+=" -b 16" diff --git a/lib/encode/mp3 b/lib/encode/mp3 index 3a2556f..22e9b74 100644 --- a/lib/encode/mp3 +++ b/lib/encode/mp3 @@ -1,6 +1,6 @@ -#!/bin/bash +#!/usr/bin/env bash encodeFile::mp3() { - lameopts=(${ionice}lame --quiet) + lameopts=(${ionice}lame --quiet --noreplaygain) lameopts+=(-v --abr ${destinationquality[$destination]}) [ -n "$album" ] && lameopts+=(--tl "$album" ) [ -n "$artist" ] && lameopts+=(--ta "$artist") @@ -13,6 +13,10 @@ encodeFile::mp3() { [ -n "$performer" ] && lameopts+=(--tv TOPE="$performer") [ -n "$releasecountry" ] \ && lameopts+=(--tv TXXX="MusicBrainz Album Release Country=$releasecountry") + [ -n "$replaygain_alb" ] \ + && lameopts+=(--tv "TXXX=REPLAYGAIN_ALBUM_GAIN=$replaygain_alb") + [ -n "$replaygain_trk" ] \ + && lameopts+=(--tv "TXXX=REPLAYGAIN_TRACK_GAIN=$replaygain_trk") [ -n "$disc" ] && lameopts+=(--tv TPOS="$disc") if (( ${destinationnoresample[$destination]:-0} == 1 )) then diff --git a/lib/encode/opus b/lib/encode/opus index ce78f84..18dc821 100644 --- a/lib/encode/opus +++ b/lib/encode/opus @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash encodeFile::opus() { opusencopts=(${ionice}opusenc --quiet) opusencopts+=(--bitrate ${destinationquality[$destination]}) @@ -13,6 +13,12 @@ encodeFile::opus() { [ -n "$performer" ] && opusencopts+=(--comment "PERFORMER=$performer") [ -n "$releasecountry" ] \ && opusencopts+=(--comment "RELEASECOUNTRY=$releasecountry") + [ -n "$replaygain_alb" ] \ + && opusencopts+=(--comment) \ + && opusencopts+=("REPLAYGAIN_ALBUM_GAIN=$replaygain_alb") + [ -n "$replaygain_trk" ] \ + && opusencopts+=(--comment) \ + && opusencopts+=("REPLAYGAIN_TRACK_GAIN=$replaygain_trk") [ -n "$title" ] && opusencopts+=(--title "$title") [ -n "$track" ] && opusencopts+=(--comment "TRACKNUMBER=${track%/*}") [ -n "${track#*/}" ] && opusencopts+=(--comment "TRACKTOTAL=${track#*/}") diff --git a/lib/encode/vorbis b/lib/encode/vorbis index e16b3da..6be67e5 100644 --- a/lib/encode/vorbis +++ b/lib/encode/vorbis @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash encodeFile::vorbis() { oggencopts=(${ionice}oggenc -Q -q ${destinationquality[$destination]}) [ -n "$albumartist" ] && oggencopts+=(-c "ALBUMARTIST=$albumartist") @@ -9,7 +9,11 @@ encodeFile::vorbis() { [ -n "$genre" ] && oggencopts+=(-G "$genre") [ -n "$performer" ] && oggencopts+=(-c "PERFORMER=$performer") [ -n "$releasecountry" ] \ - && oggencopts+=(--comment "RELEASECOUNTRY=$releasecountry") + && oggencopts+=(-c "RELEASECOUNTRY=$releasecountry") + [ -n "$replaygain_alb" ] \ + && oggencopts+=(-c "REPLAYGAIN_ALBUM_GAIN=$replaygain_alb") + [ -n "$replaygain_trk" ] \ + && oggencopts+=(-c "REPLAYGAIN_TRACK_GAIN=$replaygain_trk") [ -n "$title" ] && oggencopts+=(-t "$title") [ -n "$track" ] && oggencopts+=(-N "$track") [ -n "$year" ] && oggencopts+=(-d "$year") diff --git a/lib/tags/ffmpeg b/lib/tags/ffmpeg deleted file mode 100644 index e8a37c3..0000000 --- a/lib/tags/ffmpeg +++ /dev/null @@ -1,65 +0,0 @@ -#!/bin/bash -getInfosffmpeg_version='ffmpeg-7' -tagreaders+=( "$getInfosffmpeg_version" ) -getInfos::ffmpeg() { - tagreader="$getInfosffmpeg_version" - local allinfos=$( - ffprobe -show_streams \ - -i "$sourcepath/$filename" 2>&1 \ - |sed ' - /^Input/,/.* Audio: /{s/ *: */=/} - s/^[[:space:]]*// - s/\0//g' - ) - local metadata=$( - echo -e "$allinfos" \ - |sed -n '/Metadata=/,/\[STREAM\]/p' - ) - local fmt_infos=$( - echo -e "$allinfos" \ - |sed -n \ - '/codec_type=audio/,/\[STREAM\]/{ - /^\(sample_fmt\|sample_rate\|bit_rate\|channels\)=/{ - p - } - }' - ) - local infos="$metadata" - albumartist=$(gettag album_artist) - album=$(gettag album) - artist=$(gettag artist) - composer=$(gettag composer) - disc=$(gettag disc) - genre=$(gettag genre) - performer=$(gettag TOPE) - releasecountry=$(gettag releasecountry) - [[ -z "$releasecountry" ]] && releasecountry=$(gettag "MusicBrainz Album Release Country") - title=$(gettag title) - tracknum=$(gettag track) - year=$(gettag date) - expr='^[0-9]*$' - if [ -n "$genre" ] && [[ $genre =~ $expr ]] - then - genre="${id3genres[$genre]}" - fi - infos="$fmt_infos" - channels=$(gettag channels) - rate=$(gettag 'sample_rate') - case $rate in - 96) rate=96000;; - 48) rate=48000;; - 441) rate=44100;; - 32) rate=32000;; - 24) rate=24000;; - 225) rate=22500;; - esac - bitrate=$(gettag 'bit_rate') - bitdepth=$(gettag 'sample_fmt') - bitdepth=${bitdepth//[A-z]/} - if [[ $bitrate == N/A ]] - then - unset bitrate - else - bitrate=$((bitrate / 1000)) - fi -} diff --git a/lib/tags/flac b/lib/tags/flac deleted file mode 100644 index 1a41a4a..0000000 --- a/lib/tags/flac +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash -getInfosFLAC_version='FLAC-4' -tagreaders+=( "$getInfosFLAC_version" ) -getInfos::FLAC() { - tagreader="$getInfosFLAC_version" - infos=$( - metaflac \ - --show-tag=ALBUM \ - --show-tag=ALBUMARTIST \ - --show-tag=ARTIST \ - --show-tag=COMPOSER \ - --show-tag=DATE \ - --show-tag=DISCNUMBER \ - --show-tag=GENRE \ - --show-tag=PERFORMER \ - --show-tag=RELEASECOUNTRY \ - --show-tag=TITLE \ - --show-tag=TRACKNUMBER \ - --show-tag=TRACKTOTAL \ - "$sourcepath/$filename" - ) - albumartist=$(gettag albumartist) - album=$(gettag album) - artist=$(gettag artist) - composer=$(gettag composer) - disc=$(gettag discnumber) - genre=$(gettag genre) - performer=$(gettag performer) - releasecountry=$(gettag releasecountry) - title=$(gettag title) - tracknum=$(gettag tracknumber) - tracktotal=$(gettag tracktotal) - year=$(gettag date) - if [ -n "$tracknum" -a -n "$tracktotal" ] - then - tracknum="$tracknum/$tracktotal" - fi - year=$(gettag DATE) - { - read rate - read channels - read bitdepth - } < <( - metaflac \ - --show-sample-rate \ - --show-channels \ - --show-bps \ - "$sourcepath/$filename" - ) -} diff --git a/lib/tags/getInfos::FLAC b/lib/tags/getInfos::FLAC new file mode 100644 index 0000000..db6e3ac --- /dev/null +++ b/lib/tags/getInfos::FLAC @@ -0,0 +1,54 @@ +#!/usr/bin/env bash +getInfosFLAC_version='FLAC-5' +tagreaders+=( "$getInfosFLAC_version" ) +getInfos::FLAC() { + local \ + infos \ + + tagreader="$getInfosFLAC_version" + infos=$( + metaflac \ + --show-sample-rate \ + --show-channels \ + --show-bps \ + --show-tag=ALBUM \ + --show-tag=ALBUMARTIST \ + --show-tag=ARTIST \ + --show-tag=COMPOSER \ + --show-tag=DATE \ + --show-tag=DISCNUMBER \ + --show-tag=GENRE \ + --show-tag=PERFORMER \ + --show-tag=RELEASECOUNTRY \ + --show-tag=REPLAYGAIN_ALBUM_GAIN \ + --show-tag=REPLAYGAIN_TRACK_GAIN \ + --show-tag=TITLE \ + --show-tag=TRACKNUMBER \ + --show-tag=TRACKTOTAL \ + "$sourcepath/$filename" + ) + albumartist=$(gettag albumartist) + album=$(gettag album) + artist=$(gettag artist) + composer=$(gettag composer) + disc=$(gettag discnumber) + genre=$(gettag genre) + performer=$(gettag performer) + releasecountry=$(gettag releasecountry) + replaygain_alb=$(gettag replaygain_album_gain) + replaygain_trk=$(gettag replaygain_track_gain) + title=$(gettag title) + tracknum=$(gettag tracknumber) + tracktotal=$(gettag tracktotal) + year=$(gettag date) + if [ -n "$tracknum" -a -n "$tracktotal" ] + then + tracknum="$tracknum/$tracktotal" + fi + year=$(gettag DATE) + { + read rate + read channels + read depth + } <<<"$infos" +} diff --git a/lib/tags/opus b/lib/tags/getInfos::Opus similarity index 82% rename from lib/tags/opus rename to lib/tags/getInfos::Opus index 3f0e735..0736762 100644 --- a/lib/tags/opus +++ b/lib/tags/getInfos::Opus @@ -1,8 +1,11 @@ -#!/bin/bash -getInfosOpus_version='Opus-3' +#!/usr/bin/env bash +getInfosOpus_version='Opus-4' tagreaders+=( "$getInfosOpus_version" ) getInfos::Opus() { tagreader="$getInfosOpus_version" + local \ + infos \ + infos=$( opusinfo "$sourcepath/$filename" \ | sed 's/\t//' @@ -15,6 +18,8 @@ getInfos::Opus() { genre=$(gettag genre) performer=$(gettag performer) releasecountry=$(gettag releasecountry) + replaygain_alb=$(gettag replaygain_album_gain) + replaygain_trk=$(gettag replaygain_track_gain) title=$(gettag title) tracknum=$(gettag tracknumber) tracktotal=$(gettag tracktotal) diff --git a/lib/tags/getInfos::ffmpeg b/lib/tags/getInfos::ffmpeg new file mode 100644 index 0000000..ce7a301 --- /dev/null +++ b/lib/tags/getInfos::ffmpeg @@ -0,0 +1,75 @@ +#!/usr/bin/env bash +getInfosffmpeg_version='ffmpeg-8' +tagreaders+=( "$getInfosffmpeg_version" ) +getInfos::ffmpeg() { + tagreader="$getInfosffmpeg_version" + local \ + infos \ + + infos=$( + ffprobe -v error \ + -show_entries " \ + format_tags= \ + album_artist, \ + album, \ + artist, \ + composer, \ + disc, \ + genre, \ + TOPE, \ + releasecountry, \ + 'MusicBrainz Album Release Country',\ + title, \ + track, \ + date, \ + replaygain_track_gain, \ + replaygain_album_gain \ + :stream= \ + bit_rate, \ + channels, \ + sample_fmt \ + sample_rate, \ + " \ + -of default=noprint_wrappers=1 \ + -i "$sourcepath/$filename" + ) + albumartist=$(gettag album_artist) + album=$(gettag album) + artist=$(gettag artist) + composer=$(gettag composer) + disc=$(gettag disc) + genre=$(gettag genre) + performer=$(gettag TOPE) + releasecountry=$(gettag releasecountry) + [[ -z "$releasecountry" ]] \ + && releasecountry=$(gettag "MusicBrainz Album Release Country") + replaygain_alb=$(gettag replaygain_album_gain) + replaygain_trk=$(gettag replaygain_track_gain) + title=$(gettag title) + tracknum=$(gettag track) + year=$(gettag date) + expr='^[0-9]*$' + if [ -n "$genre" ] && [[ $genre =~ $expr ]] + then + genre="${id3genres[$genre]}" + fi + channels=$(gettag channels) + rate=$(gettag 'sample_rate') + case $rate in + 96) rate=96000;; + 48) rate=48000;; + 441) rate=44100;; + 32) rate=32000;; + 24) rate=24000;; + 225) rate=22500;; + esac + bitrate=$(gettag 'bit_rate') + depth=$(gettag 'sample_fmt') + depth=${depth//[A-z]/} + if [[ $bitrate == N/A ]] + then + unset bitrate + else + bitrate=$((bitrate / 1000)) + fi +} diff --git a/lib/tags/soxi b/lib/tags/getInfos::soxi similarity index 78% rename from lib/tags/soxi rename to lib/tags/getInfos::soxi index 4d22209..97e6a4f 100644 --- a/lib/tags/soxi +++ b/lib/tags/getInfos::soxi @@ -1,8 +1,11 @@ -#!/bin/bash -getInfosSoxi_version='soxi-2' +#!/usr/bin/env bash +getInfosSoxi_version='soxi-3' tagreaders+=( "$getInfosSoxi_version" ) getInfos::soxi() { tagreader="$getInfosSoxi_version" + local \ + infos \ + infos=$( soxi "$sourcepath/$filename" \ | grep -v METADATA_BLOCK_PICTURE @@ -15,6 +18,8 @@ getInfos::soxi() { genre=$(gettag genre) performer=$(gettag performer) releasecountry=$(gettag releasecountry) + replaygain_alb=$(gettag replaygain_album_gain) + replaygain_trk=$(gettag replaygain_track_gain) title=$(gettag title) tracknum=$(gettag tracknumber) tracktotal=$(gettag tracktotal) @@ -29,6 +34,6 @@ getInfos::soxi() { bitrate=$(gettag 'bit rate') bitrate=${bitrate%k} bitrate=${bitrate%%.*} - bitdepth=$(gettag precision) - bitdepth=${bitdepth%-bit} + depth=$(gettag precision) + depth=${depth%-bit} } diff --git a/lib/tags/update b/lib/tags/update index 789c5a8..168597c 100644 --- a/lib/tags/update +++ b/lib/tags/update @@ -1,5 +1,7 @@ -#!/bin/bash +#!/usr/bin/env bash updateTags() { + local reader \ + for reader in "${tagreaders[@]}" do tagreaderclause+="${tagreaderclause:+ AND }NOT tags.tagreader = \"$reader\"" @@ -19,6 +21,8 @@ updateTags() { tags.genre, tags.performer, tags.releasecountry, + tags.replaygain_alb, + tags.replaygain_trk, tags.title, tags.track, tags.year, @@ -84,6 +88,10 @@ echo ' rest=${rest#*::AtOM:SQL:Sep::} oldreleasecountry=${rest%%::AtOM:SQL:Sep::*} rest=${rest#*::AtOM:SQL:Sep::} + oldreplaygain_alb=${rest%%::AtOM:SQL:Sep::*} + rest=${rest#*::AtOM:SQL:Sep::} + oldreplaygain_trk=${rest%%::AtOM:SQL:Sep::*} + rest=${rest#*::AtOM:SQL:Sep::} oldtitle=${rest%%::AtOM:SQL:Sep::*} rest=${rest#*::AtOM:SQL:Sep::} oldtrack=${rest%%::AtOM:SQL:Sep::*} @@ -109,11 +117,13 @@ echo ' [[ $oldalbumartist != "$albumartist" ]]&&uaa=1 [[ $oldartist != "$artist" ]]&& uar=1 [[ $oldcomposer != "$composer" ]]&& uco=1 - [[ $olddepth != "$bitdepth" ]]&& ude=1 + [[ $olddepth != "$depth" ]]&& ude=1 [[ $olddisc != "$disc" ]]&& udi=1 [[ $oldgenre != "$genre" ]]&& uge=1 [[ $oldperformer != "$performer" ]]&& upe=1 [[ $oldreleasecountry != "$releasecountry" ]]&& urc=1 + [[ $oldreplaygain_alb != "$replaygain_alb" ]]&& urpa=1 + [[ $oldreplaygain_trk != "$replaygain_trk" ]]&& urpt=1 [[ $oldtitle != "$title" ]]&& uti=1 [[ $oldtrack != "$tracknum" ]]&& utr=1 [[ $oldyear != "$year" ]]&& uye=1 @@ -125,11 +135,13 @@ echo ' ${uaa:+albumartist "${albumartist:+::AtOM:FT::}${albumartist:-NULL}"}\ ${uar:+artist "${artist:+::AtOM:FT::}${artist:-NULL}"}\ ${uco:+composer "${composer:+::AtOM:FT::}${composer:-NULL}"}\ - ${ude:+depth "${bitdepth:-NULL}"} \ + ${ude:+depth "${depth:-NULL}"} \ ${udi:+disc "${disc:-NULL}"} \ ${uge:+genre "${genre:-NULL}"} \ ${upe:+performer "${performer:+::AtOM:FT::}${performer:-NULL}"}\ ${urc:+releasecountry "${releasecountry:+::AtOM:FT::}${releasecountry:-NULL}"}\ + ${urpa:+replaygain_alb "${replaygain_alb:-NULL}"}\ + ${urpt:+replaygain_trk "${replaygain_trk:-NULL}"}\ ${uti:+title "${title:+::AtOM:FT::}${title:-NULL}"}\ ${utr:+track "${track:+::AtOM:FT::}${tracknum:-NULL}"}\ ${uye:+year "${year:-NULL}"} \ @@ -138,37 +150,58 @@ echo ' ${uch:+channels "${channels:-NULL}"} \ ${ubi:+bitrate "${bitrate:-NULL}"} \ tagreader "$tagreader" \ - >/dev/null <<<"source_file = $sourcefileid" - unset genre \ - albumartist \ - year \ - album \ - disc \ - artist \ - tracknum \ - title \ - composer \ - performer \ - releasecountry \ - rate \ - bitdepth \ - bitrate \ - channels \ - ual \ - uaa \ - uar \ - uco \ - ude \ - udi \ - uge \ - upe \ - urc \ - uti \ - utr \ - uye \ - ura \ - uch \ - ubi + >/dev/null <<<"source_file = $sourcefileid" + unset genre \ + albumartist \ + year \ + album \ + disc \ + artist \ + tracknum \ + title \ + composer \ + performer \ + releasecountry \ + replaygain_alb \ + replaygain_trk \ + rate \ + depth \ + bitrate \ + channels \ + oldgenre \ + oldalbumartist \ + oldyear \ + oldalbum \ + olddisc \ + oldartist \ + oldtracknum \ + oldtitle \ + oldcomposer \ + oldperformer \ + oldreleasecountry \ + oldreplaygain_alb \ + oldreplaygain_trk \ + oldrate \ + olddepth \ + oldbitrate \ + oldchannels \ + ual \ + uaa \ + uar \ + uco \ + ude \ + udi \ + uge \ + upe \ + urc \ + urpa \ + urpt \ + uti \ + utr \ + uye \ + ura \ + uch \ + ubi fi done echo 'COMMIT;' >&3 diff --git a/share/schema.sql b/share/schema.sql index 0704c2d..9d556c8 100644 --- a/share/schema.sql +++ b/share/schema.sql @@ -59,6 +59,8 @@ CREATE TABLE IF NOT EXISTS tags ( composer TEXT, performer TEXT, releasecountry TEXT, + replaygain_alb TEXT, + replaygain_trk TEXT, depth INTEGER, rate INTEGER, channels INTEGER, @@ -131,10 +133,12 @@ CREATE TRIGGER IF NOT EXISTS force_destination_update_on_tag_update composer, performer, releasecountry, + replaygain_alb, + replaygain_trk, rate, channels, bitrate, - bitdepth + depth ON tags BEGIN UPDATE destination_files SET last_change=0