From 1c2e87b74189f99f756bfe9879df9a930634a280 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Wed, 17 Dec 2025 22:58:17 +0100 Subject: [PATCH] Organize: Skip existing files if not overwriting Fixes #1484 --- src/organize/organize.cpp | 26 ++++++++++++++++++++++++++ src/organize/organize.h | 1 + 2 files changed, 27 insertions(+) diff --git a/src/organize/organize.cpp b/src/organize/organize.cpp index 068e94fdf..41e3ae943 100644 --- a/src/organize/organize.cpp +++ b/src/organize/organize.cpp @@ -206,6 +206,15 @@ void Organize::ProcessSomeFiles() { if (dest_type != Song::FileType::Unknown) { // Get the preset TranscoderPreset preset = Transcoder::PresetForFileType(dest_type); + + // Check if the destination file already exists and we're not allowed to overwrite + const QString dest_filename_with_new_ext = Utilities::FiddleFileExtension(task.song_info_.new_filename_, preset.extension_); + if (ShouldSkipFile(dest_filename_with_new_ext)) { + qLog(Debug) << "Skipping" << task.song_info_.song_.url().toLocalFile() << ", destination file already exists"; + tasks_complete_++; + continue; + } + qLog(Debug) << "Transcoding with" << preset.name_; task.transcoded_filename_ = transcoder_->GetFile(task.song_info_.song_.url().toLocalFile(), preset); @@ -222,6 +231,13 @@ void Organize::ProcessSomeFiles() { } } + // Check if the destination file already exists and we're not allowed to overwrite + if (ShouldSkipFile(task.song_info_.new_filename_)) { + qLog(Debug) << "Skipping" << task.song_info_.song_.url().toLocalFile() << ", destination file already exists"; + tasks_complete_++; + continue; + } + MusicStorage::CopyJob job; job.source_ = task.transcoded_filename_.isEmpty() ? task.song_info_.song_.url().toLocalFile() : task.transcoded_filename_; job.destination_ = task.song_info_.new_filename_; @@ -292,6 +308,16 @@ void Organize::ProcessSomeFiles() { } +bool Organize::ShouldSkipFile(const QString &filename) const { + + if (overwrite_) { + return false; + } + + return QFile::exists(destination_->LocalPath() + QLatin1Char('/') + filename); + +} + Song::FileType Organize::CheckTranscode(const Song::FileType original_type) const { if (original_type == Song::FileType::Stream) return Song::FileType::Unknown; diff --git a/src/organize/organize.h b/src/organize/organize.h index aad14c32c..c3ec4abb1 100644 --- a/src/organize/organize.h +++ b/src/organize/organize.h @@ -94,6 +94,7 @@ class Organize : public QObject { void SetSongProgress(const float progress, const bool transcoded = false); void UpdateProgress(); Song::FileType CheckTranscode(const Song::FileType original_type) const; + bool ShouldSkipFile(const QString &filename) const; private: struct Task {