summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-09-02 16:09:31 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-09-02 16:09:31 -0400
commit7f0fa1069f07d90a92be7073b11bab86bac7b2d2 (patch)
tree0ee51756f13b2b84d2d542c86a3a6f11fe11cd06
parent209c27c7a27e2f6cb34f122a929c15eb3d1e60b7 (diff)
don't log widget and geometry setting changes
fixed mod info dialog tab order using different settings for read and write mod info dialog now doesn't complain when no tab order exists in the settings only remove section when the array is larger, prevents logging changes when nothing actually changed
-rw-r--r--src/modinfodialog.cpp9
-rw-r--r--src/settings.cpp27
-rw-r--r--src/settings.h2
-rw-r--r--src/settingsutilities.cpp18
-rw-r--r--src/settingsutilities.h6
5 files changed, 51 insertions, 11 deletions
diff --git a/src/modinfodialog.cpp b/src/modinfodialog.cpp
index 2178ef34..c7e071ad 100644
--- a/src/modinfodialog.cpp
+++ b/src/modinfodialog.cpp
@@ -383,9 +383,12 @@ void ModInfoDialog::reAddTabs(
// ordered tab names from settings
const auto orderedNames = m_core->settings().geometry().modInfoTabOrder();
- // whether the tabs can be sorted; if the object name of a tab widget is not
- // found in orderedNames, the list cannot be sorted safely
- bool canSort = true;
+ // whether the tabs can be sorted
+ //
+ // if the object name of a tab widget is not found in orderedNames, the list
+ // cannot be sorted safely; if the list is empty, it's probably a first run
+ // and there's nothing to sort
+ bool canSort = !orderedNames.empty();
// gathering visible tabs
std::vector<TabInfo*> visibleTabs;
diff --git a/src/settings.cpp b/src/settings.cpp
index 8ae7c343..a33005b6 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -210,7 +210,7 @@ std::vector<std::map<QString, QVariant>> Settings::executables() const
std::map<QString, QVariant> map;
for (auto&& key : sra.keys()) {
- map[key] = m_Settings.value(key);
+ map[key] = sra.get<QVariant>(key);
}
v.push_back(map);
@@ -693,7 +693,7 @@ QStringList GeometrySettings::modInfoTabOrder() const
}
} else {
// string list since 2.2.1
- QString string = m_Settings.value("mod_info_tab_order").toString();
+ QString string = get<QString>(m_Settings, "Widgets", "ModInfoTabOrder", "");
QTextStream stream(&string);
while (!stream.atEnd()) {
@@ -708,7 +708,7 @@ QStringList GeometrySettings::modInfoTabOrder() const
void GeometrySettings::setModInfoTabOrder(const QString& names)
{
- set(m_Settings, "Geometry", "mod_info_tab_order", names);
+ set(m_Settings, "Widgets", "ModInfoTabOrder", names);
}
void GeometrySettings::centerOnMainWindowMonitor(QWidget* w)
@@ -1061,13 +1061,21 @@ void PluginSettings::clearPlugins()
{
m_Plugins.clear();
m_PluginSettings.clear();
-
m_PluginBlacklist.clear();
+ m_PluginBlacklist = readPluginBlacklist();
+}
+
+QSet<QString> PluginSettings::readPluginBlacklist() const
+{
+ QSet<QString> set;
+
ScopedReadArray sra(m_Settings, "pluginBlacklist");
sra.for_each([&]{
- m_PluginBlacklist.insert(sra.get<QString>("name"));
+ set.insert(sra.get<QString>("name"));
});
+
+ return set;
}
void PluginSettings::registerPlugin(IPlugin *plugin)
@@ -1166,9 +1174,14 @@ void PluginSettings::addBlacklistPlugin(const QString &fileName)
void PluginSettings::writePluginBlacklist()
{
- removeSection(m_Settings, "pluginBlacklist");
+ const auto current = readPluginBlacklist();
+
+ if (current.size() > m_PluginBlacklist.size()) {
+ // Qt can't remove array elements, the section must be cleared
+ removeSection(m_Settings, "pluginBlacklist");
+ }
- ScopedWriteArray swa(m_Settings, "pluginBlacklist");
+ ScopedWriteArray swa(m_Settings, "pluginBlacklist", m_PluginBlacklist.size());
for (const QString &plugin : m_PluginBlacklist) {
swa.next();
diff --git a/src/settings.h b/src/settings.h
index 68cfb9b7..2ff8da1c 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -261,8 +261,8 @@ private:
QMap<QString, QVariantMap> m_PluginDescriptions;
QSet<QString> m_PluginBlacklist;
- void readPluginBlacklist();
void writePluginBlacklist();
+ QSet<QString> readPluginBlacklist() const;
};
diff --git a/src/settingsutilities.cpp b/src/settingsutilities.cpp
index d5e2dd9a..7a9dcc35 100644
--- a/src/settingsutilities.cpp
+++ b/src/settingsutilities.cpp
@@ -4,8 +4,26 @@
using namespace MOBase;
+bool shouldLogSetting(const QString& displayName)
+{
+ // don't log Geometry/ and Widgets/, too noisy and not very useful
+ static const QStringList ignorePrefixes = {"Geometry/", "Widgets/"};
+
+ for (auto&& prefix : ignorePrefixes) {
+ if (displayName.startsWith(prefix, Qt::CaseInsensitive)) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
void logRemoval(const QString& name)
{
+ if (!shouldLogSetting(name)) {
+ return;
+ }
+
log::debug("setting '{}' removed", name);
}
diff --git a/src/settingsutilities.h b/src/settingsutilities.h
index ca754759..d99abb06 100644
--- a/src/settingsutilities.h
+++ b/src/settingsutilities.h
@@ -24,10 +24,16 @@ struct ValueConverter<T, std::enable_if_t<std::is_enum_v<T>>>
};
+bool shouldLogSetting(const QString& displayName);
+
template <class T>
void logChange(
const QString& displayName, std::optional<T> oldValue, const T& newValue)
{
+ if (!shouldLogSetting(displayName)) {
+ return;
+ }
+
using VC = ValueConverter<T>;
if (oldValue) {