tageditor/application/settings.cpp

292 lines
14 KiB
C++
Raw Normal View History

2015-09-06 20:20:00 +02:00
#include "./settings.h"
#include "./knownfieldmodel.h"
2016-05-26 02:15:41 +02:00
#include "./targetlevelmodel.h"
2015-04-22 19:33:53 +02:00
2017-02-20 19:41:15 +01:00
#include "resources/config.h"
2015-04-22 19:33:53 +02:00
#include <tagparser/mediafileinfo.h>
2016-03-03 22:21:15 +01:00
#include <tagparser/tag.h>
2015-04-22 19:33:53 +02:00
#include <tagparser/backuphelper.h>
#include <QApplication>
#include <QSettings>
2017-02-20 19:41:15 +01:00
#include <QFile>
2015-04-22 19:33:53 +02:00
using namespace Media;
namespace Settings {
2016-10-24 20:15:10 +02:00
AutoCompletition::AutoCompletition() :
fields(nullptr, KnownFieldModel::DefaultSelection::None)
{}
2015-04-22 19:33:53 +02:00
2016-10-24 20:15:10 +02:00
Editor::Editor() :
fields(nullptr, KnownFieldModel::DefaultSelection::CommonFields),
defaultTargets(nullptr, TargetLevelModel::DefaultSelection::MostUsefulTargets)
{}
2015-04-22 19:33:53 +02:00
2016-10-24 20:15:10 +02:00
DbQuery::DbQuery() :
fields(QList<Models::ChecklistItem>()
<< KnownFieldModel::mkItem(KnownField::Title)
<< KnownFieldModel::mkItem(KnownField::TrackPosition)
<< KnownFieldModel::mkItem(KnownField::DiskPosition)
<< KnownFieldModel::mkItem(KnownField::Album)
<< KnownFieldModel::mkItem(KnownField::Album)
<< KnownFieldModel::mkItem(KnownField::Year)
<< KnownFieldModel::mkItem(KnownField::Genre)
<< KnownFieldModel::mkItem(KnownField::Cover, Qt::Unchecked)
<< KnownFieldModel::mkItem(KnownField::Lyrics, Qt::Unchecked))
{}
2015-11-21 01:13:45 +01:00
2016-10-24 20:15:10 +02:00
Settings &values()
2015-11-21 01:13:45 +01:00
{
2016-10-24 20:15:10 +02:00
static Settings settings;
return settings;
2016-08-14 22:49:47 +02:00
}
2015-04-22 19:33:53 +02:00
void restore()
{
2017-02-20 19:41:15 +01:00
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();
2016-10-24 20:15:10 +02:00
Settings &v = values();
2015-04-22 19:33:53 +02:00
settings.beginGroup(QStringLiteral("editor"));
switch(settings.value(QStringLiteral("adoptfields"), 0).toInt()) {
case 1:
2016-10-24 20:15:10 +02:00
v.editor.adoptFields = AdoptFields::WithinDirectory;
2015-04-22 19:33:53 +02:00
break;
case 2:
2016-10-24 20:15:10 +02:00
v.editor.adoptFields = AdoptFields::Always;
2015-04-22 19:33:53 +02:00
break;
default:
2016-10-24 20:15:10 +02:00
v.editor.adoptFields = AdoptFields::Never;
2015-04-22 19:33:53 +02:00
break;
};
2016-10-24 20:15:10 +02:00
v.editor.saveAndShowNextOnEnter = settings.value(QStringLiteral("saveandshownextonenter"), false).toBool();
v.editor.askBeforeDeleting = settings.value(QStringLiteral("askbeforedeleting"), true).toBool();
2015-04-22 19:33:53 +02:00
switch(settings.value(QStringLiteral("multipletaghandling"), 0).toInt()) {
case 0:
2016-10-24 20:15:10 +02:00
v.editor.multipleTagHandling = MultipleTagHandling::SingleEditorPerTarget;
2015-04-22 19:33:53 +02:00
break;
case 1:
2016-10-24 20:15:10 +02:00
v.editor.multipleTagHandling = MultipleTagHandling::SeparateEditors;
2015-04-22 19:33:53 +02:00
break;
}
2016-10-24 20:15:10 +02:00
v.editor.hideTagSelectionComboBox = settings.value(QStringLiteral("hidetagselectioncombobox"), false).toBool();
2015-04-22 19:33:53 +02:00
settings.beginGroup(QStringLiteral("autocorrection"));
2016-10-24 20:15:10 +02:00
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();
2015-04-22 19:33:53 +02:00
settings.endGroup();
BackupHelper::backupDirectory() = settings.value(QStringLiteral("tempdir")).toString().toStdString();
2016-10-24 20:15:10 +02:00
v.editor.hideCoverButtons = settings.value(QStringLiteral("hidecoverbtn"), false).toBool();
2015-04-22 19:33:53 +02:00
settings.endGroup();
2016-10-24 20:15:10 +02:00
v.editor.fields.restore(settings, QStringLiteral("selectedfields"));
v.editor.autoCompletition.fields.restore(settings, QStringLiteral("autocorrectionfields"));
2015-04-22 19:33:53 +02:00
settings.beginGroup(QStringLiteral("info"));
2016-10-24 20:15:10 +02:00
v.editor.forceFullParse = settings.value(QStringLiteral("forcefullparse"), false).toBool();
#ifndef TAGEDITOR_NO_WEBVIEW
2016-10-24 20:15:10 +02:00
v.editor.noWebView = settings.value(QStringLiteral("nowebview"), false).toBool();
#endif
2015-04-22 19:33:53 +02:00
settings.endGroup();
settings.beginGroup(QStringLiteral("filebrowser"));
2016-10-24 20:15:10 +02:00
v.fileBrowser.hideBackupFiles = settings.value(QStringLiteral("hidebackupfiles"), true).toBool();
v.fileBrowser.readOnly = settings.value(QStringLiteral("readonly"), true).toBool();
2015-04-22 19:33:53 +02:00
settings.endGroup();
settings.beginGroup(QStringLiteral("tagprocessing"));
switch(settings.value(QStringLiteral("preferredencoding"), 1).toInt()) {
case 0:
2016-10-24 20:15:10 +02:00
v.tagPocessing.preferredEncoding = Media::TagTextEncoding::Latin1;
2015-04-22 19:33:53 +02:00
break;
case 2:
2016-10-24 20:15:10 +02:00
v.tagPocessing.preferredEncoding = Media::TagTextEncoding::Utf16BigEndian;
2015-04-22 19:33:53 +02:00
break;
case 3:
2016-10-24 20:15:10 +02:00
v.tagPocessing.preferredEncoding = Media::TagTextEncoding::Utf16LittleEndian;
2015-04-22 19:33:53 +02:00
break;
default:
2016-10-24 20:15:10 +02:00
v.tagPocessing.preferredEncoding = Media::TagTextEncoding::Utf8;
2015-04-22 19:33:53 +02:00
};
switch(settings.value(QStringLiteral("unsupportedfieldhandling"), 0).toInt()) {
case 1:
2016-10-24 20:15:10 +02:00
v.tagPocessing.unsupportedFieldHandling = UnsupportedFieldHandling::Discard;
2015-04-22 19:33:53 +02:00
break;
default:
2016-10-24 20:15:10 +02:00
v.tagPocessing.unsupportedFieldHandling = UnsupportedFieldHandling::Ignore;
2015-04-22 19:33:53 +02:00
};
2016-10-24 20:15:10 +02:00
v.tagPocessing.autoTagManagement = settings.value(QStringLiteral("autotagmanagement"), true).toBool();
2015-04-22 19:33:53 +02:00
settings.beginGroup(QStringLiteral("id3v1"));
switch(settings.value(QStringLiteral("usage"), 0).toInt()) {
case 1:
2016-10-24 20:15:10 +02:00
v.tagPocessing.id3.v1Usage = TagUsage::KeepExisting;
2015-04-22 19:33:53 +02:00
break;
case 2:
2016-10-24 20:15:10 +02:00
v.tagPocessing.id3.v1Usage = TagUsage::Never;
2015-04-22 19:33:53 +02:00
break;
default:
2016-10-24 20:15:10 +02:00
v.tagPocessing.id3.v1Usage = TagUsage::Always;
2015-04-22 19:33:53 +02:00
break;
};
settings.endGroup();
settings.beginGroup(QStringLiteral("id3v2"));
switch(settings.value(QStringLiteral("usage"), 0).toInt()) {
case 1:
2016-10-24 20:15:10 +02:00
v.tagPocessing.id3.v2Usage = TagUsage::KeepExisting;
2015-04-22 19:33:53 +02:00
break;
case 2:
2016-10-24 20:15:10 +02:00
v.tagPocessing.id3.v2Usage = TagUsage::Never;
2015-04-22 19:33:53 +02:00
break;
default:
2016-10-24 20:15:10 +02:00
v.tagPocessing.id3.v2Usage = TagUsage::Always;
2015-04-22 19:33:53 +02:00
};
2016-10-24 20:15:10 +02:00
v.tagPocessing.id3.v2Version = settings.value(QStringLiteral("versiontobeused"), 3).toUInt();
v.tagPocessing.id3.keepVersionOfExistingId3v2Tag = settings.value(QStringLiteral("keepversionofexistingtag"), true).toBool();
v.tagPocessing.id3.mergeMultipleSuccessiveId3v2Tags = settings.value(QStringLiteral("mergemultiplesuccessivetags"), true).toBool();
2015-04-22 19:33:53 +02:00
settings.endGroup();
2016-10-24 20:15:10 +02:00
v.editor.defaultTargets.restore(settings, QStringLiteral("targets"));
2015-11-21 01:13:45 +01:00
settings.beginGroup(QStringLiteral("filelayout"));
2016-10-24 20:15:10 +02:00
v.tagPocessing.fileLayout.forceRewrite = settings.value(QStringLiteral("forcerewrite"), true).toBool();
2015-11-21 01:13:45 +01:00
switch(settings.value(QStringLiteral("tagpos")).toInt()) {
case 0:
2016-10-24 20:15:10 +02:00
v.tagPocessing.fileLayout.preferredTagPosition = ElementPosition::BeforeData;
2015-11-21 01:13:45 +01:00
break;
case 1:
2016-10-24 20:15:10 +02:00
v.tagPocessing.fileLayout.preferredTagPosition = ElementPosition::AfterData;
2015-11-21 01:13:45 +01:00
break;
}
2016-10-24 20:15:10 +02:00
v.tagPocessing.fileLayout.forceTagPosition = settings.value(QStringLiteral("forcetagpos"), true).toBool();
2015-11-25 22:09:57 +01:00
switch(settings.value(QStringLiteral("indexpos")).toInt()) {
case 0:
2016-10-24 20:15:10 +02:00
v.tagPocessing.fileLayout.preferredIndexPosition = ElementPosition::BeforeData;
2015-11-25 22:09:57 +01:00
break;
case 1:
2016-10-24 20:15:10 +02:00
v.tagPocessing.fileLayout.preferredIndexPosition = ElementPosition::AfterData;
2015-11-25 22:09:57 +01:00
break;
}
2016-10-24 20:15:10 +02:00
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();
2015-11-21 01:13:45 +01:00
settings.endGroup();
2015-04-22 19:33:53 +02:00
settings.endGroup();
settings.beginGroup(QStringLiteral("mainwindow"));
2016-10-24 20:15:10 +02:00
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();
2016-03-03 22:21:15 +01:00
settings.endGroup();
settings.beginGroup(QStringLiteral("dbquery"));
2016-10-24 20:15:10 +02:00
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.coverArtArchiveUrl = settings.value(QStringLiteral("coverartarchiveurl")).toString();
2015-04-22 19:33:53 +02:00
settings.endGroup();
2016-01-09 03:38:58 +01:00
settings.beginGroup(QStringLiteral("renamedlg"));
2016-10-24 20:15:10 +02:00
v.renamingUtility.scriptSource = settings.value(QStringLiteral("src")).toInt();
v.renamingUtility.externalScript = settings.value(QStringLiteral("file")).toString();
v.renamingUtility.editorScript = settings.value(QStringLiteral("script")).toString();
2016-01-09 03:38:58 +01:00
settings.endGroup();
2016-08-14 22:49:47 +02:00
2016-10-24 20:15:10 +02:00
v.qt.restore(settings);
2015-04-22 19:33:53 +02:00
}
void save()
{
2017-02-20 19:41:15 +01:00
QSettings settings(QSettings::IniFormat, QSettings::UserScope, QStringLiteral(PROJECT_NAME));
2016-10-24 20:15:10 +02:00
const Settings &v = values();
2015-04-22 19:33:53 +02:00
settings.beginGroup(QStringLiteral("editor"));
2016-10-24 20:15:10 +02:00
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);
2015-04-22 19:33:53 +02:00
settings.beginGroup(QStringLiteral("autocorrection"));
2016-10-24 20:15:10 +02:00
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);
2015-04-22 19:33:53 +02:00
settings.endGroup();
settings.setValue(QStringLiteral("tempdir"), QString::fromStdString(BackupHelper::backupDirectory()));
2016-10-24 20:15:10 +02:00
settings.setValue(QStringLiteral("hidecoverbtn"), v.editor.hideCoverButtons);
2015-04-22 19:33:53 +02:00
settings.endGroup();
2016-10-24 20:15:10 +02:00
v.editor.fields.save(settings, QStringLiteral("selectedfields"));
v.editor.autoCompletition.fields.save(settings, QStringLiteral("autocorrectionfields"));
2015-04-22 19:33:53 +02:00
settings.beginGroup(QStringLiteral("info"));
2016-10-24 20:15:10 +02:00
settings.setValue(QStringLiteral("forcefullparse"), v.editor.forceFullParse);
#ifndef TAGEDITOR_NO_WEBVIEW
2016-10-24 20:15:10 +02:00
settings.setValue(QStringLiteral("nowebview"), v.editor.noWebView);
#endif
2015-04-22 19:33:53 +02:00
settings.endGroup();
settings.beginGroup(QStringLiteral("filebrowser"));
2016-10-24 20:15:10 +02:00
settings.setValue(QStringLiteral("hidebackupfiles"), v.fileBrowser.hideBackupFiles);
settings.setValue(QStringLiteral("readonly"), v.fileBrowser.readOnly);
2015-04-22 19:33:53 +02:00
settings.endGroup();
settings.beginGroup(QStringLiteral("tagprocessing"));
2016-10-24 20:15:10 +02:00
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);
2015-04-22 19:33:53 +02:00
settings.beginGroup(QStringLiteral("id3v1"));
2016-10-24 20:15:10 +02:00
settings.setValue(QStringLiteral("usage"), static_cast<int>(v.tagPocessing.id3.v1Usage));
2015-04-22 19:33:53 +02:00
settings.endGroup();
settings.beginGroup(QStringLiteral("id3v2"));
2016-10-24 20:15:10 +02:00
settings.setValue(QStringLiteral("usage"), static_cast<int>(v.tagPocessing.id3.v2Usage));
settings.setValue(QStringLiteral("versiontobeused"), v.tagPocessing.id3.v2Version);
settings.setValue(QStringLiteral("keepversionofexistingtag"), v.tagPocessing.id3.keepVersionOfExistingId3v2Tag);
settings.setValue(QStringLiteral("mergemultiplesuccessivetags"), v.tagPocessing.id3.mergeMultipleSuccessiveId3v2Tags);
2015-04-22 19:33:53 +02:00
settings.endGroup();
2016-10-24 20:15:10 +02:00
v.editor.defaultTargets.save(settings, QStringLiteral("targets"));
2015-11-21 01:13:45 +01:00
settings.beginGroup(QStringLiteral("filelayout"));
2016-10-24 20:15:10 +02:00
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));
2015-11-21 01:13:45 +01:00
settings.endGroup();
2015-04-22 19:33:53 +02:00
settings.endGroup();
settings.beginGroup(QStringLiteral("mainwindow"));
2016-10-24 20:15:10 +02:00
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);
2015-04-22 19:33:53 +02:00
settings.endGroup();
2016-01-09 03:38:58 +01:00
2016-03-03 22:21:15 +01:00
settings.beginGroup(QStringLiteral("dbquery"));
2016-10-24 20:15:10 +02:00
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("coverartarchiveurl"), v.dbQuery.coverArtArchiveUrl);
2016-03-03 22:21:15 +01:00
settings.endGroup();
2016-01-09 03:38:58 +01:00
settings.beginGroup(QStringLiteral("renamedlg"));
2016-10-24 20:15:10 +02:00
settings.setValue(QStringLiteral("src"), v.renamingUtility.scriptSource);
settings.setValue(QStringLiteral("file"), v.renamingUtility.externalScript);
settings.setValue(QStringLiteral("script"), v.renamingUtility.editorScript);
2016-01-09 03:38:58 +01:00
settings.endGroup();
2016-08-14 22:49:47 +02:00
2016-10-24 20:15:10 +02:00
v.qt.save(settings);
2015-04-22 19:33:53 +02:00
}
}