Compare commits

..

9 Commits

Author SHA1 Message Date
Vincent Riquer
477490991b fix quoting consistency 2026-04-05 19:56:37 +02:00
Vincent Riquer
25207448ce atom: read rating before encoding 2026-04-05 19:40:57 +02:00
Vincent Riquer
f3316de76f Write "fmps_rating" tag when encoding (vorbis, opus, MP3) 2026-04-05 19:40:57 +02:00
Vincent Riquer
8ef25e1eba write rating to database 2026-04-05 19:40:57 +02:00
Vincent Riquer
e8370d989a Read fmps_rating tag 2026-04-05 19:40:57 +02:00
Vincent Riquer
63ee25260c schema: add "rating" column to table tags 2026-04-05 19:40:57 +02:00
ScriptFanix
ecfa6f73c6 Merge branch '31-old-files-cleanup-buggy' into 'dev'
Correctly handle skipped files when cleaning obsolete files

See merge request atom/AtOM!43
2026-04-01 01:31:11 +02:00
ScriptFanix
4722f51706 Resolve "Old files cleanup buggy" 2026-04-01 01:31:11 +02:00
Vincent Riquer
05b72b70d7 schema: remove unused column hash for newly created databases 2026-02-20 01:43:51 +01:00
12 changed files with 85 additions and 7 deletions

9
atom
View File

@ -226,7 +226,12 @@ do
rest=${line#*::AtOM:SQL:Sep::}
removeFileDestName=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*::AtOM:SQL:Sep::}
if [[ -n "${rest%%::AtOM:SQL:Sep::*}" ]]
then
removefile[$removeFileId]="${destinationpath["$removeFileDestName"]}/${rest%%::AtOM:SQL:Sep::*}"
else
removefile[$removeFileId]=''
fi
read -u4 -r -d $'\0' line
done
done
@ -411,6 +416,7 @@ echo '
tags.genre,
tags.performer,
tags.rate,
tags.rating,
tags.releasecountry,
tags.replaygain_alb,
tags.replaygain_trk,
@ -481,6 +487,8 @@ do
rest=${rest#*::AtOM:SQL:Sep::}
rate=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*::AtOM:SQL:Sep::}
rating=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*::AtOM:SQL:Sep::}
releasecountry=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*::AtOM:SQL:Sep::}
replaygain_alb=${rest%%::AtOM:SQL:Sep::*}
@ -534,6 +542,7 @@ do
mimetype \
performer \
rate \
rating \
releasecountry \
replaygain_alb \
replaygain_trk \

View File

@ -1,5 +1,5 @@
#!/usr/bin/env bash
currentdbversion=8
currentdbversion=9
checkDatabaseVersion() {
local dbversion
if dbversion=$(Select atom version <<<"\"1\" = 1")

View File

@ -0,0 +1,51 @@
#!/usr/bin/env bash
# Copyright © 2012-2026 ScriptFanix
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# A copy of the GNU General Public License v3 is includded in the LICENSE file
# at the root of the project.
upgradedatabase_8_9() {
echo "Upgrading database to version 9... (backup is $database.bak_v8)"
cp "$database" "$database.bak_v8"
echo '
ALTER TABLE tags ADD COLUMN rating FLOAT;
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,
rating,
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 9 <<<"1 = 1"
}

View File

@ -11,6 +11,7 @@ encodeFile::mp3() {
[ -n "$albumartist" ] && lameopts+=(--tv TPE2="$albumartist")
[ -n "$composer" ] && lameopts+=(--tv TCOM="$composer")
[ -n "$performer" ] && lameopts+=(--tv TOPE="$performer")
[ -n "$rating" ] && lameopts+=(--tv "FMPS_RATING=$rating")
[ -n "$releasecountry" ] \
&& lameopts+=(--tv TXXX="MusicBrainz Album Release Country=$releasecountry")
[ -n "$replaygain_alb" ] \

View File

@ -11,6 +11,7 @@ encodeFile::opus() {
[ -n "$disc" ] && opusencopts+=(--comment "DISCNUMBER=$disc")
[ -n "$genre" ] && opusencopts+=(--comment "GENRE=$genre")
[ -n "$performer" ] && opusencopts+=(--comment "PERFORMER=$performer")
[ -n "$rating" ] && opusencopts+=(--comment "FMPS_RATING=$rating")
[ -n "$releasecountry" ] \
&& opusencopts+=(--comment "RELEASECOUNTRY=$releasecountry")
[ -n "$replaygain_alb" ] \

View File

@ -8,6 +8,7 @@ encodeFile::vorbis() {
[ -n "$disc" ] && oggencopts+=(-c "DISCNUMBER=$disc")
[ -n "$genre" ] && oggencopts+=(-G "$genre")
[ -n "$performer" ] && oggencopts+=(-c "PERFORMER=$performer")
[ -n "$rating" ] && oggencopts+=(--comment "FMPS_RATING=$rating")
[ -n "$releasecountry" ] \
&& oggencopts+=(-c "RELEASECOUNTRY=$releasecountry")
[ -n "$replaygain_alb" ] \

View File

@ -1,5 +1,5 @@
#!/usr/bin/env bash
getInfosFLAC_version='FLAC-5'
getInfosFLAC_version='FLAC-6'
tagreaders+=( "$getInfosFLAC_version" )
getInfos::FLAC() {
local \
@ -17,6 +17,7 @@ getInfos::FLAC() {
--show-tag=COMPOSER \
--show-tag=DATE \
--show-tag=DISCNUMBER \
--show-tag=FMPS_RATING \
--show-tag=GENRE \
--show-tag=PERFORMER \
--show-tag=RELEASECOUNTRY \
@ -34,6 +35,7 @@ getInfos::FLAC() {
disc=$(gettag discnumber)
genre=$(gettag genre)
performer=$(gettag performer)
rating=$((gettag fmps_rating))
releasecountry=$(gettag releasecountry)
replaygain_alb=$(gettag replaygain_album_gain)
replaygain_trk=$(gettag replaygain_track_gain)

View File

@ -1,5 +1,5 @@
#!/usr/bin/env bash
getInfosOpus_version='Opus-4'
getInfosOpus_version='Opus-5'
tagreaders+=( "$getInfosOpus_version" )
getInfos::Opus() {
tagreader="$getInfosOpus_version"
@ -15,6 +15,7 @@ getInfos::Opus() {
artist=$(gettag artist)
composer=$(gettag composer)
disc=$(gettag discnumber)
rating=$(gettag fmps_rating)
genre=$(gettag genre)
performer=$(gettag performer)
releasecountry=$(gettag releasecountry)

View File

@ -1,5 +1,5 @@
#!/usr/bin/env bash
getInfosffmpeg_version='ffmpeg-9'
getInfosffmpeg_version='ffmpeg-10'
tagreaders+=( "$getInfosffmpeg_version" )
getInfos::ffmpeg() {
tagreader="$getInfosffmpeg_version"
@ -15,6 +15,7 @@ getInfos::ffmpeg() {
artist, \
composer, \
disc, \
fmps_rating,
genre, \
TOPE, \
releasecountry, \
@ -40,6 +41,7 @@ getInfos::ffmpeg() {
disc=$(gettag TAG:disc)
genre=$(gettag TAG:genre)
performer=$(gettag TAG:TOPE)
rating=$((gettag fmps_rationg))
releasecountry=$(gettag TAG:releasecountry)
[[ -z "$releasecountry" ]] \
&& releasecountry=$(gettag "TAG:MusicBrainz Album Release Country")

View File

@ -1,5 +1,5 @@
#!/usr/bin/env bash
getInfosSoxi_version='soxi-3'
getInfosSoxi_version='soxi-4'
tagreaders+=( "$getInfosSoxi_version" )
getInfos::soxi() {
tagreader="$getInfosSoxi_version"
@ -15,6 +15,7 @@ getInfos::soxi() {
artist=$(gettag artist)
composer=$(gettag composer)
disc=$(gettag discnumber)
rating=$(gettag fmps_rating)
genre=$(gettag genre)
performer=$(gettag performer)
releasecountry=$(gettag releasecountry)

View File

@ -20,6 +20,7 @@ updateTags() {
tags.disc,
tags.genre,
tags.performer,
tags.rating,
tags.releasecountry,
tags.replaygain_alb,
tags.replaygain_trk,
@ -86,6 +87,8 @@ echo '
rest=${rest#*::AtOM:SQL:Sep::}
oldperformer=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*::AtOM:SQL:Sep::}
oldrating=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*::AtOM:SQL:Sep::}
oldreleasecountry=${rest%%::AtOM:SQL:Sep::*}
rest=${rest#*::AtOM:SQL:Sep::}
oldreplaygain_alb=${rest%%::AtOM:SQL:Sep::*}
@ -139,6 +142,8 @@ echo '
${udi:+disc "${disc:-NULL}"} \
${uge:+genre "${genre:-NULL}"} \
${upe:+performer "${performer:+::AtOM:FT::}${performer:-NULL}"}\
${urr:+rating "${rating:+::AtOM:FT::}${rating:-NULL}"}\
${urc:+releasecountry "${releasecountry:+::AtOM:FT::}${releasecountry:-NULL}"}\
${urc:+releasecountry "${releasecountry:+::AtOM:FT::}${releasecountry:-NULL}"}\
${urpa:+replaygain_alb "${replaygain_alb:-NULL}"}\
${urpt:+replaygain_trk "${replaygain_trk:-NULL}"}\
@ -161,6 +166,7 @@ echo '
title \
composer \
performer \
rating \
releasecountry \
replaygain_alb \
replaygain_trk \
@ -178,6 +184,7 @@ echo '
oldtitle \
oldcomposer \
oldperformer \
oldrating \
oldreleasecountry \
oldreplaygain_alb \
oldreplaygain_trk \
@ -193,6 +200,7 @@ echo '
udi \
uge \
upe \
urr \
urc \
urpa \
urpt \

View File

@ -6,7 +6,6 @@ CREATE TABLE IF NOT EXISTS source_files (
id INTEGER PRIMARY KEY,
filename TEXT UNIQUE NOT NULL,
size INTEGER NOT NULL,
hash TEXT,
mime_type INTEGER,
last_change FLOAT NOT NULL DEFAULT (strftime('%s','now')),
last_seen INTEGER NOT NULL DEFAULT (strftime('%s','now')),
@ -58,6 +57,7 @@ CREATE TABLE IF NOT EXISTS tags (
title TEXT,
composer TEXT,
performer TEXT,
rating FLOAT,
releasecountry TEXT,
replaygain_alb TEXT,
replaygain_trk TEXT,
@ -132,6 +132,7 @@ CREATE TRIGGER IF NOT EXISTS force_destination_update_on_tag_update
title,
composer,
performer,
rating,
releasecountry,
replaygain_alb,
replaygain_trk,