diff --git a/application/main.cpp b/application/main.cpp index e065d2e..2f51f90 100644 --- a/application/main.cpp +++ b/application/main.cpp @@ -83,6 +83,8 @@ SetTagInfoArgs::SetTagInfoArgs(Argument &filesArg, Argument &verboseArg, Argumen , backupDirArg("temp-dir", '\0', "specifies the directory for temporary/backup files", { "path" }) , layoutOnlyArg("layout-only", 'l', "confirms layout-only changes") , preserveModificationTimeArg("preserve-modification-time", '\0', "preserves the file's modification time") + , preserveMuxingAppArg("preserve-muxing-app", '\0', "preserves the file's muxing app meta-data value") + , preserveWritingAppArg("preserve-writing-app", '\0', "preserves the file's writing app meta-data value") , jsArg("java-script", 'j', "modifies tag fields via the specified JavaScript", { "path" }) , jsSettingsArg("script-settings", '\0', "passes settings to the JavaScript specified via --java-script", { "key=value" }) , setTagInfoArg("set", 's', "sets the specified tag information and attachments") @@ -140,7 +142,7 @@ SetTagInfoArgs::SetTagInfoArgs(Argument &filesArg, Argument &verboseArg, Argumen &id3v2UsageArg, &id3InitOnCreateArg, &id3TransferOnRemovalArg, &mergeMultipleSuccessiveTagsArg, &id3v2VersionArg, &encodingArg, &removeTargetArg, &addAttachmentArg, &updateAttachmentArg, &removeAttachmentArg, &removeExistingAttachmentsArg, &minPaddingArg, &maxPaddingArg, &prefPaddingArg, &tagPosArg, &indexPosArg, &forceRewriteArg, &backupDirArg, &layoutOnlyArg, &preserveModificationTimeArg, - &jsArg, &jsSettingsArg, &verboseArg, &pedanticArg, &quietArg, &outputFilesArg }); + &preserveMuxingAppArg, &preserveWritingAppArg, &jsArg, &jsSettingsArg, &verboseArg, &pedanticArg, &quietArg, &outputFilesArg }); } } // namespace Cli diff --git a/application/settings.cpp b/application/settings.cpp index 5cd524b..9ae8443 100644 --- a/application/settings.cpp +++ b/application/settings.cpp @@ -129,6 +129,8 @@ void restore() v.tagPocessing.autoTagManagement = settings.value(QStringLiteral("autotagmanagement"), v.tagPocessing.autoTagManagement).toBool(); v.tagPocessing.preserveModificationTime = settings.value(QStringLiteral("preservemodificationtime"), v.tagPocessing.preserveModificationTime).toBool(); + v.tagPocessing.preserveMuxingApp = settings.value(QStringLiteral("preservemuxingapp"), v.tagPocessing.preserveMuxingApp).toBool(); + v.tagPocessing.preserveWritingApp = settings.value(QStringLiteral("preservewritingapp"), v.tagPocessing.preserveWritingApp).toBool(); settings.beginGroup(QStringLiteral("id3v1")); switch (settings.value(QStringLiteral("usage"), 0).toInt()) { case 1: @@ -266,6 +268,8 @@ void save() settings.setValue(QStringLiteral("unsupportedfieldhandling"), static_cast(v.tagPocessing.unsupportedFieldHandling)); settings.setValue(QStringLiteral("autotagmanagement"), v.tagPocessing.autoTagManagement); settings.setValue(QStringLiteral("preservemodificationtime"), v.tagPocessing.preserveModificationTime); + settings.setValue(QStringLiteral("preservemuxingapp"), v.tagPocessing.preserveMuxingApp); + settings.setValue(QStringLiteral("preservewritingapp"), v.tagPocessing.preserveWritingApp); settings.beginGroup(QStringLiteral("id3v1")); settings.setValue(QStringLiteral("usage"), static_cast(v.tagPocessing.creationSettings.id3v1usage)); settings.endGroup(); diff --git a/application/settings.h b/application/settings.h index edafa7c..f3530a7 100644 --- a/application/settings.h +++ b/application/settings.h @@ -80,6 +80,8 @@ struct TagProcessing { UnsupportedFieldHandling unsupportedFieldHandling = UnsupportedFieldHandling::Ignore; bool autoTagManagement = true; bool preserveModificationTime = false; + bool preserveMuxingApp = false; + bool preserveWritingApp = false; TagParser::TagCreationSettings creationSettings; FileLayout fileLayout; }; diff --git a/cli/mainfeatures.cpp b/cli/mainfeatures.cpp index d3d5dc9..356e2d6 100644 --- a/cli/mainfeatures.cpp +++ b/cli/mainfeatures.cpp @@ -701,6 +701,12 @@ void setTagInfo(const SetTagInfoArgs &args) fileInfo.setForceIndexPosition(args.forceIndexPosArg.isPresent()); fileInfo.setForceRewrite(args.forceRewriteArg.isPresent()); fileInfo.setWritingApplication(APP_NAME " v" APP_VERSION); + if (args.preserveMuxingAppArg.isPresent()) { + fileInfo.setFileHandlingFlags(fileInfo.fileHandlingFlags() | MediaFileHandlingFlags::PreserveMuxingApplication); + } + if (args.preserveWritingAppArg.isPresent()) { + fileInfo.setFileHandlingFlags(fileInfo.fileHandlingFlags() | MediaFileHandlingFlags::PreserveWritingApplication); + } // set backup path if (args.backupDirArg.isPresent()) { diff --git a/cli/mainfeatures.h b/cli/mainfeatures.h index 36ea63d..22b41ab 100644 --- a/cli/mainfeatures.h +++ b/cli/mainfeatures.h @@ -48,6 +48,8 @@ struct SetTagInfoArgs { CppUtilities::ConfigValueArgument backupDirArg; CppUtilities::ConfigValueArgument layoutOnlyArg; CppUtilities::ConfigValueArgument preserveModificationTimeArg; + CppUtilities::ConfigValueArgument preserveMuxingAppArg; + CppUtilities::ConfigValueArgument preserveWritingAppArg; CppUtilities::ConfigValueArgument jsArg; CppUtilities::ConfigValueArgument jsSettingsArg; CppUtilities::OperationArgument setTagInfoArg; diff --git a/gui/settingsdialog.cpp b/gui/settingsdialog.cpp index c500c8c..359dad8 100644 --- a/gui/settingsdialog.cpp +++ b/gui/settingsdialog.cpp @@ -358,6 +358,8 @@ bool TagProcessingGeneralOptionPage::apply() } settings.autoTagManagement = ui()->autoTagManagementCheckBox->isChecked(); settings.preserveModificationTime = ui()->preserveModificationTimeCheckBox->isChecked(); + settings.preserveMuxingApp = ui()->preserveMuxingAppCheckBox->isChecked(); + settings.preserveWritingApp = ui()->preserveWritingAppCheckBox->isChecked(); } return true; } @@ -393,6 +395,8 @@ void TagProcessingGeneralOptionPage::reset() } ui()->autoTagManagementCheckBox->setChecked(settings.autoTagManagement); ui()->preserveModificationTimeCheckBox->setChecked(settings.preserveModificationTime); + ui()->preserveMuxingAppCheckBox->setChecked(settings.preserveMuxingApp); + ui()->preserveWritingAppCheckBox->setChecked(settings.preserveWritingApp); } } diff --git a/gui/tageditorwidget.cpp b/gui/tageditorwidget.cpp index c2b7b60..3b4bbd3 100644 --- a/gui/tageditorwidget.cpp +++ b/gui/tageditorwidget.cpp @@ -1155,7 +1155,8 @@ bool TagEditorWidget::startSaving() m_fileWatcher->removePath(m_currentPath); // use current configuration const auto &settings = Settings::values(); - const auto &fileLayoutSettings = settings.tagPocessing.fileLayout; + const auto &generalSettings = settings.tagPocessing; + const auto &fileLayoutSettings = generalSettings.fileLayout; m_fileInfo.setForceRewrite(fileLayoutSettings.forceRewrite); m_fileInfo.setTagPosition(fileLayoutSettings.preferredTagPosition); m_fileInfo.setForceTagPosition(fileLayoutSettings.forceTagPosition); @@ -1165,6 +1166,12 @@ bool TagEditorWidget::startSaving() m_fileInfo.setMaxPadding(fileLayoutSettings.maxPadding); m_fileInfo.setPreferredPadding(fileLayoutSettings.preferredPadding); m_fileInfo.setBackupDirectory(settings.editor.backupDirectory); + if (generalSettings.preserveMuxingApp) { + m_fileInfo.setFileHandlingFlags(m_fileInfo.fileHandlingFlags() | MediaFileHandlingFlags::PreserveMuxingApplication); + } + if (generalSettings.preserveWritingApp) { + m_fileInfo.setFileHandlingFlags(m_fileInfo.fileHandlingFlags() | MediaFileHandlingFlags::PreserveWritingApplication); + } const auto startThread = [this, preserveModificationTime = settings.tagPocessing.preserveModificationTime] { // define functions to show the saving progress and to actually applying the changes auto showPercentage([this](AbortableProgressFeedback &progress) { diff --git a/gui/tagprocessinggeneraloptionpage.ui b/gui/tagprocessinggeneraloptionpage.ui index fa7395b..02645b7 100644 --- a/gui/tagprocessinggeneraloptionpage.ui +++ b/gui/tagprocessinggeneraloptionpage.ui @@ -139,6 +139,29 @@ + + + + Miscellaneous + + + + + + Preserve muxing application + + + + + + + Preserve writing application + + + + + +