tageditor/application/settings.cpp

312 lines
16 KiB
C++

#include "./settings.h"
#include "./knownfieldmodel.h"
#include "./targetlevelmodel.h"
#include "resources/config.h"
#include <tagparser/backuphelper.h>
#include <tagparser/mediafileinfo.h>
#include <tagparser/tag.h>
#include <QApplication>
#include <QFile>
#include <QSettings>
using namespace QtUtilities;
using namespace TagParser;
namespace Settings {
AutoCompletition::AutoCompletition()
: fields(nullptr, KnownFieldModel::DefaultSelection::None)
{
}
Editor::Editor()
: fields(nullptr, KnownFieldModel::DefaultSelection::CommonFields)
, defaultTargets(nullptr, TargetLevelModel::DefaultSelection::MostUsefulTargets)
{
}
DbQuery::DbQuery()
: fields(QList<ChecklistItem>() << KnownFieldModel::mkItem(KnownField::Title) << KnownFieldModel::mkItem(KnownField::TrackPosition)
<< KnownFieldModel::mkItem(KnownField::DiskPosition) << KnownFieldModel::mkItem(KnownField::Album)
<< KnownFieldModel::mkItem(KnownField::Artist) << KnownFieldModel::mkItem(KnownField::RecordDate)
<< KnownFieldModel::mkItem(KnownField::Genre) << KnownFieldModel::mkItem(KnownField::Cover, Qt::Unchecked)
<< KnownFieldModel::mkItem(KnownField::Lyrics, Qt::Unchecked))
{
}
Settings &values()
{
static Settings settings;
return settings;
}
void restore()
{
QSettings settings(QSettings::IniFormat, QSettings::UserScope, QStringLiteral(PROJECT_NAME));
// move old config to new location
const QString oldConfig
= QSettings(QSettings::IniFormat, QSettings::UserScope, QApplication::organizationName(), QApplication::applicationName()).fileName();
QFile::rename(oldConfig, settings.fileName()) || QFile::remove(oldConfig);
settings.sync();
Settings &v = values();
settings.beginGroup(QStringLiteral("editor"));
switch (settings.value(QStringLiteral("adoptfields"), 0).toInt()) {
case 1:
v.editor.adoptFields = AdoptFields::WithinDirectory;
break;
case 2:
v.editor.adoptFields = AdoptFields::Always;
break;
default:
v.editor.adoptFields = AdoptFields::Never;
break;
}
v.editor.saveAndShowNextOnEnter = settings.value(QStringLiteral("saveandshownextonenter"), false).toBool();
v.editor.askBeforeDeleting = settings.value(QStringLiteral("askbeforedeleting"), true).toBool();
switch (settings.value(QStringLiteral("multipletaghandling"), 0).toInt()) {
case 0:
v.editor.multipleTagHandling = MultipleTagHandling::SingleEditorPerTarget;
break;
case 1:
v.editor.multipleTagHandling = MultipleTagHandling::SeparateEditors;
break;
}
v.editor.hideTagSelectionComboBox = settings.value(QStringLiteral("hidetagselectioncombobox"), false).toBool();
settings.beginGroup(QStringLiteral("autocorrection"));
v.editor.autoCompletition.insertTitleFromFilename = settings.value(QStringLiteral("inserttitlefromfilename"), false).toBool();
v.editor.autoCompletition.trimWhitespaces = settings.value(QStringLiteral("trimwhitespaces"), true).toBool();
v.editor.autoCompletition.formatNames = settings.value(QStringLiteral("formatnames"), false).toBool();
v.editor.autoCompletition.fixUmlauts = settings.value(QStringLiteral("fixumlauts"), false).toBool();
settings.beginGroup(QStringLiteral("customsubst"));
v.editor.autoCompletition.customSubstitution.enabled = settings.value(QStringLiteral("enabled")).toBool();
v.editor.autoCompletition.customSubstitution.regex = settings.value(QStringLiteral("regex")).toRegularExpression();
v.editor.autoCompletition.customSubstitution.replacement = settings.value(QStringLiteral("replacement")).toString();
settings.endGroup();
settings.endGroup();
v.editor.backupDirectory = settings.value(QStringLiteral("tempdir")).toString().toStdString();
v.editor.hideCoverButtons = settings.value(QStringLiteral("hidecoverbtn"), false).toBool();
settings.endGroup();
v.editor.fields.restore(settings, QStringLiteral("selectedfields"));
v.editor.autoCompletition.fields.restore(settings, QStringLiteral("autocorrectionfields"));
settings.beginGroup(QStringLiteral("info"));
v.editor.forceFullParse = settings.value(QStringLiteral("forcefullparse"), false).toBool();
#ifndef TAGEDITOR_NO_WEBVIEW
v.editor.noWebView = settings.value(QStringLiteral("nowebview"), false).toBool();
#endif
settings.endGroup();
settings.beginGroup(QStringLiteral("filebrowser"));
v.fileBrowser.hideBackupFiles = settings.value(QStringLiteral("hidebackupfiles"), true).toBool();
v.fileBrowser.readOnly = settings.value(QStringLiteral("readonly"), true).toBool();
settings.endGroup();
settings.beginGroup(QStringLiteral("tagprocessing"));
switch (settings.value(QStringLiteral("preferredencoding"), 1).toInt()) {
case 0:
v.tagPocessing.preferredEncoding = TagParser::TagTextEncoding::Latin1;
break;
case 2:
v.tagPocessing.preferredEncoding = TagParser::TagTextEncoding::Utf16BigEndian;
break;
case 3:
v.tagPocessing.preferredEncoding = TagParser::TagTextEncoding::Utf16LittleEndian;
break;
default:
v.tagPocessing.preferredEncoding = TagParser::TagTextEncoding::Utf8;
}
switch (settings.value(QStringLiteral("unsupportedfieldhandling"), 0).toInt()) {
case 1:
v.tagPocessing.unsupportedFieldHandling = UnsupportedFieldHandling::Discard;
break;
default:
v.tagPocessing.unsupportedFieldHandling = UnsupportedFieldHandling::Ignore;
}
v.tagPocessing.autoTagManagement = settings.value(QStringLiteral("autotagmanagement"), true).toBool();
settings.beginGroup(QStringLiteral("id3v1"));
switch (settings.value(QStringLiteral("usage"), 0).toInt()) {
case 1:
v.tagPocessing.creationSettings.id3v1usage = TagUsage::KeepExisting;
break;
case 2:
v.tagPocessing.creationSettings.id3v1usage = TagUsage::Never;
break;
default:
v.tagPocessing.creationSettings.id3v1usage = TagUsage::Always;
break;
}
settings.endGroup();
settings.beginGroup(QStringLiteral("id3v2"));
switch (settings.value(QStringLiteral("usage"), 0).toInt()) {
case 1:
v.tagPocessing.creationSettings.id3v2usage = TagUsage::KeepExisting;
break;
case 2:
v.tagPocessing.creationSettings.id3v2usage = TagUsage::Never;
break;
default:
v.tagPocessing.creationSettings.id3v2usage = TagUsage::Always;
}
v.tagPocessing.creationSettings.id3v2MajorVersion = static_cast<std::uint8_t>(settings.value(QStringLiteral("versiontobeused")).toUInt());
if (v.tagPocessing.creationSettings.id3v2MajorVersion < 1 || v.tagPocessing.creationSettings.id3v2MajorVersion > 4) {
v.tagPocessing.creationSettings.id3v2MajorVersion = 3;
}
v.tagPocessing.creationSettings.setFlag(
TagCreationFlags::KeepExistingId3v2Version, settings.value(QStringLiteral("keepversionofexistingtag"), true).toBool());
v.tagPocessing.creationSettings.setFlag(
TagCreationFlags::MergeMultipleSuccessiveId3v2Tags, settings.value(QStringLiteral("mergemultiplesuccessivetags"), true).toBool());
settings.endGroup();
v.editor.defaultTargets.restore(settings, QStringLiteral("targets"));
settings.beginGroup(QStringLiteral("filelayout"));
v.tagPocessing.fileLayout.forceRewrite = settings.value(QStringLiteral("forcerewrite"), true).toBool();
switch (settings.value(QStringLiteral("tagpos")).toInt()) {
case 0:
v.tagPocessing.fileLayout.preferredTagPosition = ElementPosition::BeforeData;
break;
case 1:
v.tagPocessing.fileLayout.preferredTagPosition = ElementPosition::AfterData;
break;
}
v.tagPocessing.fileLayout.forceTagPosition = settings.value(QStringLiteral("forcetagpos"), true).toBool();
switch (settings.value(QStringLiteral("indexpos")).toInt()) {
case 0:
v.tagPocessing.fileLayout.preferredIndexPosition = ElementPosition::BeforeData;
break;
case 1:
v.tagPocessing.fileLayout.preferredIndexPosition = ElementPosition::AfterData;
break;
}
v.tagPocessing.fileLayout.forceIndexPosition = settings.value(QStringLiteral("forceindexpos"), true).toBool();
v.tagPocessing.fileLayout.minPadding = settings.value(QStringLiteral("minpad"), 0).toUInt();
v.tagPocessing.fileLayout.maxPadding = settings.value(QStringLiteral("maxpad"), 0).toUInt();
v.tagPocessing.fileLayout.preferredPadding = settings.value(QStringLiteral("prefpad"), 0).toUInt();
settings.endGroup();
settings.endGroup();
settings.beginGroup(QStringLiteral("mainwindow"));
v.mainWindow.geometry = settings.value(QStringLiteral("geometry")).toByteArray();
v.mainWindow.state = settings.value(QStringLiteral("windowstate")).toByteArray();
v.mainWindow.currentFileBrowserDirectory = settings.value(QStringLiteral("currentfilebrowserdirectory")).toString();
v.mainWindow.layoutLocked = settings.value(QStringLiteral("layoutlocked"), v.mainWindow.layoutLocked).toBool();
settings.endGroup();
settings.beginGroup(QStringLiteral("dbquery"));
v.dbQuery.widgetShown = settings.value(QStringLiteral("visible"), false).toBool();
v.dbQuery.override = settings.value(QStringLiteral("override"), true).toBool();
v.dbQuery.fields.restore(settings, QStringLiteral("fields"));
v.dbQuery.musicBrainzUrl = settings.value(QStringLiteral("musicbrainzurl")).toString();
v.dbQuery.lyricsWikiaUrl = settings.value(QStringLiteral("lyricwikiurl")).toString();
v.dbQuery.makeItPersonalUrl = settings.value(QStringLiteral("makeitpersonalurl")).toString();
v.dbQuery.coverArtArchiveUrl = settings.value(QStringLiteral("coverartarchiveurl")).toString();
settings.endGroup();
settings.beginGroup(QStringLiteral("renamedlg"));
v.renamingUtility.scriptSource = settings.value(QStringLiteral("src")).toInt();
v.renamingUtility.externalScript = settings.value(QStringLiteral("file")).toString();
v.renamingUtility.editorScript = settings.value(QStringLiteral("script")).toString();
settings.endGroup();
v.qt.restore(settings);
}
void save()
{
QSettings settings(QSettings::IniFormat, QSettings::UserScope, QStringLiteral(PROJECT_NAME));
const Settings &v = values();
settings.beginGroup(QStringLiteral("editor"));
settings.setValue(QStringLiteral("adoptfields"), static_cast<int>(v.editor.adoptFields));
settings.setValue(QStringLiteral("saveandshownextonenter"), v.editor.saveAndShowNextOnEnter);
settings.setValue(QStringLiteral("askbeforedeleting"), v.editor.askBeforeDeleting);
settings.setValue(QStringLiteral("multipletaghandling"), static_cast<int>(v.editor.multipleTagHandling));
settings.setValue(QStringLiteral("hidetagselectioncombobox"), v.editor.hideTagSelectionComboBox);
settings.beginGroup(QStringLiteral("autocorrection"));
settings.setValue(QStringLiteral("inserttitlefromfilename"), v.editor.autoCompletition.insertTitleFromFilename);
settings.setValue(QStringLiteral("trimwhitespaces"), v.editor.autoCompletition.trimWhitespaces);
settings.setValue(QStringLiteral("formatnames"), v.editor.autoCompletition.formatNames);
settings.setValue(QStringLiteral("fixumlauts"), v.editor.autoCompletition.fixUmlauts);
settings.beginGroup(QStringLiteral("customsubst"));
settings.setValue(QStringLiteral("enabled"), v.editor.autoCompletition.customSubstitution.enabled);
settings.setValue(QStringLiteral("regex"), v.editor.autoCompletition.customSubstitution.regex);
settings.setValue(QStringLiteral("replacement"), v.editor.autoCompletition.customSubstitution.replacement);
settings.endGroup();
settings.endGroup();
settings.setValue(QStringLiteral("tempdir"), QString::fromStdString(v.editor.backupDirectory));
settings.setValue(QStringLiteral("hidecoverbtn"), v.editor.hideCoverButtons);
settings.endGroup();
v.editor.fields.save(settings, QStringLiteral("selectedfields"));
v.editor.autoCompletition.fields.save(settings, QStringLiteral("autocorrectionfields"));
settings.beginGroup(QStringLiteral("info"));
settings.setValue(QStringLiteral("forcefullparse"), v.editor.forceFullParse);
#ifndef TAGEDITOR_NO_WEBVIEW
settings.setValue(QStringLiteral("nowebview"), v.editor.noWebView);
#endif
settings.endGroup();
settings.beginGroup(QStringLiteral("filebrowser"));
settings.setValue(QStringLiteral("hidebackupfiles"), v.fileBrowser.hideBackupFiles);
settings.setValue(QStringLiteral("readonly"), v.fileBrowser.readOnly);
settings.endGroup();
settings.beginGroup(QStringLiteral("tagprocessing"));
settings.setValue(QStringLiteral("preferredencoding"), static_cast<int>(v.tagPocessing.preferredEncoding));
settings.setValue(QStringLiteral("unsupportedfieldhandling"), static_cast<int>(v.tagPocessing.unsupportedFieldHandling));
settings.setValue(QStringLiteral("autotagmanagement"), v.tagPocessing.autoTagManagement);
settings.beginGroup(QStringLiteral("id3v1"));
settings.setValue(QStringLiteral("usage"), static_cast<int>(v.tagPocessing.creationSettings.id3v1usage));
settings.endGroup();
settings.beginGroup(QStringLiteral("id3v2"));
settings.setValue(QStringLiteral("usage"), static_cast<int>(v.tagPocessing.creationSettings.id3v2usage));
settings.setValue(QStringLiteral("versiontobeused"), v.tagPocessing.creationSettings.id3v2MajorVersion);
settings.setValue(QStringLiteral("keepversionofexistingtag"), v.tagPocessing.creationSettings.flags & TagCreationFlags::KeepExistingId3v2Version);
settings.setValue(
QStringLiteral("mergemultiplesuccessivetags"), v.tagPocessing.creationSettings.flags & TagCreationFlags::MergeMultipleSuccessiveId3v2Tags);
settings.endGroup();
v.editor.defaultTargets.save(settings, QStringLiteral("targets"));
settings.beginGroup(QStringLiteral("filelayout"));
settings.setValue(QStringLiteral("forcerewrite"), v.tagPocessing.fileLayout.forceRewrite);
settings.setValue(QStringLiteral("tagpos"), static_cast<int>(v.tagPocessing.fileLayout.preferredTagPosition));
settings.setValue(QStringLiteral("forcetagpos"), v.tagPocessing.fileLayout.forceTagPosition);
settings.setValue(QStringLiteral("indexpos"), static_cast<int>(v.tagPocessing.fileLayout.preferredIndexPosition));
settings.setValue(QStringLiteral("forceindexpos"), v.tagPocessing.fileLayout.forceIndexPosition);
settings.setValue(QStringLiteral("minpad"), QVariant::fromValue(v.tagPocessing.fileLayout.minPadding));
settings.setValue(QStringLiteral("maxpad"), QVariant::fromValue(v.tagPocessing.fileLayout.maxPadding));
settings.setValue(QStringLiteral("prefpad"), QVariant::fromValue(v.tagPocessing.fileLayout.preferredPadding));
settings.endGroup();
settings.endGroup();
settings.beginGroup(QStringLiteral("mainwindow"));
settings.setValue(QStringLiteral("geometry"), v.mainWindow.geometry);
settings.setValue(QStringLiteral("windowstate"), v.mainWindow.state);
settings.setValue(QStringLiteral("currentfilebrowserdirectory"), v.mainWindow.currentFileBrowserDirectory);
settings.setValue(QStringLiteral("layoutlocked"), v.mainWindow.layoutLocked);
settings.endGroup();
settings.beginGroup(QStringLiteral("dbquery"));
settings.setValue(QStringLiteral("visible"), v.dbQuery.widgetShown);
settings.setValue(QStringLiteral("override"), v.dbQuery.override);
v.dbQuery.fields.save(settings, QStringLiteral("fields"));
settings.setValue(QStringLiteral("musicbrainzurl"), v.dbQuery.musicBrainzUrl);
settings.setValue(QStringLiteral("lyricwikiurl"), v.dbQuery.lyricsWikiaUrl);
settings.setValue(QStringLiteral("makeitpersonalurl"), v.dbQuery.makeItPersonalUrl);
settings.setValue(QStringLiteral("coverartarchiveurl"), v.dbQuery.coverArtArchiveUrl);
settings.endGroup();
settings.beginGroup(QStringLiteral("renamedlg"));
settings.setValue(QStringLiteral("src"), v.renamingUtility.scriptSource);
settings.setValue(QStringLiteral("file"), v.renamingUtility.externalScript);
settings.setValue(QStringLiteral("script"), v.renamingUtility.editorScript);
settings.endGroup();
v.qt.save(settings);
}
} // namespace Settings