Skip to content

Commit

Permalink
Fix error reporting for tag writing errors
Browse files Browse the repository at this point in the history
  • Loading branch information
complexlogic committed Feb 8, 2025
1 parent 909d3fa commit 9f38860
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 35 deletions.
4 changes: 2 additions & 2 deletions src/scan.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ bool ScanJob::scan(std::mutex *ffmpeg_mutex)
}
}
ScanReturn ret;
std::vector<int> remove;
std::vector<size_t> remove;
for (Track &track : tracks) {
ret = track.scan(config, ffmpeg_mutex);
if (ret == ScanReturn::ERROR) {
Expand Down Expand Up @@ -556,7 +556,7 @@ void ScanJob::tag_tracks()
std::sort(tracks.begin(), tracks.end(), [](const auto &a, const auto &b){ return a.path.string() < b.path.string(); });
for (Track &track : tracks) {
if (config.tag_mode != 's')
tag_track(track, config);
error |= !tag_track(track, config);

if (tab_output) {
// Filename;Loudness;Gain (dB);Peak;Peak (dB);Peak Type;Clipping Adjustment;
Expand Down
52 changes: 20 additions & 32 deletions src/tag.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,6 @@

#define MP4_ATOM_STRING "----:com.apple.iTunes:"
#define FORMAT_MP4_TAG(s, tag) s.append(MP4_ATOM_STRING).append(tag)
#define tag_error(t) output_error("Couldn't write to: {}", t.path.string())

using RGTagsArray = std::array<TagLib::String, 7>;

Expand Down Expand Up @@ -166,95 +165,84 @@ static const std::array<TagLib::String, 2> R128_STRING = {{
}};
static_assert((size_t) R128Tag::MAX_VAL == R128_STRING.size());

void tag_track(ScanJob::Track &track, const Config &config)
bool tag_track(ScanJob::Track &track, const Config &config)
{
bool ret = false;
switch (track.type) {
case FileType::MP2:
case FileType::MP3:
if (!tag_mp3(track, config))
tag_error(track);
ret = tag_mp3(track, config);
break;

case FileType::FLAC:
if (!tag_flac(track, config))
tag_error(track);
ret = tag_flac(track, config);
break;

case FileType::OGG:
switch (track.codec_id) {
case AV_CODEC_ID_OPUS:
if (!tag_ogg<TagLib::Ogg::Opus::File>(track, config))
tag_error(track);
ret = tag_ogg<TagLib::Ogg::Opus::File>(track, config);
break;

case AV_CODEC_ID_VORBIS:
if (!tag_ogg<TagLib::Ogg::Vorbis::File>(track, config))
tag_error(track);
ret = tag_ogg<TagLib::Ogg::Vorbis::File>(track, config);
break;

case AV_CODEC_ID_FLAC:
if (!tag_ogg<TagLib::Ogg::FLAC::File>(track, config))
tag_error(track);
ret = tag_ogg<TagLib::Ogg::FLAC::File>(track, config);
break;

case AV_CODEC_ID_SPEEX:
if (!tag_ogg<TagLib::Ogg::Speex::File>(track, config))
tag_error(track);
ret = tag_ogg<TagLib::Ogg::Speex::File>(track, config);
break;

default:
if (!tag_ogg<TagLib::FileRef>(track, config))
tag_error(track);
ret = tag_ogg<TagLib::FileRef>(track, config);
break;
}
break;

case FileType::OPUS:
if (!tag_ogg<TagLib::Ogg::Opus::File>(track, config))
tag_error(track);
ret = tag_ogg<TagLib::Ogg::Opus::File>(track, config);
break;

case FileType::M4A:
if (!tag_mp4(track, config))
tag_error(track);
ret = tag_mp4(track, config);
break;

case FileType::WMA:
if (!tag_wma(track, config))
tag_error(track);
ret = tag_wma(track, config);
break;

case FileType::WAV:
if (!tag_riff<TagLib::RIFF::WAV::File>(track, config))
tag_error(track);
ret = tag_riff<TagLib::RIFF::WAV::File>(track, config);
break;

case FileType::AIFF:
if (!tag_riff<TagLib::RIFF::AIFF::File>(track, config))
tag_error(track);
ret = tag_riff<TagLib::RIFF::AIFF::File>(track, config);
break;

case FileType::WAVPACK:
if (!tag_apev2<TagLib::WavPack::File>(track, config))
tag_error(track);
ret = tag_apev2<TagLib::WavPack::File>(track, config);
break;

case FileType::APE:
case FileType::TAK:
if (!tag_apev2<TagLib::APE::File>(track, config))
tag_error(track);
ret = tag_apev2<TagLib::APE::File>(track, config);
break;

case FileType::MPC:
if (!tag_apev2<TagLib::MPC::File>(track, config))
tag_error(track);
ret = tag_apev2<TagLib::MPC::File>(track, config);
break;

default:
break;
}
if (track.mtime)
std::filesystem::last_write_time(track.path, *(track.mtime));
if (!ret)
output_error("Couldn't write tags to: {}", track.path.string());
return ret;
}

bool tag_exists(const ScanJob::Track &track)
Expand Down
2 changes: 1 addition & 1 deletion src/tag.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@

#define GAIN_TO_Q78(gain) static_cast<int16_t>(std::round(gain * 256.0))

void tag_track(ScanJob::Track &track, const Config &config);
bool tag_track(ScanJob::Track &track, const Config &config);
bool tag_exists(const ScanJob::Track &track);
bool set_opus_header_gain(const char *path, int16_t gain);

0 comments on commit 9f38860

Please sign in to comment.