Skip to content

Commit 13c8715

Browse files
committed
Start updating the settings tab for extension.
1 parent 16db2ec commit 13c8715

20 files changed

+361
-108
lines changed

CMakePresets.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
"value": "x64"
3030
},
3131
"cacheVariables": {
32-
"CMAKE_CXX_FLAGS": "/EHsc /MP /W4",
32+
"CMAKE_CXX_FLAGS": "/EHsc /MP /W3",
3333
"VCPKG_TARGET_TRIPLET": {
3434
"type": "STRING",
3535
"value": "x64-windows-static-md"

src/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ set_target_properties(organizer PROPERTIES
2525

2626
# disable translations because we want to be able to install somewhere else if
2727
# required
28-
mo2_configure_target(organizer WARNINGS 4 TRANSLATIONS OFF)
28+
mo2_configure_target(organizer WARNINGS 3 TRANSLATIONS OFF)
2929

3030
# we add translations "manually" to handle MO2_INSTALL_IS_BIN
3131
mo2_add_translations(organizer

src/extensionmanager.cpp

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
#include "extensionmanager.h"
22

3-
#include <log.h>
3+
#include <uibase/log.h>
4+
5+
#include "organizercore.h"
46

57
using namespace MOBase;
68
namespace fs = std::filesystem;
79

10+
ExtensionManager::ExtensionManager(OrganizerCore* core) : m_core{core} {}
11+
812
void ExtensionManager::loadExtensions(fs::path const& directory)
913
{
1014
for (const auto& entry : fs::directory_iterator{directory}) {
@@ -60,8 +64,18 @@ const IExtension* ExtensionManager::extension(QString const& identifier) const
6064

6165
bool ExtensionManager::isEnabled(MOBase::IExtension const& extension) const
6266
{
63-
// TODO
64-
return true;
67+
if (!m_core) {
68+
return true;
69+
}
70+
71+
for (auto& requirement : extension.metadata().requirements()) {
72+
// TODO: needs an organizerproxy...
73+
// if (!requirement.check(m_core)) {
74+
// return false;
75+
//}
76+
}
77+
78+
return m_core->settings().extensions().isEnabled(extension, true);
6579
}
6680

6781
bool ExtensionManager::isEnabled(QString const& identifier) const

src/extensionmanager.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,15 @@
1010
#include <uibase/extensions/extension.h>
1111

1212
#include "extensionwatcher.h"
13+
#include "organizerproxy.h"
14+
15+
class OrganizerCore;
1316

1417
class ExtensionManager
1518
{
1619
public:
20+
ExtensionManager(OrganizerCore* core);
21+
1722
// retrieve the list of currently loaded extensions
1823
//
1924
const auto& extensions() const { return m_extensions; }
@@ -58,6 +63,8 @@ class ExtensionManager
5863
void triggerWatchers(const MOBase::IExtension& extension) const;
5964

6065
private:
66+
OrganizerCore* m_core;
67+
std::unique_ptr<OrganizerProxy> m_proxy;
6168
std::vector<std::unique_ptr<const MOBase::IExtension>> m_extensions;
6269

6370
using WatcherMap = boost::fusion::map<

src/extensionsettings.cpp

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,55 @@
44

55
using namespace MOBase;
66

7+
static const QString EXTENSIONS_GROUP = "Extensions";
8+
static const QString EXTENSIONS_ENABLED_GROUP = "ExtensionsEnabled";
79
static const QString PLUGINS_GROUP = "Plugins";
810
static const QString PLUGINS_PERSISTENT_GROUP = "PluginPersistance";
911

12+
ExtensionSettings::ExtensionSettings(QSettings& settings) : m_Settings(settings) {}
13+
14+
QString ExtensionSettings::path(const IExtension& extension, const Setting& setting)
15+
{
16+
QString path = extension.metadata().identifier();
17+
if (!setting.group().isEmpty()) {
18+
path += "/" + setting.group();
19+
}
20+
return path + "/" + setting.name();
21+
}
22+
23+
bool ExtensionSettings::isEnabled(const MOBase::IExtension& extension,
24+
bool defaultValue) const
25+
{
26+
return get<bool>(m_Settings, EXTENSIONS_ENABLED_GROUP,
27+
extension.metadata().identifier(), defaultValue);
28+
}
29+
30+
void ExtensionSettings::setEnabled(const MOBase::IExtension& extension,
31+
bool enabled) const
32+
{
33+
set(m_Settings, EXTENSIONS_ENABLED_GROUP, extension.metadata().identifier(), enabled);
34+
}
35+
36+
QVariant ExtensionSettings::setting(const IExtension& extension,
37+
const Setting& setting) const
38+
{
39+
return get<QVariant>(m_Settings, EXTENSIONS_GROUP, path(extension, setting),
40+
setting.defaultValue());
41+
}
42+
43+
void ExtensionSettings::setSetting(const IExtension& extension, const Setting& setting,
44+
const QVariant& value)
45+
{
46+
set(m_Settings, EXTENSIONS_GROUP, path(extension, setting), value);
47+
}
48+
49+
// commits all the settings to the ini
50+
//
51+
void ExtensionSettings::save()
52+
{
53+
m_Settings.sync();
54+
}
55+
1056
PluginSettings::PluginSettings(QSettings& settings) : m_Settings(settings) {}
1157

1258
QString PluginSettings::path(const QString& pluginName, const QString& key)
@@ -57,7 +103,7 @@ void PluginSettings::fixPluginEnabledSetting(const IPlugin* plugin)
57103
QVariant PluginSettings::setting(const QString& pluginName, const QString& key,
58104
const QVariant& defaultValue) const
59105
{
60-
return get<QVariant>(m_Settings, "Settings", path(pluginName, key), defaultValue);
106+
return get<QVariant>(m_Settings, PLUGINS_GROUP, path(pluginName, key), defaultValue);
61107
}
62108

63109
void PluginSettings::setSetting(const QString& pluginName, const QString& key,

src/extensionsettings.h

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,48 @@
44
#include <QObject>
55
#include <QSettings>
66

7+
#include <uibase/extensions/extension.h>
78
#include <uibase/iplugin.h>
89

10+
// settings about extensions
11+
class ExtensionSettings : public QObject
12+
{
13+
Q_OBJECT
14+
15+
public:
16+
ExtensionSettings(QSettings& settings);
17+
18+
// check if the specified extension is enabled in the settings
19+
//
20+
bool isEnabled(const MOBase::IExtension& extension, bool defaultValue = true) const;
21+
22+
// set the extension as enabled or disabled in the settings
23+
//
24+
void setEnabled(const MOBase::IExtension& extension, bool enabled) const;
25+
26+
// returns the plugin setting for the given key
27+
//
28+
QVariant setting(const MOBase::IExtension& extension,
29+
const MOBase::Setting& setting) const;
30+
31+
// sets the plugin setting for the given key
32+
//
33+
void setSetting(const MOBase::IExtension& extension, const MOBase::Setting& setting,
34+
const QVariant& value);
35+
36+
// commits all the settings to the ini
37+
//
38+
void save();
39+
40+
private:
41+
QSettings& m_Settings;
42+
43+
// retrieve the path to the given setting
44+
//
45+
static QString path(const MOBase::IExtension& extension,
46+
const MOBase::Setting& setting);
47+
};
48+
949
// settings about plugins
1050
//
1151
class PluginSettings : public QObject

src/instancemanager.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -704,7 +704,7 @@ std::unique_ptr<Instance> selectInstance()
704704
// since there is no instance currently active, load plugins with a null
705705
// OrganizerCore; see PluginManager::initPlugin()
706706
NexusInterface ni(nullptr);
707-
ExtensionManager ec;
707+
ExtensionManager ec(nullptr);
708708
ec.loadExtensions(QDir(QCoreApplication::applicationDirPath() + "/extensions")
709709
.filesystemAbsolutePath());
710710

src/moapplication.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ int MOApplication::setup(MOMultiProcess& multiProcess, bool forceSelect)
215215
m_themes = std::make_unique<ThemeManager>(this);
216216
m_translations = std::make_unique<TranslationManager>(this);
217217

218-
m_extensions = std::make_unique<ExtensionManager>();
218+
m_extensions = std::make_unique<ExtensionManager>(m_core.get());
219219
m_extensions->registerWatcher(*m_themes);
220220
m_extensions->registerWatcher(*m_translations);
221221

src/nxmaccessmanager.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -162,11 +162,9 @@ NexusSSOLogin::NexusSSOLogin() : m_keyReceived(false), m_active(false)
162162
onConnected();
163163
});
164164

165-
QObject::connect(&m_socket,
166-
qOverload<QAbstractSocket::SocketError>(&QWebSocket::error),
167-
[&](auto&& e) {
168-
onError(e);
169-
});
165+
QObject::connect(&m_socket, &QWebSocket::errorOccurred, [&](auto&& e) {
166+
onError(e);
167+
});
170168

171169
QObject::connect(&m_socket, &QWebSocket::sslErrors, [&](auto&& errors) {
172170
onSslErrors(errors);

0 commit comments

Comments
 (0)