From bca6283311cf1dea4c96f8ee5bf192bdb1640cb3 Mon Sep 17 00:00:00 2001
From: isanae <14251494+isanae@users.noreply.github.com>
Date: Wed, 17 Jul 2019 08:56:16 -0400
Subject: use log::Levels instead of ints create log level combobox in code,
set selected index based on value instead added log level to context menu in
log list
---
src/usvfsconnector.cpp | 20 +++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)
(limited to 'src/usvfsconnector.cpp')
diff --git a/src/usvfsconnector.cpp b/src/usvfsconnector.cpp
index b752667d..197955b8 100644
--- a/src/usvfsconnector.cpp
+++ b/src/usvfsconnector.cpp
@@ -32,7 +32,7 @@ along with Mod Organizer. If not, see .
#include
static const char SHMID[] = "mod_organizer_instance";
-
+using namespace MOBase;
std::string to_hex(void *bufferIn, size_t bufferSize)
{
@@ -90,15 +90,16 @@ void LogWorker::exit()
m_QuitRequested = true;
}
-LogLevel logLevel(int level)
+LogLevel toUsvfsLogLevel(log::Levels level)
{
- switch (static_cast(level)) {
- case LogLevel::Info:
+ switch (level) {
+ case log::Info:
return LogLevel::Info;
- case LogLevel::Warning:
+ case log::Warning:
return LogLevel::Warning;
- case LogLevel::Error:
+ case log::Error:
return LogLevel::Error;
+ case log::Debug: // fall-through
default:
return LogLevel::Debug;
}
@@ -121,7 +122,7 @@ CrashDumpsType crashDumpsType(int type)
UsvfsConnector::UsvfsConnector()
{
USVFSParameters params;
- LogLevel level = logLevel(Settings::instance().logLevel());
+ LogLevel level = toUsvfsLogLevel(Settings::instance().logLevel());
CrashDumpsType dumpType = crashDumpsType(Settings::instance().crashDumpsType());
std::string dumpPath = MOShared::ToString(OrganizerCore::crashDumpsPath(), true);
@@ -205,9 +206,10 @@ void UsvfsConnector::updateMapping(const MappingType &mapping)
*/
}
-void UsvfsConnector::updateParams(int logLevel, int crashDumpsType, QString executableBlacklist)
+void UsvfsConnector::updateParams(
+ MOBase::log::Levels logLevel, int crashDumpsType, QString executableBlacklist)
{
- USVFSUpdateParams(::logLevel(logLevel), ::crashDumpsType(crashDumpsType));
+ USVFSUpdateParams(toUsvfsLogLevel(logLevel), ::crashDumpsType(crashDumpsType));
ClearExecutableBlacklist();
for (auto exec : executableBlacklist.split(";")) {
std::wstring buf = exec.toStdWString();
--
cgit v1.3.1
From b3d0ddb0b75da4abd59cae1508d983945c8e235d Mon Sep 17 00:00:00 2001
From: isanae <14251494+isanae@users.noreply.github.com>
Date: Fri, 19 Jul 2019 04:21:45 -0400
Subject: changed qDebug() to log::debug() removed some commented out logging
---
src/categories.cpp | 4 +-
src/downloadlistwidget.cpp | 5 ++-
src/downloadmanager.cpp | 35 ++++++++---------
src/executableslist.cpp | 4 +-
src/filerenamer.cpp | 43 +++++++++++----------
src/installationmanager.cpp | 16 ++++----
src/instancemanager.cpp | 2 +-
src/loadmechanism.cpp | 13 ++++---
src/mainwindow.cpp | 37 +++++++-----------
src/messagedialog.cpp | 6 ++-
src/modinfodialog.cpp | 4 +-
src/modinfodialogconflicts.cpp | 24 ++++++++----
src/modinfodialogfiletree.cpp | 12 +++---
src/modinforegular.cpp | 5 ++-
src/modlist.cpp | 7 ++--
src/modlistsortproxy.cpp | 2 +-
src/nexusinterface.cpp | 8 ++--
src/nxmaccessmanager.cpp | 4 +-
src/organizercore.cpp | 41 +++++++++++---------
src/persistentcookiejar.cpp | 2 +-
src/plugincontainer.cpp | 14 +++----
src/pluginlist.cpp | 6 +--
src/profile.cpp | 16 ++++----
src/qtgroupingproxy.cpp | 87 +++++++++++++++++-------------------------
src/selfupdater.cpp | 18 ++++-----
src/settings.cpp | 7 ++--
src/usvfsconnector.cpp | 19 ++++-----
27 files changed, 213 insertions(+), 228 deletions(-)
(limited to 'src/usvfsconnector.cpp')
diff --git a/src/categories.cpp b/src/categories.cpp
index 7acf6ff5..12b18998 100644
--- a/src/categories.cpp
+++ b/src/categories.cpp
@@ -360,10 +360,10 @@ unsigned int CategoryFactory::resolveNexusID(int nexusID) const
{
std::map::const_iterator iter = m_NexusMap.find(nexusID);
if (iter != m_NexusMap.end()) {
- qDebug("nexus category id %d maps to internal %d", nexusID, iter->second);
+ log::debug("nexus category id {} maps to internal {}", nexusID, iter->second);
return iter->second;
} else {
- qDebug("nexus category id %d not mapped", nexusID);
+ log::debug("nexus category id {} not mapped", nexusID);
return 0U;
}
}
diff --git a/src/downloadlistwidget.cpp b/src/downloadlistwidget.cpp
index e2a6f321..85d27831 100644
--- a/src/downloadlistwidget.cpp
+++ b/src/downloadlistwidget.cpp
@@ -19,6 +19,7 @@ along with Mod Organizer. If not, see .
#include "downloadlist.h"
#include "downloadlistwidget.h"
+#include
#include
#include
#include
@@ -29,6 +30,8 @@ along with Mod Organizer. If not, see .
#include
#include
+using namespace MOBase;
+
void DownloadProgressDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QModelIndex sourceIndex = m_SortProxy->mapToSource(index);
@@ -286,7 +289,7 @@ void DownloadListWidget::issueDelete()
void DownloadListWidget::issueRemoveFromView()
{
- qDebug() << "removing from view: " << m_ContextRow;
+ log::debug("removing from view: {}", m_ContextRow);
emit removeDownload(m_ContextRow, false);
}
diff --git a/src/downloadmanager.cpp b/src/downloadmanager.cpp
index 348b2108..d2556faa 100644
--- a/src/downloadmanager.cpp
+++ b/src/downloadmanager.cpp
@@ -352,7 +352,7 @@ void DownloadManager::refreshList()
}
}
if (orphans.size() > 0) {
- qDebug("%d orphaned meta files will be deleted", orphans.size());
+ log::debug("{} orphaned meta files will be deleted", orphans.size());
shellDelete(orphans, true);
}
@@ -379,7 +379,7 @@ void DownloadManager::refreshList()
}
//if (m_ActiveDownloads.size() != downloadsBefore) {
- qDebug("Downloads after refresh: %d", m_ActiveDownloads.size());
+ log::debug("Downloads after refresh: {}", m_ActiveDownloads.size());
//}
emit update(-1);
@@ -401,7 +401,7 @@ bool DownloadManager::addDownload(const QStringList &URLs, QString gameName,
}
QUrl preferredUrl = QUrl::fromEncoded(URLs.first().toLocal8Bit());
- qDebug("selected download url: %s", qUtf8Printable(preferredUrl.toString()));
+ log::debug("selected download url: {}", preferredUrl.toString());
QNetworkRequest request(preferredUrl);
request.setHeader(QNetworkRequest::UserAgentHeader, m_NexusInterface->getAccessManager()->userAgent());
return addDownload(m_NexusInterface->getAccessManager()->get(request), URLs, fileName, gameName, modID, fileID, fileInfo);
@@ -562,9 +562,9 @@ void DownloadManager::addNXMDownload(const QString &url)
break;
}
}
- qDebug("add nxm download: %s", qUtf8Printable(url));
+ log::debug("add nxm download: {}", url);
if (foundGame == nullptr) {
- qDebug("download requested for wrong game (game: %s, url: %s)", qUtf8Printable(m_ManagedGame->gameShortName()), qUtf8Printable(nxmInfo.game()));
+ log::debug("download requested for wrong game (game: {}, url: {})", m_ManagedGame->gameShortName(), nxmInfo.game());
QMessageBox::information(nullptr, tr("Wrong Game"), tr("The download link is for a mod for \"%1\" but this instance of MO "
"has been set up for \"%2\".").arg(nxmInfo.game()).arg(m_ManagedGame->gameShortName()), QMessageBox::Ok);
return;
@@ -572,13 +572,14 @@ void DownloadManager::addNXMDownload(const QString &url)
for (auto tuple : m_PendingDownloads) {
if (std::get<0>(tuple).compare(foundGame->gameShortName(), Qt::CaseInsensitive) == 0, std::get<1>(tuple) == nxmInfo.modId() && std::get<2>(tuple) == nxmInfo.fileId()) {
- QString debugStr("download requested is already queued (mod: %1, file: %2)");
- QString infoStr(tr("There is already a download queued for this file.\n\nMod %1\nFile %2"));
+ const auto infoStr =
+ tr("There is already a download queued for this file.\n\nMod %1\nFile %2")
+ .arg(nxmInfo.modId()).arg(nxmInfo.fileId());
- debugStr = debugStr.arg(nxmInfo.modId()).arg(nxmInfo.fileId());
- infoStr = infoStr.arg(nxmInfo.modId()).arg(nxmInfo.fileId());
+ log::debug(
+ "download requested is already queued (mod: {}, file: {})",
+ nxmInfo.modId(), nxmInfo.fileId());
- qDebug(qUtf8Printable(debugStr));
QMessageBox::information(nullptr, tr("Already Queued"), infoStr, QMessageBox::Ok);
return;
}
@@ -622,7 +623,7 @@ void DownloadManager::addNXMDownload(const QString &url)
infoStr = infoStr.arg(QStringLiteral(""));
}
- qDebug(qUtf8Printable(debugStr));
+ log::debug("{}", debugStr);
QMessageBox::information(nullptr, tr("Already Started"), infoStr, QMessageBox::Ok);
return;
}
@@ -883,7 +884,7 @@ void DownloadManager::resumeDownloadInt(int index)
if (info->m_State == STATE_ERROR) {
info->m_CurrentUrl = (info->m_CurrentUrl + 1) % info->m_Urls.count();
}
- qDebug("request resume from url %s", qUtf8Printable(info->currentURL()));
+ log::debug("request resume from url {}", info->currentURL());
QNetworkRequest request(QUrl::fromEncoded(info->currentURL().toLocal8Bit()));
request.setHeader(QNetworkRequest::UserAgentHeader, m_NexusInterface->getAccessManager()->userAgent());
if (info->m_State != STATE_ERROR) {
@@ -896,7 +897,7 @@ void DownloadManager::resumeDownloadInt(int index)
std::get<2>(info->m_SpeedDiff) = 0;
std::get<3>(info->m_SpeedDiff) = 0;
std::get<4>(info->m_SpeedDiff) = 0;
- qDebug("resume at %lld bytes", info->m_ResumePos);
+ log::debug("resume at {} bytes", info->m_ResumePos);
startDownload(m_NexusInterface->getAccessManager()->get(request), info, true);
}
emit update(index);
@@ -993,11 +994,11 @@ void DownloadManager::queryInfoMd5(int index)
downloadFile.setFileName(m_OrganizerCore->downloadsPath() + "\\" + info->m_FileName);
}
if (!downloadFile.exists()) {
- qDebug("Can't find download file %s", info->m_FileName);
+ log::debug("Can't find download file {}", info->m_FileName);
return;
}
if (!downloadFile.open(QIODevice::ReadOnly)) {
- qDebug("Can't open download file %s", info->m_FileName);
+ log::debug("Can't open download file {}", info->m_FileName);
return;
}
info->m_Hash = QCryptographicHash::hash(downloadFile.readAll(), QCryptographicHash::Md5);
@@ -1384,7 +1385,7 @@ void DownloadManager::setState(DownloadManager::DownloadInfo *info, DownloadMana
m_RequestIDs.insert(m_NexusInterface->requestFiles(info->m_FileInfo->gameName, info->m_FileInfo->modID, this, info->m_DownloadID, QString()));
} break;
case STATE_FETCHINGMODINFO_MD5: {
- qDebug(qUtf8Printable(QString("Searching %1 for MD5 of %2").arg(info->m_GamesToQuery[0]).arg(QString(info->m_Hash.toHex()))));
+ log::debug("Searching {} for MD5 of {}", info->m_GamesToQuery[0], QString(info->m_Hash.toHex()));
m_RequestIDs.insert(m_NexusInterface->requestInfoFromMd5(info->m_GamesToQuery[0], info->m_Hash, this, info->m_DownloadID, QString()));
} break;
case STATE_READY: {
@@ -1780,7 +1781,7 @@ void DownloadManager::nxmFileInfoFromMd5Available(QString gameName, QVariant use
if (chosenIdx < 0) {
chosenIdx = i; //intentional to not break in order to check other results
} else {
- qDebug("Multiple active files found during MD5 search. Defaulting to time stamps...");
+ log::debug("Multiple active files found during MD5 search. Defaulting to time stamps...");
chosenIdx = -1;
break;
}
diff --git a/src/executableslist.cpp b/src/executableslist.cpp
index 2408e8f3..3f76bb6f 100644
--- a/src/executableslist.cpp
+++ b/src/executableslist.cpp
@@ -166,7 +166,7 @@ std::vector ExecutablesList::getPluginExecutables(
void ExecutablesList::resetFromPlugin(MOBase::IPluginGame const *game)
{
- qDebug("resetting plugin executables");
+ log::debug("resetting plugin executables");
Q_ASSERT(game != nullptr);
@@ -295,7 +295,7 @@ std::optional ExecutablesList::makeNonConflictingTitle(
void ExecutablesList::upgradeFromCustom(MOBase::IPluginGame const *game)
{
- qDebug() << "upgrading executables list";
+ log::debug("upgrading executables list");
Q_ASSERT(game != nullptr);
diff --git a/src/filerenamer.cpp b/src/filerenamer.cpp
index 8835f52f..a97d7742 100644
--- a/src/filerenamer.cpp
+++ b/src/filerenamer.cpp
@@ -18,10 +18,10 @@ FileRenamer::FileRenamer(QWidget* parent, QFlags flags)
FileRenamer::RenameResults FileRenamer::rename(const QString& oldName, const QString& newName)
{
- qDebug().nospace() << "renaming " << oldName << " to " << newName;
+ log::debug("renaming {} to {}", oldName, newName);
if (QFileInfo(newName).exists()) {
- qDebug().nospace() << newName << " already exists";
+ log::debug("{} already exists", newName);
// target file already exists, confirm replacement
auto answer = confirmReplace(newName);
@@ -29,24 +29,25 @@ FileRenamer::RenameResults FileRenamer::rename(const QString& oldName, const QSt
switch (answer) {
case DECISION_SKIP: {
// user wants to skip this file
- qDebug().nospace() << "skipping " << oldName;
+ log::debug("skipping {}", oldName);
return RESULT_SKIP;
}
case DECISION_REPLACE: {
- qDebug().nospace() << "removing " << newName;
+ log::debug("removing {}", newName);
+
// user wants to replace the file, so remove it
if (!QFile(newName).remove()) {
log::warn("failed to remove '{}'", newName);
// removal failed, warn the user and allow canceling
if (!removeFailed(newName)) {
- qDebug().nospace() << "canceling " << oldName;
+ log::debug("canceling {}", oldName);
// user wants to cancel
return RESULT_CANCEL;
}
// ignore this file and continue on
- qDebug().nospace() << "skipping " << oldName;
+ log::debug("skipping {}", oldName);
return RESULT_SKIP;
}
@@ -56,7 +57,7 @@ FileRenamer::RenameResults FileRenamer::rename(const QString& oldName, const QSt
case DECISION_CANCEL: // fall-through
default: {
// user wants to stop
- qDebug().nospace() << "canceling";
+ log::debug("canceling");
return RESULT_CANCEL;
}
}
@@ -70,17 +71,17 @@ FileRenamer::RenameResults FileRenamer::rename(const QString& oldName, const QSt
// renaming failed, warn the user and allow canceling
if (!renameFailed(oldName, newName)) {
// user wants to cancel
- qDebug().nospace() << "canceling";
+ log::debug("canceling");
return RESULT_CANCEL;
}
// ignore this file and continue on
- qDebug().nospace() << "skipping " << oldName;
+ log::debug("skipping {}", oldName);
return RESULT_SKIP;
}
// everything worked
- qDebug().nospace() << "successfully renamed " << oldName << " to " << newName;
+ log::debug("successfully renamed {} to {}", oldName, newName);
return RESULT_OK;
}
@@ -88,12 +89,12 @@ FileRenamer::RenameDecision FileRenamer::confirmReplace(const QString& newName)
{
if (m_flags & REPLACE_ALL) {
// user wants to silently replace all
- qDebug().nospace() << "user has selected replace all";
+ log::debug("user has selected replace all");
return DECISION_REPLACE;
}
else if (m_flags & REPLACE_NONE) {
// user wants to silently skip all
- qDebug().nospace() << "user has selected replace none";
+ log::debug("user has selected replace none");
return DECISION_SKIP;
}
@@ -117,28 +118,28 @@ FileRenamer::RenameDecision FileRenamer::confirmReplace(const QString& newName)
switch (answer) {
case QMessageBox::Yes:
- qDebug().nospace() << "user wants to replace";
+ log::debug("user wants to replace");
return DECISION_REPLACE;
case QMessageBox::No:
- qDebug().nospace() << "user wants to skip";
+ log::debug("user wants to skip");
return DECISION_SKIP;
case QMessageBox::YesToAll:
- qDebug().nospace() << "user wants to replace all";
+ log::debug("user wants to replace all");
// remember the answer
m_flags |= REPLACE_ALL;
return DECISION_REPLACE;
case QMessageBox::NoToAll:
- qDebug().nospace() << "user wants to replace none";
+ log::debug("user wants to replace none");
// remember the answer
m_flags |= REPLACE_NONE;
return DECISION_SKIP;
case QMessageBox::Cancel: // fall-through
default:
- qDebug().nospace() << "user wants to cancel";
+ log::debug("user wants to cancel");
return DECISION_CANCEL;
}
}
@@ -158,12 +159,12 @@ bool FileRenamer::removeFailed(const QString& name)
if (answer == QMessageBox::Cancel) {
// user wants to stop
- qDebug().nospace() << "user wants to cancel";
+ log::debug("user wants to cancel");
return false;
}
// skip this one and continue
- qDebug().nospace() << "user wants to skip";
+ log::debug("user wants to skip");
return true;
}
@@ -182,11 +183,11 @@ bool FileRenamer::renameFailed(const QString& oldName, const QString& newName)
if (answer == QMessageBox::Cancel) {
// user wants to stop
- qDebug().nospace() << "user wants to cancel";
+ log::debug("user wants to cancel");
return false;
}
// skip this one and continue
- qDebug().nospace() << "user wants to skip";
+ log::debug("user wants to skip");
return true;
}
diff --git a/src/installationmanager.cpp b/src/installationmanager.cpp
index fd971f47..89d0079f 100644
--- a/src/installationmanager.cpp
+++ b/src/installationmanager.cpp
@@ -398,7 +398,7 @@ bool InstallationManager::isSimpleArchiveTopLayer(const DirectoryTree::Node *nod
for (DirectoryTree::const_node_iterator iter = node->nodesBegin(); iter != node->nodesEnd(); ++iter) {
if ((bainStyle && InstallationTester::isTopLevelDirectoryBain((*iter)->getData().name)) ||
(!bainStyle && InstallationTester::isTopLevelDirectory((*iter)->getData().name))) {
- qDebug("%s on the top level", (*iter)->getData().name.toUtf8().constData());
+ log::debug("{} on the top level", (*iter)->getData().name.toQString());
return true;
}
}
@@ -424,7 +424,7 @@ DirectoryTree::Node *InstallationManager::getSimpleArchiveBase(DirectoryTree *da
(currentNode->numNodes() == 1)) {
currentNode = *currentNode->nodesBegin();
} else {
- qDebug("not a simple archive");
+ log::debug("not a simple archive");
return nullptr;
}
}
@@ -576,7 +576,7 @@ bool InstallationManager::doInstall(GuessedValue &modName, QString game
QString targetDirectory = QDir(m_ModsDirectory + "/" + modName).canonicalPath();
QString targetDirectoryNative = QDir::toNativeSeparators(targetDirectory);
- qDebug("installing to \"%s\"", qUtf8Printable(targetDirectoryNative));
+ log::debug("installing to \"{}\"", targetDirectoryNative);
m_InstallationProgress = new QProgressDialog(m_ParentWidget);
ON_BLOCK_EXIT([this] () {
@@ -764,7 +764,7 @@ bool InstallationManager::install(const QString &fileName,
if ((modID == 0) && (guessedModID != -1)) {
modID = guessedModID;
} else if (modID != guessedModID) {
- qDebug("passed mod id: %d, guessed id: %d", modID, guessedModID);
+ log::debug("passed mod id: {}, guessed id: {}", modID, guessedModID);
}
modName.update(guessedModName, GUESS_GOOD);
@@ -774,7 +774,7 @@ bool InstallationManager::install(const QString &fileName,
if (fileInfo.dir() == QDir(m_DownloadsDirectory)) {
m_CurrentFile = fileInfo.fileName();
}
- qDebug("using mod name \"%s\" (id %d) -> %s", qUtf8Printable(modName), modID, qUtf8Printable(m_CurrentFile));
+ log::debug("using mod name \"{}\" (id {}) -> {}", QString(modName), modID, m_CurrentFile);
//If there's an archive already open, close it. This happens with the bundle
//installer when it uncompresses a split archive, then finds it has a real archive
@@ -785,9 +785,9 @@ bool InstallationManager::install(const QString &fileName,
bool archiveOpen = m_ArchiveHandler->open(fileName,
new MethodCallback(this, &InstallationManager::queryPassword));
if (!archiveOpen) {
- qDebug("integrated archiver can't open %s: %s (%d)",
- qUtf8Printable(fileName),
- qUtf8Printable(getErrorString(m_ArchiveHandler->getLastError())),
+ log::debug("integrated archiver can't open {}: {} ({})",
+ fileName,
+ getErrorString(m_ArchiveHandler->getLastError()),
m_ArchiveHandler->getLastError());
}
ON_BLOCK_EXIT(std::bind(&InstallationManager::postInstallCleanup, this));
diff --git a/src/instancemanager.cpp b/src/instancemanager.cpp
index 55ef3fc8..fdc30e22 100644
--- a/src/instancemanager.cpp
+++ b/src/instancemanager.cpp
@@ -224,7 +224,7 @@ QString InstanceManager::chooseInstance(const QStringList &instanceList) const
selection.setWindowFlags(selection.windowFlags() | Qt::WindowStaysOnTopHint);
if (selection.exec() == QDialog::Rejected) {
- qDebug("rejected");
+ log::debug("rejected");
throw MOBase::MyException(QObject::tr("Canceled"));
}
diff --git a/src/loadmechanism.cpp b/src/loadmechanism.cpp
index 8f0529ce..4d6cebd4 100644
--- a/src/loadmechanism.cpp
+++ b/src/loadmechanism.cpp
@@ -23,6 +23,7 @@ along with Mod Organizer. If not, see .
#include
#include
#include
+#include
#include
#include
#include
@@ -141,7 +142,7 @@ void LoadMechanism::deactivateScriptExtender()
{
vfsDLLName = ToQString(AppConfig::vfs64DLLName());
}
- qDebug("USVFS DLL Name: " + vfsDLLName.toLatin1());
+ log::debug("USVFS DLL Name: {}", vfsDLLName);
if (vfsDLLName != "") {
if (QFile(pluginsDir.absoluteFilePath(vfsDLLName)).exists()) {
// remove dll from SE plugins directory
@@ -215,8 +216,8 @@ void LoadMechanism::activateScriptExtender()
QString targetPath = pluginsDir.absoluteFilePath(ToQString(vfsDLL));
QString vfsDLLPath = qApp->applicationDirPath() + "/" + QString::fromStdWString(vfsDLL);
- qDebug("DLL USVFS Target Path: " + targetPath.toLatin1());
- qDebug("DLL USVFS VFS DLL Path: " + vfsDLLPath.toLatin1());
+ log::debug("DLL USVFS Target Path: {}", targetPath);
+ log::debug("DLL USVFS VFS DLL Path: {}", vfsDLLPath);
QFile dllFile(targetPath);
@@ -297,17 +298,17 @@ void LoadMechanism::activate(EMechanism mechanism)
{
switch (mechanism) {
case LOAD_MODORGANIZER: {
- qDebug("Load Mechanism: Mod Organizer");
+ log::debug("Load Mechanism: Mod Organizer");
deactivateProxyDLL();
deactivateScriptExtender();
} break;
case LOAD_SCRIPTEXTENDER: {
- qDebug("Load Mechanism: ScriptExtender");
+ log::debug("Load Mechanism: ScriptExtender");
deactivateProxyDLL();
activateScriptExtender();
} break;
case LOAD_PROXYDLL: {
- qDebug("Load Mechanism: Proxy DLL");
+ log::debug("Load Mechanism: Proxy DLL");
deactivateScriptExtender();
activateProxyDLL();
} break;
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index ad87ba03..e502bdb1 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -867,7 +867,7 @@ void MainWindow::updatePinnedExecutables()
exeAction->setStatusTip(exe.binaryInfo().filePath());
if (!connect(exeAction, SIGNAL(triggered()), this, SLOT(startExeAction()))) {
- qDebug("failed to connect trigger?");
+ log::debug("failed to connect trigger?");
}
if (m_linksSeparator) {
@@ -1711,7 +1711,7 @@ void MainWindow::on_profileBox_currentIndexChanged(int index)
// ensure the new index is valid
if (index < 0 || index >= ui->profileBox->count()) {
- qDebug("invalid profile index, using last profile");
+ log::debug("invalid profile index, using last profile");
ui->profileBox->setCurrentIndex(ui->profileBox->count() - 1);
}
@@ -2060,7 +2060,7 @@ void MainWindow::refreshSaveList()
QDir savesDir = currentSavesDir();
savesDir.setNameFilters(filters);
- qDebug("reading save games from %s", qUtf8Printable(savesDir.absolutePath()));
+ log::debug("reading save games from {}", savesDir.absolutePath());
QFileInfoList files = savesDir.entryInfoList(QDir::Files, QDir::Time);
for (const QFileInfo &file : files) {
@@ -2261,15 +2261,6 @@ void MainWindow::fixCategories()
void MainWindow::setupNetworkProxy(bool activate)
{
QNetworkProxyFactory::setUseSystemConfiguration(activate);
-/* QNetworkProxyQuery query(QUrl("http://www.google.com"), QNetworkProxyQuery::UrlRequest);
- query.setProtocolTag("http");
- QList proxies = QNetworkProxyFactory::systemProxyForQuery(query);
- if ((proxies.size() > 0) && (proxies.at(0).type() != QNetworkProxy::NoProxy)) {
- qDebug("Using proxy: %s", qUtf8Printable(proxies.at(0).hostName()));
- QNetworkProxy::setApplicationProxy(proxies[0]);
- } else {
- qDebug("Not using proxy");
- }*/
}
@@ -2456,7 +2447,7 @@ void MainWindow::unlock()
{
//If you come through here with a null lock pointer, it's a bug!
if (m_LockDialog == nullptr) {
- qDebug("Unlocking main window when already unlocked");
+ log::debug("Unlocking main window when already unlocked");
return;
}
--m_LockCount;
@@ -3259,7 +3250,7 @@ void MainWindow::displayModInformation(
ModInfo::Ptr modInfo, unsigned int modIndex, ModInfoTabIDs tabID)
{
if (!m_OrganizerCore.modList()->modInfoAboutToChange(modInfo)) {
- qDebug("A different mod information dialog is open. If this is incorrect, please restart MO");
+ log::debug("A different mod information dialog is open. If this is incorrect, please restart MO");
return;
}
std::vector flags = modInfo->getFlags();
@@ -4325,7 +4316,7 @@ void MainWindow::addRemoveCategories_MenuHandler() {
int maxRow = -1;
for (const QPersistentModelIndex &idx : selected) {
- qDebug("change categories on: %s", qUtf8Printable(idx.data().toString()));
+ log::debug("change categories on: {}", idx.data().toString());
QModelIndex modIdx = mapToModel(m_OrganizerCore.modList(), idx);
if (modIdx.row() != m_ContextIdx.row()) {
addRemoveCategoriesFromMenu(menu, modIdx.row(), m_ContextIdx.row());
@@ -4407,7 +4398,7 @@ void MainWindow::saveArchiveList()
}
}
if (archiveFile.commitIfDifferent(m_ArchiveListHash)) {
- qDebug("%s saved", qUtf8Printable(QDir::toNativeSeparators(m_OrganizerCore.currentProfile()->getArchivesFileName())));
+ log::debug("{} saved", QDir::toNativeSeparators(m_OrganizerCore.currentProfile()->getArchivesFileName()));
}
} else {
log::warn("archive list not initialised");
@@ -5364,7 +5355,7 @@ void MainWindow::installTranslator(const QString &name)
QString fileName = name + "_" + m_CurrentLanguage;
if (!translator->load(fileName, qApp->applicationDirPath() + "/translations")) {
if (m_CurrentLanguage.contains(QRegularExpression("^.*_(EN|en)(-.*)?$"))) {
- qDebug("localization file %s not found", qUtf8Printable(fileName));
+ log::debug("localization file %s not found", fileName);
} // we don't actually expect localization files for English (en, en-us, en-uk, and any variation thereof)
}
@@ -5389,7 +5380,7 @@ void MainWindow::languageChange(const QString &newLanguage)
installTranslator(QFileInfo(fileName).baseName());
}
ui->retranslateUi(this);
- qDebug("loaded language %s", qUtf8Printable(newLanguage));
+ log::debug("loaded language {}", newLanguage);
ui->profileBox->setItemText(0, QObject::tr(""));
@@ -5634,7 +5625,7 @@ void MainWindow::openDataOriginExplorer_clicked()
const auto fullPath = m_ContextItem->data(0, Qt::UserRole).toString();
- qDebug().nospace() << "opening in explorer: " << fullPath;
+ log::debug("opening in explorer: {}", fullPath);
shell::ExploreFile(fullPath);
}
@@ -6120,7 +6111,7 @@ void MainWindow::nxmDownloadURLs(QString, int, int, QVariant, QVariant resultDat
void MainWindow::nxmRequestFailed(QString gameName, int modID, int, QVariant, int, QNetworkReply::NetworkError error, const QString &errorString)
{
if (error == QNetworkReply::ContentAccessDenied || error == QNetworkReply::ContentNotFoundError) {
- qDebug(qUtf8Printable(tr("Mod ID %1 no longer seems to be available on Nexus.").arg(modID)));
+ log::debug("{}", tr("Mod ID %1 no longer seems to be available on Nexus.").arg(modID));
} else {
MessageDialog::showMessage(tr("Request to Nexus failed: %1").arg(errorString), this);
}
@@ -6587,7 +6578,7 @@ void MainWindow::processLOOTOut(const std::string &lootOut, std::string &errorMe
std::string dependency(match[2].first, match[2].second);
m_OrganizerCore.pluginList()->addInformation(modName.c_str(), tr("incompatible with \"%1\"").arg(dependency.c_str()));
} else {
- qDebug("[loot] %s", line.c_str());
+ log::debug("[loot] {}", line);
}
}
}
@@ -6632,7 +6623,7 @@ void MainWindow::on_bossButton_clicked()
try {
m_OrganizerCore.prepareVFS();
} catch (const UsvfsConnectorException &e) {
- qDebug(e.what());
+ log::debug("{}", e.what());
return;
} catch (const std::exception &e) {
QMessageBox::warning(qApp->activeWindow(), tr("Error"), e.what());
@@ -6662,7 +6653,7 @@ void MainWindow::on_bossButton_clicked()
if (isJobHandle) {
if (::QueryInformationJobObject(loot, JobObjectBasicProcessIdList, &info, sizeof(info), &retLen) > 0) {
if (info.NumberOfProcessIdsInList == 0) {
- qDebug("no more processes in job");
+ log::debug("no more processes in job");
break;
} else {
if (lastProcessID != info.ProcessIdList[0]) {
diff --git a/src/messagedialog.cpp b/src/messagedialog.cpp
index 6c6de3e7..78a5dd4d 100644
--- a/src/messagedialog.cpp
+++ b/src/messagedialog.cpp
@@ -19,10 +19,13 @@ along with Mod Organizer. If not, see .
#include "messagedialog.h"
#include "ui_messagedialog.h"
+#include
#include
#include
#include
+using namespace MOBase;
+
MessageDialog::MessageDialog(const QString &text, QWidget *reference) :
QDialog(reference),
ui(new Ui::MessageDialog)
@@ -81,7 +84,8 @@ void MessageDialog::resizeEvent(QResizeEvent *event)
void MessageDialog::showMessage(const QString &text, QWidget *reference, bool bringToFront)
{
- qDebug("%s", qUtf8Printable(text));
+ log::debug("{}", text);
+
if (reference != nullptr) {
if (bringToFront || (qApp->activeWindow() != nullptr)) {
MessageDialog *dialog = new MessageDialog(text, reference);
diff --git a/src/modinfodialog.cpp b/src/modinfodialog.cpp
index a7a6b0d7..4b1e2f76 100644
--- a/src/modinfodialog.cpp
+++ b/src/modinfodialog.cpp
@@ -556,9 +556,7 @@ void ModInfoDialog::switchToTab(ModInfoTabIDs id)
}
// this could happen if the tab is not visible right now
- qDebug()
- << "can't switch to tab ID " << static_cast(id)
- << ", not available";
+ log::debug("can't switch to tab ID {}, not available", static_cast(id));
}
MOShared::FilesOrigin* ModInfoDialog::getOrigin()
diff --git a/src/modinfodialogconflicts.cpp b/src/modinfodialogconflicts.cpp
index d16d548c..9a5d9d8d 100644
--- a/src/modinfodialogconflicts.cpp
+++ b/src/modinfodialogconflicts.cpp
@@ -438,10 +438,18 @@ void ConflictsTab::changeItemsVisibility(QTreeView* tree, bool visible)
const auto n = smallSelectionSize(tree);
- qDebug().nospace().noquote()
- << (visible ? "unhiding" : "hiding") << " "
- << (n > max_small_selection ? "a lot of" : QString("%1").arg(n))
- << " conflict files";
+ // logging
+ {
+ const QString action = (visible ? "unhiding" : "hiding");
+
+ QString files;
+ if (n > max_small_selection)
+ files = "a lot of";
+ else
+ files = QString("%1").arg(n);
+
+ log::debug("{} {} conflict files", action, files);
+ }
QFlags flags =
(visible ? FileRenamer::UNHIDE : FileRenamer::HIDE);
@@ -467,7 +475,7 @@ void ConflictsTab::changeItemsVisibility(QTreeView* tree, bool visible)
if (visible) {
if (!item->canUnhide()) {
- qDebug().nospace() << "cannot unhide " << item->relativeName() << ", skipping";
+ log::debug("cannot unhide {}, skipping", item->relativeName());
return true;
}
@@ -475,7 +483,7 @@ void ConflictsTab::changeItemsVisibility(QTreeView* tree, bool visible)
} else {
if (!item->canHide()) {
- qDebug().nospace() << "cannot hide " << item->relativeName() << ", skipping";
+ log::debug("cannot hide {}, skipping", item->relativeName());
return true;
}
@@ -504,10 +512,10 @@ void ConflictsTab::changeItemsVisibility(QTreeView* tree, bool visible)
return true;
});
- qDebug().nospace() << (visible ? "unhiding" : "hiding") << " conflict files done";
+ log::debug("{} conflict files done", (visible ? "unhiding" : "hiding"));
if (changed) {
- qDebug().nospace() << "triggering refresh";
+ log::debug("triggering refresh");
if (origin()) {
emitOriginModified();
diff --git a/src/modinfodialogfiletree.cpp b/src/modinfodialogfiletree.cpp
index 219ddf35..207c792d 100644
--- a/src/modinfodialogfiletree.cpp
+++ b/src/modinfodialogfiletree.cpp
@@ -257,9 +257,9 @@ void FileTreeTab::changeVisibility(bool visible)
bool changed = false;
bool stop = false;
- qDebug().nospace()
- << (visible ? "unhiding" : "hiding") << " "
- << selection.size() << " filetree files";
+ log::debug(
+ "{} {} filetree files",
+ (visible ? "unhiding" : "hiding"), selection.size());
QFlags flags =
(visible ? FileRenamer::UNHIDE : FileRenamer::HIDE);
@@ -280,13 +280,13 @@ void FileTreeTab::changeVisibility(bool visible)
if (visible) {
if (!canUnhideFile(false, path)) {
- qDebug().nospace() << "cannot unhide " << path << ", skipping";
+ log::debug("cannot unhide {}, skipping", path);
continue;
}
result = unhideFile(renamer, path);
} else {
if (!canHideFile(false, path)) {
- qDebug().nospace() << "cannot hide " << path << ", skipping";
+ log::debug("cannot hide {}, skipping", path);
continue;
}
result = hideFile(renamer, path);
@@ -312,7 +312,7 @@ void FileTreeTab::changeVisibility(bool visible)
}
}
- qDebug().nospace() << (visible ? "unhiding" : "hiding") << " filetree files done";
+ log::debug("{} filetree files done", (visible ? "unhiding" : "hiding"));
if (changed) {
if (origin()) {
diff --git a/src/modinforegular.cpp b/src/modinforegular.cpp
index 074fa9e2..6e11befc 100644
--- a/src/modinforegular.cpp
+++ b/src/modinforegular.cpp
@@ -883,8 +883,9 @@ std::vector ModInfoRegular::getIniTweaks() const
int numTweaks = metaFile.beginReadArray("INI Tweaks");
if (numTweaks != 0) {
- qDebug("%d active ini tweaks in %s",
- numTweaks, QDir::toNativeSeparators(metaFileName).toUtf8().constData());
+ log::debug(
+ "{} active ini tweaks in {}",
+ numTweaks, QDir::toNativeSeparators(metaFileName));
}
for (int i = 0; i < numTweaks; ++i) {
diff --git a/src/modlist.cpp b/src/modlist.cpp
index 6ebd0e8b..39f51d72 100644
--- a/src/modlist.cpp
+++ b/src/modlist.cpp
@@ -1013,9 +1013,8 @@ bool ModList::dropURLs(const QMimeData *mimeData, int row, const QModelIndex &pa
QString overwriteName = ModInfo::getByIndex(overwriteIndex)->name();
for (auto url : mimeData->urls()) {
- //qDebug("URL drop requested: %s -> %s", qUtf8Printable(url.url()), qUtf8Printable(modDir.canonicalPath()));
if (!url.isLocalFile()) {
- qDebug("URL drop ignored: \"%s\" is not a local file", qUtf8Printable(url.url()));
+ log::debug("URL drop ignored: \"{}\" is not a local file", url.url());
continue;
}
@@ -1035,7 +1034,7 @@ bool ModList::dropURLs(const QMimeData *mimeData, int row, const QModelIndex &pa
originName = overwriteName;
relativePath = overwriteDir.relativeFilePath(sourceFile);
} else {
- qDebug("URL drop ignored: \"%s\" is not a known file to MO", qUtf8Printable(sourceFile));
+ log::debug("URL drop ignored: \"{}\" is not a known file to MO", sourceFile);
continue;
}
@@ -1047,7 +1046,7 @@ bool ModList::dropURLs(const QMimeData *mimeData, int row, const QModelIndex &pa
if (sourceList.count()) {
if (!shellMove(sourceList, targetList)) {
- qDebug("Failed to move file (error %d)", ::GetLastError());
+ log::debug("Failed to move file (error {})", ::GetLastError());
return false;
}
}
diff --git a/src/modlistsortproxy.cpp b/src/modlistsortproxy.cpp
index d330e0c2..77ffad96 100644
--- a/src/modlistsortproxy.cpp
+++ b/src/modlistsortproxy.cpp
@@ -482,7 +482,7 @@ bool ModListSortProxy::filterAcceptsRow(int row, const QModelIndex &parent) cons
QModelIndex idx = sourceModel()->index(row, 0, parent);
if (!idx.isValid()) {
- qDebug("invalid mod index");
+ log::debug("invalid mod index");
return false;
}
if (sourceModel()->hasChildren(idx)) {
diff --git a/src/nexusinterface.cpp b/src/nexusinterface.cpp
index c797aed6..0e2bb45b 100644
--- a/src/nexusinterface.cpp
+++ b/src/nexusinterface.cpp
@@ -316,15 +316,15 @@ void NexusInterface::interpretNexusFileName(const QString &fileName, QString &mo
} else {
modID = strtol(candidate.c_str(), nullptr, 10);
}
- qDebug("mod id guessed: %s -> %d", qUtf8Printable(fileName), modID);
+ log::debug("mod id guessed: {} -> {}", fileName, modID);
} else if (std::regex_search(fileNameUTF8.constData(), result, simpleexp)) {
- qDebug("simple expression matched, using name only");
+ log::debug("simple expression matched, using name only");
modName = QString::fromUtf8(result[1].str().c_str());
modName = modName.replace('_', ' ').trimmed();
modID = -1;
} else {
- qDebug("no expression matched!");
+ log::debug("no expression matched!");
modName.clear();
modID = -1;
}
@@ -860,7 +860,7 @@ void NexusInterface::requestFinished(std::list::iterator iter)
if (nexusError.length() == 0) {
nexusError = tr("empty response");
}
- qDebug("nexus error: %s", qUtf8Printable(nexusError));
+ log::debug("nexus error: {}", nexusError);
emit nxmRequestFailed(iter->m_GameName, iter->m_ModID, iter->m_FileID, iter->m_UserData, iter->m_ID, reply->error(), nexusError);
} else {
QJsonDocument responseDoc = QJsonDocument::fromJson(data);
diff --git a/src/nxmaccessmanager.cpp b/src/nxmaccessmanager.cpp
index 9f40894e..fd1dc0c1 100644
--- a/src/nxmaccessmanager.cpp
+++ b/src/nxmaccessmanager.cpp
@@ -600,9 +600,9 @@ void NXMAccessManager::showCookies() const
{
QUrl url(NexusBaseUrl + "/");
for (const QNetworkCookie &cookie : cookieJar()->cookiesForUrl(url)) {
- qDebug("%s - %s (expires: %s)",
+ log::debug("{} - {} (expires: {})",
cookie.name().constData(), cookie.value().constData(),
- qUtf8Printable(cookie.expirationDate().toString()));
+ cookie.expirationDate().toString());
}
}
diff --git a/src/organizercore.cpp b/src/organizercore.cpp
index 725371e9..f6802673 100644
--- a/src/organizercore.cpp
+++ b/src/organizercore.cpp
@@ -89,9 +89,9 @@ static bool isOnline()
if (addresses.count() == 0) {
continue;
}
- qDebug("interface %s seems to be up (address: %s)",
- qUtf8Printable(iter->humanReadableName()),
- qUtf8Printable(addresses[0].ip().toString()));
+ log::debug("interface {} seems to be up (address: {})",
+ iter->humanReadableName(),
+ addresses[0].ip().toString());
connected = true;
}
}
@@ -543,7 +543,7 @@ void OrganizerCore::setUserInterface(IUserInterface *userInterface,
if (isOnline() && !m_Settings.offlineMode()) {
m_Updater.testForUpdate();
} else {
- qDebug("user doesn't seem to be connected to the internet");
+ log::debug("user doesn't seem to be connected to the internet");
}
}
}
@@ -605,7 +605,7 @@ bool OrganizerCore::nexusApi(bool retry)
QString apiKey;
if (m_Settings.getNexusApiKey(apiKey)) {
// credentials stored or user entered them manually
- qDebug("attempt to verify nexus api key");
+ log::debug("attempt to verify nexus api key");
accessManager->apiCheck(apiKey);
return true;
} else {
@@ -627,7 +627,7 @@ void OrganizerCore::startMOUpdate()
void OrganizerCore::downloadRequestedNXM(const QString &url)
{
- qDebug("download requested: %s", qUtf8Printable(url));
+ log::debug("download requested: {}", url);
if (nexusApi()) {
m_PendingDownloads.append(url);
} else {
@@ -1208,7 +1208,9 @@ QString OrganizerCore::findJavaInstallation(const QString& jarFile)
if (::FindExecutableW(jarFileW.c_str(), nullptr, buffer) > (HINSTANCE)32) {
DWORD binaryType = 0UL;
if (!::GetBinaryTypeW(buffer, &binaryType)) {
- qDebug("failed to determine binary type of \"%ls\": %lu", buffer, ::GetLastError());
+ log::debug(
+ "failed to determine binary type of \"{}\": {}",
+ QString::fromWCharArray(buffer), ::GetLastError());
} else if (binaryType == SCS_32BIT_BINARY || binaryType == SCS_64BIT_BINARY) {
return QString::fromWCharArray(buffer);
}
@@ -1459,7 +1461,7 @@ void OrganizerCore::spawnBinary(const QFileInfo &binary,
// need to remove our stored load order because it may be outdated if a foreign tool changed the
// file time. After removing that file, refreshESPList will use the file time as the order
if (managedGame()->loadOrderMechanism() == IPluginGame::LoadOrderMechanism::FileTime) {
- qDebug("removing loadorder.txt");
+ log::debug("removing loadorder.txt");
QFile::remove(m_CurrentProfile->getLoadOrderFileName());
}
refreshDirectoryStructure();
@@ -1627,7 +1629,7 @@ HANDLE OrganizerCore::spawnBinaryProcess(const QFileInfo &binary,
m_USVFS.updateForcedLibraries(forcedLibraries);
} catch (const UsvfsConnectorException &e) {
- qDebug(e.what());
+ log::debug(e.what());
return INVALID_HANDLE_VALUE;
} catch (const std::exception &e) {
QMessageBox::warning(window, tr("Error"), e.what());
@@ -1694,17 +1696,16 @@ HANDLE OrganizerCore::spawnBinaryProcess(const QFileInfo &binary,
.arg(QDir::toNativeSeparators(cwdPath),
QDir::toNativeSeparators(binPath), arguments);
- qDebug() << "Spawning proxyed process <" << cmdline << ">";
+ log::debug("Spawning proxyed process <{}>", cmdline);
return startBinary(QFileInfo(QCoreApplication::applicationFilePath()),
cmdline, QCoreApplication::applicationDirPath(), true);
} else {
- qDebug() << "Spawning direct process <" << binPath << "," << arguments << "," << cwdPath << ">";
+ log::debug("Spawning direct process <{}, {}, {}>", binPath, arguments, cwdPath);
return startBinary(binary, arguments, currentDirectory, true);
}
} else {
- qDebug("start of \"%s\" canceled by plugin",
- qUtf8Printable(binary.absoluteFilePath()));
+ log::debug("start of \"{}\" canceled by plugin", binary.absoluteFilePath());
return INVALID_HANDLE_VALUE;
}
}
@@ -1872,9 +1873,11 @@ bool OrganizerCore::waitForProcessCompletion(HANDLE handle, LPDWORD exitCode, IL
processName += QString(" (%1)").arg(currentPID);
if (uilock)
uilock->setProcessName(processName);
- qDebug() << "Waiting for"
- << (originalHandle ? "spawned" : "usvfs")
- << "process completion :" << qUtf8Printable(processName);
+
+ log::debug(
+ "Waiting for {} process completion: {}",
+ (originalHandle ? "spawned" : "usvfs"), processName);
+
newHandle = false;
}
@@ -1943,11 +1946,11 @@ bool OrganizerCore::waitForProcessCompletion(HANDLE handle, LPDWORD exitCode, IL
}
if (res == WAIT_OBJECT_0)
- qDebug() << "Waiting for process completion successfull";
+ log::debug("Waiting for process completion successfull");
else if (uiunlocked)
- qDebug() << "Waiting for process completion aborted by UI";
+ log::debug("Waiting for process completion aborted by UI");
else
- qDebug() << "Waiting for process completion not successfull :" << res;
+ log::debug("Waiting for process completion not successfull: {}", res);
if (handle != INVALID_HANDLE_VALUE)
::CloseHandle(handle);
diff --git a/src/persistentcookiejar.cpp b/src/persistentcookiejar.cpp
index 670bf382..8657f356 100644
--- a/src/persistentcookiejar.cpp
+++ b/src/persistentcookiejar.cpp
@@ -13,7 +13,7 @@ PersistentCookieJar::PersistentCookieJar(const QString &fileName, QObject *paren
}
PersistentCookieJar::~PersistentCookieJar() {
- qDebug("save %s", qUtf8Printable(m_FileName));
+ log::debug("save {}", m_FileName);
save();
}
diff --git a/src/plugincontainer.cpp b/src/plugincontainer.cpp
index 36daec52..62cdff1e 100644
--- a/src/plugincontainer.cpp
+++ b/src/plugincontainer.cpp
@@ -91,7 +91,7 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName)
{ // generic treatment for all plugins
IPlugin *pluginObj = qobject_cast(plugin);
if (pluginObj == nullptr) {
- qDebug("not an IPlugin");
+ log::debug("not an IPlugin");
return false;
}
plugin->setProperty("filename", fileName);
@@ -164,7 +164,7 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName)
for (QObject *proxiedPlugin : matchingPlugins) {
if (proxiedPlugin != nullptr) {
if (registerPlugin(proxiedPlugin, pluginName)) {
- qDebug("loaded plugin \"%s\"", qUtf8Printable(QFileInfo(pluginName).fileName()));
+ log::debug("loaded plugin \"{}\"", QFileInfo(pluginName).fileName());
}
else {
log::warn(
@@ -191,7 +191,7 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName)
}
}
- qDebug("no matching plugin interface");
+ log::debug("no matching plugin interface");
return false;
}
@@ -225,7 +225,7 @@ void PluginContainer::unloadPlugins()
QPluginLoader *loader = m_PluginLoaders.back();
m_PluginLoaders.pop_back();
if ((loader != nullptr) && !loader->unload()) {
- qDebug("failed to unload %s: %s", qUtf8Printable(loader->fileName()), qUtf8Printable(loader->errorString()));
+ log::debug("failed to unload {}: {}", loader->fileName(), loader->errorString());
}
delete loader;
}
@@ -274,13 +274,13 @@ void PluginContainer::loadPlugins()
loadCheck.open(QIODevice::WriteOnly);
QString pluginPath = qApp->applicationDirPath() + "/" + ToQString(AppConfig::pluginPath());
- qDebug("looking for plugins in %s", QDir::toNativeSeparators(pluginPath).toUtf8().constData());
+ log::debug("looking for plugins in {}", QDir::toNativeSeparators(pluginPath));
QDirIterator iter(pluginPath, QDir::Files | QDir::NoDotAndDotDot);
while (iter.hasNext()) {
iter.next();
if (m_Organizer->settings().pluginBlacklisted(iter.fileName())) {
- qDebug("plugin \"%s\" blacklisted", qUtf8Printable(iter.fileName()));
+ log::debug("plugin \"{}\" blacklisted", iter.fileName());
continue;
}
loadCheck.write(iter.fileName().toUtf8());
@@ -296,7 +296,7 @@ void PluginContainer::loadPlugins()
pluginName, pluginLoader->errorString());
} else {
if (registerPlugin(pluginLoader->instance(), pluginName)) {
- qDebug("loaded plugin \"%s\"", qUtf8Printable(QFileInfo(pluginName).fileName()));
+ log::debug("loaded plugin \"{}\"", QFileInfo(pluginName).fileName());
m_PluginLoaders.push_back(pluginLoader.release());
} else {
m_FailedPlugins.push_back(pluginName);
diff --git a/src/pluginlist.cpp b/src/pluginlist.cpp
index e436d7f6..6718641f 100644
--- a/src/pluginlist.cpp
+++ b/src/pluginlist.cpp
@@ -481,7 +481,7 @@ void PluginList::writeLockedOrder(const QString &fileName) const
file->write(QString("%1|%2\r\n").arg(iter->first).arg(iter->second).toUtf8());
}
file.commit();
- qDebug("%s saved", qUtf8Printable(QDir::toNativeSeparators(fileName)));
+ log::debug("{} saved", QDir::toNativeSeparators(fileName));
}
@@ -506,7 +506,7 @@ void PluginList::saveTo(const QString &lockedOrderFileName
}
}
if (deleterFile.commitIfDifferent(m_LastSaveHash[deleterFileName])) {
- qDebug("%s saved", qUtf8Printable(QDir::toNativeSeparators(deleterFileName)));
+ log::debug("{} saved", QDir::toNativeSeparators(deleterFileName));
}
} else if (QFile::exists(deleterFileName)) {
shellDelete(QStringList() << deleterFileName);
@@ -521,7 +521,7 @@ bool PluginList::saveLoadOrder(DirectoryEntry &directoryStructure)
return true;
}
- qDebug("setting file times on esps");
+ log::debug("setting file times on esps");
for (ESPInfo &esp : m_ESPs) {
std::wstring espName = ToWString(esp.m_Name);
diff --git a/src/profile.cpp b/src/profile.cpp
index 555de89a..27616986 100644
--- a/src/profile.cpp
+++ b/src/profile.cpp
@@ -40,7 +40,6 @@ along with Mod Organizer. If not, see .
#include
#include
#include // for QStringList
-#include // for qDebug, qWarning, etc
#include // for qUtf8Printable
#include
#include
@@ -232,7 +231,6 @@ void Profile::doWriteModlist()
}
for (std::map::const_reverse_iterator iter = m_ModIndexByPriority.crbegin(); iter != m_ModIndexByPriority.crend(); iter++ ) {
- //qDebug(QString("write mod %1 to priority %2").arg(iter->first).arg(iter->second).toLocal8Bit());
// the priority order was inverted on load so it has to be inverted again
unsigned int index = iter->second;
if (index != UINT_MAX) {
@@ -253,7 +251,7 @@ void Profile::doWriteModlist()
}
if (file.commitIfDifferent(m_LastModlistHash)) {
- qDebug("%s saved", qUtf8Printable(QDir::toNativeSeparators(fileName)));
+ log::debug("{} saved", QDir::toNativeSeparators(fileName));
}
} catch (const std::exception &e) {
reportError(tr("failed to write mod list: %1").arg(e.what()));
@@ -292,7 +290,7 @@ void Profile::createTweakedIniFile()
.arg(formatSystemMessageQ(e)));
}
- qDebug("%s saved", qUtf8Printable(QDir::toNativeSeparators(tweakedIni)));
+ log::debug("{} saved", QDir::toNativeSeparators(tweakedIni));
}
// static
@@ -364,8 +362,9 @@ void Profile::renameModInList(QFile &modList, const QString &oldName, const QStr
}
if (renamed)
- qDebug("Renamed %d \"%s\" mod to \"%s\" in %s",
- renamed, qUtf8Printable(oldName), qUtf8Printable(newName), qUtf8Printable(modList.fileName()));
+ log::debug(
+ "Renamed {} \"{}\" mod to \"{}\" in {}",
+ renamed, oldName, newName, modList.fileName());
}
void Profile::refreshModStatus()
@@ -431,8 +430,9 @@ void Profile::refreshModStatus()
modStatusModified = true;
}
} else {
- qDebug("mod not found: \"%s\" (profile \"%s\")",
- qUtf8Printable(modName), qUtf8Printable(m_Directory.path()));
+ log::debug(
+ "mod not found: \"{}\" (profile \"{}\")",
+ modName, m_Directory.path());
// need to rewrite the modlist to fix this
modStatusModified = true;
}
diff --git a/src/qtgroupingproxy.cpp b/src/qtgroupingproxy.cpp
index 5fcb84d3..ff9539d7 100644
--- a/src/qtgroupingproxy.cpp
+++ b/src/qtgroupingproxy.cpp
@@ -18,11 +18,14 @@
#include "qtgroupingproxy.h"
+#include
#include
#include
#include
+using namespace MOBase;
+
/*!
\class QtGroupingProxy
\brief The QtGroupingProxy class will group source model rows by adding a new top tree-level.
@@ -86,7 +89,6 @@ QtGroupingProxy::setGroupedColumn( int groupedColumn )
QList
QtGroupingProxy::belongsTo( const QModelIndex &idx )
{
- //qDebug() << __FILE__ << __FUNCTION__;
QList rowDataList;
//get all the data for this index from the model
@@ -106,7 +108,7 @@ QtGroupingProxy::belongsTo( const QModelIndex &idx )
i.next();
int role = i.key();
QVariant variant = i.value();
- // qDebug() << "role " << role << " : (" << variant.typeName() << ") : "<< variant;
+
if ( variant.type() == QVariant::List )
{
//a list of variants get's expanded to multiple rows
@@ -162,7 +164,7 @@ QtGroupingProxy::buildTree()
m_parentCreateList.clear();
int max = sourceModel()->rowCount( m_rootNode );
- //qDebug() << QString("building tree with %1 leafs.").arg( max );
+
//WARNING: these have to be added in order because the addToGroups function is optimized for
//modelRowsInserted(). Failure to do so will result in wrong data shown in the view at best.
for( int row = 0; row < max; row++ )
@@ -232,9 +234,6 @@ QtGroupingProxy::addSourceRow( const QModelIndex &idx )
int updatedGroup = -1;
if( !data.isEmpty() )
{
- // qDebug() << QString("index %1 belongs to group %2").arg( row )
- // .arg( data[0][Qt::DisplayRole].toString() );
-
foreach( const RowData &cachedData, m_groupMaps )
{
//when this matches the index belongs to an existing group
@@ -316,21 +315,12 @@ QtGroupingProxy::indexOfParentCreate( const QModelIndex &parent ) const
pc.row = parent.row();
m_parentCreateList << pc;
- //dumpParentCreateList();
- // qDebug() << QString( "m_parentCreateList: (%1)" ).arg( m_parentCreateList.size() );
- // for( int i = 0 ; i < m_parentCreateList.size() ; i++ )
- // {
- // qDebug() << i << " : " << m_parentCreateList[i].parentCreateIndex <<
- // " | " << m_parentCreateList[i].row;
- // }
-
return m_parentCreateList.size() - 1;
}
QModelIndex
QtGroupingProxy::index( int row, int column, const QModelIndex &parent ) const
{
- // qDebug() << "index requested for: (" << row << "," << column << "), " << parent;
if( !hasIndex(row, column, parent) ) {
return QModelIndex();
}
@@ -350,17 +340,15 @@ QtGroupingProxy::index( int row, int column, const QModelIndex &parent ) const
QModelIndex
QtGroupingProxy::parent( const QModelIndex &index ) const
{
- //qDebug() << "parent: " << index;
if( !index.isValid() )
return QModelIndex();
int parentCreateIndex = index.internalId();
- //qDebug() << "parentCreateIndex: " << parentCreateIndex;
if( parentCreateIndex == -1 || parentCreateIndex >= m_parentCreateList.count() )
return QModelIndex();
struct ParentCreate pc = m_parentCreateList[parentCreateIndex];
- //qDebug() << "parentCreate: (" << pc.parentCreateIndex << "," << pc.row << ")";
+
//only items at column 0 have children
return createIndex( pc.row, 0, pc.parentCreateIndex );
}
@@ -368,12 +356,10 @@ QtGroupingProxy::parent( const QModelIndex &index ) const
int
QtGroupingProxy::rowCount( const QModelIndex &index ) const
{
- //qDebug() << "rowCount: " << index;
if( !index.isValid() )
{
//the number of top level groups + the number of non-grouped items
int rows = m_groupMaps.count() + m_groupHash.value( std::numeric_limits::max() ).count();
- //qDebug() << rows << " in root group";
return rows;
}
@@ -382,12 +368,10 @@ QtGroupingProxy::rowCount( const QModelIndex &index ) const
{
qint64 groupIndex = index.row();
int rows = m_groupHash.value( groupIndex ).count();
- //qDebug() << rows << " in group " << m_groupMaps[groupIndex];
return rows;
} else {
QModelIndex originalIndex = mapToSource( index );
int rowCount = sourceModel()->rowCount( originalIndex );
- //qDebug() << "original item: rowCount == " << rowCount;
return rowCount;
}
}
@@ -447,7 +431,7 @@ QtGroupingProxy::data( const QModelIndex &index, int role ) const
{
if( !index.isValid() )
return QVariant();
- // qDebug() << __FUNCTION__ << index << " role: " << role;
+
int row = index.row();
int column = index.column();
if( isGroup( index ) )
@@ -495,11 +479,9 @@ QtGroupingProxy::data( const QModelIndex &index, int role ) const
}
}
- //qDebug() << __FUNCTION__ << "is a group";
//use cached or precalculated data
if( m_groupMaps[row][column].contains( Qt::DisplayRole ) )
{
- // qDebug() << "Using cached data for " << row << "x" << column << ": " << m_groupMaps[row][column].value(Qt::DisplayRole).toString();
if ((m_flags & FLAG_NOGROUPNAME) != 0) {
QModelIndex parentIndex = this->index( row, 0, index.parent() );
QModelIndex childIndex = this->index( 0, column, parentIndex );
@@ -526,18 +508,17 @@ QtGroupingProxy::data( const QModelIndex &index, int role ) const
function = mapToSource(childIndex).data(m_aggregateRole).toInt();
}
- //qDebug() << __FUNCTION__ << "childCount: " << childCount;
//Need a parentIndex with column == 0 because only those have children.
QModelIndex parentIndex = this->index( row, 0, index.parent() );
for( int childRow = 0; childRow < childCount; childRow++ )
{
QModelIndex childIndex = this->index( childRow, column, parentIndex );
QVariant data = mapToSource( childIndex ).data( role );
- //qDebug() << __FUNCTION__ << data << QVariant::typeToName(data.type());
+
if( data.isValid() && !variantsOfChildren.contains( data ) )
variantsOfChildren << data;
}
- //qDebug() << "gathered this data from children: " << variantsOfChildren;
+
//saving in cache
ItemData roleMap = m_groupMaps[row].value( column );
foreach( const QVariant &variant, variantsOfChildren )
@@ -547,8 +528,6 @@ QtGroupingProxy::data( const QModelIndex &index, int role ) const
}
}
- //qDebug() << QString("roleMap[%1]:").arg(role) << roleMap[role];
-
if( variantsOfChildren.count() == 0 )
return QVariant();
@@ -621,34 +600,30 @@ QtGroupingProxy::isGroup( const QModelIndex &index ) const
QModelIndex
QtGroupingProxy::mapToSource( const QModelIndex &index ) const
{
- //qDebug() << "mapToSource: " << index;
if( !index.isValid() ) {
return m_rootNode;
}
if( isGroup( index ) )
{
- //qDebug() << "is a group: " << index.data( Qt::DisplayRole ).toString();
return m_rootNode;
}
QModelIndex proxyParent = index.parent();
- //qDebug() << "parent: " << proxyParent;
QModelIndex originalParent = mapToSource( proxyParent );
- //qDebug() << "originalParent: " << originalParent;
+
int originalRow = index.row();
if( originalParent == m_rootNode )
{
int indexInGroup = index.row();
if( !proxyParent.isValid() )
indexInGroup -= m_groupMaps.count();
- //qDebug() << "indexInGroup" << indexInGroup;
+
QList childRows = m_groupHash.value( proxyParent.row() );
if( childRows.isEmpty() || indexInGroup >= childRows.count() || indexInGroup < 0 )
return QModelIndex();
originalRow = childRows.at( indexInGroup );
- //qDebug() << "originalRow: " << originalRow;
}
return sourceModel()->index( originalRow, index.column(), originalParent );
}
@@ -674,7 +649,7 @@ QtGroupingProxy::mapFromSource( const QModelIndex &idx ) const
QModelIndex proxyParent;
QModelIndex sourceParent = idx.parent();
- //qDebug() << "sourceParent: " << sourceParent;
+
int proxyRow = idx.row();
int sourceRow = idx.row();
@@ -708,15 +683,12 @@ QtGroupingProxy::mapFromSource( const QModelIndex &idx ) const
proxyParent = QModelIndex();
// if the proxy item is not in a group it will be below the groups.
int groupLength = m_groupMaps.count();
- //qDebug() << "groupNames length: " << groupLength;
int i = m_groupHash.value( std::numeric_limits::max() ).indexOf( sourceRow );
- //qDebug() << "index in hash: " << i;
+
proxyRow = groupLength + i;
}
}
- //qDebug() << "proxyParent: " << proxyParent;
- //qDebug() << "proxyRow: " << proxyRow;
return this->index( proxyRow, idx.column(), proxyParent );
}
@@ -731,9 +703,9 @@ QtGroupingProxy::flags( const QModelIndex &idx ) const
return 0;
}
+
//only if the grouped column has the editable flag set allow the
//actions leading to setData on the source (edit & drop)
- // qDebug() << idx;
if( isGroup( idx ) )
{
// dumpGroups();
@@ -749,7 +721,7 @@ QtGroupingProxy::flags( const QModelIndex &idx ) const
m_rootNode.parent() );
if ( (originalIdx.flags() & Qt::ItemIsUserCheckable) == 0 )
{
- qDebug("row %d is not checkable", originalRow);
+ log::debug("row {} is not checkable", originalRow);
checkable = false;
}
}
@@ -892,9 +864,7 @@ QtGroupingProxy::modelRowsAboutToBeInserted( const QModelIndex &parent, int star
if( parent != m_rootNode )
{
//an item will be added to an original index, remap and pass it on
- // qDebug() << parent;
QModelIndex proxyParent = mapFromSource( parent );
- // qDebug() << proxyParent;
beginInsertRows( proxyParent, start, end );
}
}
@@ -914,7 +884,12 @@ QtGroupingProxy::modelRowsInserted( const QModelIndex &parent, int start, int en
{
//an item was added to an original index, remap and pass it on
QModelIndex proxyParent = mapFromSource( parent );
- qDebug() << proxyParent;
+
+ QString s;
+ QDebug debug(&s);
+ debug << proxyParent;
+ log::debug("{}", s);
+
//beginInsertRows had to be called in modelRowsAboutToBeInserted()
endInsertRows();
}
@@ -951,9 +926,7 @@ QtGroupingProxy::modelRowsAboutToBeRemoved( const QModelIndex &parent, int start
else
{
//child item(s) of an original item will be removed, remap and pass it on
- // qDebug() << parent;
QModelIndex proxyParent = mapFromSource( parent );
- // qDebug() << proxyParent;
beginRemoveRows( proxyParent, start, end );
}
}
@@ -1044,16 +1017,24 @@ QtGroupingProxy::isAGroupSelected( const QModelIndexList& list ) const
void
QtGroupingProxy::dumpGroups() const
{
- qDebug() << "m_groupHash: ";
+ QString s;
+ QDebug debug(&s);
+
+ debug << "m_groupHash:\n";
for( int groupIndex = -1; groupIndex < m_groupHash.keys().count() - 1; groupIndex++ )
{
- qDebug() << groupIndex << " : " << m_groupHash.value( groupIndex );
+ debug << groupIndex << " : " << m_groupHash.value( groupIndex ) << "\n";
}
- qDebug() << "m_groupMaps: ";
+ debug << "m_groupMaps:\n";
for( int groupIndex = 0; groupIndex < m_groupMaps.count(); groupIndex++ )
- qDebug() << m_groupMaps[groupIndex] << ": " << m_groupHash.value( groupIndex );
- qDebug() << m_groupHash.value( std::numeric_limits::max() );
+ {
+ debug << m_groupMaps[groupIndex] << ": " << m_groupHash.value( groupIndex ) << "\n";
+ }
+
+ debug << m_groupHash.value( std::numeric_limits::max() );
+
+ log::debug("{}", s);
}
diff --git a/src/selfupdater.cpp b/src/selfupdater.cpp
index e967b27c..0ca39b19 100644
--- a/src/selfupdater.cpp
+++ b/src/selfupdater.cpp
@@ -150,23 +150,23 @@ void SelfUpdater::testForUpdate()
VersionInfo newestVer(newest["tag_name"].toString());
if (newestVer > this->m_MOVersion) {
m_UpdateCandidate = newest;
- qDebug("update available: %s -> %s",
- qUtf8Printable(this->m_MOVersion.displayString(3)),
- qUtf8Printable(newestVer.displayString(3)));
+ log::debug("update available: {} -> {}",
+ this->m_MOVersion.displayString(3),
+ newestVer.displayString(3));
emit updateAvailable();
} else if (newestVer < this->m_MOVersion) {
// this could happen if the user switches from using prereleases to
// stable builds. Should we downgrade?
- qDebug("This version is newer than the latest released one: %s -> %s",
- qUtf8Printable(this->m_MOVersion.displayString(3)),
- qUtf8Printable(newestVer.displayString(3)));
+ log::debug("This version is newer than the latest released one: {} -> {}",
+ this->m_MOVersion.displayString(3),
+ newestVer.displayString(3));
}
}
});
}
//Catch all is bad by design, should be improved
catch (...) {
- qDebug("Unable to connect to github.com to check version");
+ log::debug("Unable to connect to github.com to check version");
}
}
@@ -230,7 +230,7 @@ void SelfUpdater::closeProgress()
void SelfUpdater::openOutputFile(const QString &fileName)
{
QString outputPath = QDir::fromNativeSeparators(qApp->property("dataPath").toString()) + "/" + fileName;
- qDebug("downloading to %s", qUtf8Printable(outputPath));
+ log::debug("downloading to {}", outputPath);
m_UpdateFile.setFileName(outputPath);
m_UpdateFile.open(QIODevice::WriteOnly);
}
@@ -312,7 +312,7 @@ void SelfUpdater::downloadFinished()
return;
}
- qDebug("download: %s", m_UpdateFile.fileName().toUtf8().constData());
+ log::debug("download: {}", m_UpdateFile.fileName());
try {
installUpdate();
diff --git a/src/settings.cpp b/src/settings.cpp
index 9c303442..ff5b9976 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -54,7 +54,6 @@ along with Mod Organizer. If not, see .
#include
#include // for Qt::UserRole, etc
-#include // for qDebug, qWarning
#include // For ShellExecuteW, HINSTANCE, etc
#include // For storage
@@ -635,7 +634,7 @@ void Settings::updateServers(const QList &servers)
QVariantMap val = m_Settings.value(key).toMap();
QDate lastSeen = val["lastSeen"].toDate();
if (lastSeen.daysTo(now) > 30) {
- qDebug("removing server %s since it hasn't been available for downloads in over a month", qUtf8Printable(key));
+ log::debug("removing server {} since it hasn't been available for downloads in over a month", key);
m_Settings.remove(key);
}
}
@@ -758,10 +757,10 @@ void Settings::query(PluginContainer *pluginContainer, QWidget *parent)
if (m_Settings.value(k).toString() != before[k] && !k.contains("username") && !k.contains("password"))
{
if (first_update) {
- qDebug("Changed settings:");
+ log::debug("Changed settings:");
first_update = false;
}
- qDebug(" %s=%s", k.toUtf8().data(), m_Settings.value(k).toString().toUtf8().data());
+ log::debug(" {}={}", k, m_Settings.value(k).toString());
}
m_Settings.endGroup();
}
diff --git a/src/usvfsconnector.cpp b/src/usvfsconnector.cpp
index 197955b8..5918c8a5 100644
--- a/src/usvfsconnector.cpp
+++ b/src/usvfsconnector.cpp
@@ -60,8 +60,7 @@ LogWorker::LogWorker()
"yyyy-MM-dd_hh-mm-ss")))
{
m_LogFile.open(QIODevice::WriteOnly);
- qDebug("usvfs log messages are written to %s",
- qUtf8Printable(m_LogFile.fileName()));
+ log::debug("usvfs log messages are written to {}", m_LogFile.fileName());
}
LogWorker::~LogWorker()
@@ -129,7 +128,10 @@ UsvfsConnector::UsvfsConnector()
USVFSInitParameters(¶ms, SHMID, false, level, dumpType, dumpPath.c_str());
InitLogging(false);
- qDebug("Initializing VFS <%s, %d, %d, %s>", params.instanceName, params.logLevel, params.crashDumpsType, params.crashDumpsPath);
+ log::debug(
+ "Initializing VFS <{}, {}, {}, {}>",
+ params.instanceName, static_cast(params.logLevel),
+ static_cast(params.crashDumpsType), params.crashDumpsPath);
CreateVFS(¶ms);
@@ -168,7 +170,7 @@ void UsvfsConnector::updateMapping(const MappingType &mapping)
int files = 0;
int dirs = 0;
- qDebug("Updating VFS mappings...");
+ log::debug("Updating VFS mappings...");
ClearVirtualMappings();
@@ -196,14 +198,7 @@ void UsvfsConnector::updateMapping(const MappingType &mapping)
}
}
- qDebug("VFS mappings updated ", dirs, files);
- /*
- size_t dumpSize = 0;
- CreateVFSDump(nullptr, &dumpSize);
- std::unique_ptr buffer(new char[dumpSize]);
- CreateVFSDump(buffer.get(), &dumpSize);
- qDebug(buffer.get());
- */
+ log::debug("VFS mappings updated ", dirs, files);
}
void UsvfsConnector::updateParams(
--
cgit v1.3.1
From 5304d52f9373e0078674af79b656e2e4d010ca90 Mon Sep 17 00:00:00 2001
From: isanae <14251494+isanae@users.noreply.github.com>
Date: Fri, 19 Jul 2019 06:53:52 -0400
Subject: removed some useless logging initializing usvfs logging now logs
strings for log level and crash dump type
---
src/downloadmanager.cpp | 3 ---
src/main.cpp | 2 --
src/organizercore.cpp | 27 ++++++++++---------------
src/usvfsconnector.cpp | 53 ++++++++++++++++++++++++++++++++++++++++++++++---
4 files changed, 61 insertions(+), 24 deletions(-)
(limited to 'src/usvfsconnector.cpp')
diff --git a/src/downloadmanager.cpp b/src/downloadmanager.cpp
index d2556faa..1f86f9aa 100644
--- a/src/downloadmanager.cpp
+++ b/src/downloadmanager.cpp
@@ -378,9 +378,6 @@ void DownloadManager::refreshList()
}
}
- //if (m_ActiveDownloads.size() != downloadsBefore) {
- log::debug("Downloads after refresh: {}", m_ActiveDownloads.size());
- //}
emit update(-1);
//let watcher trigger refreshes again
diff --git a/src/main.cpp b/src/main.cpp
index f53a574e..0adfc110 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -623,8 +623,6 @@ int runApplication(MOApplication &application, SingleInstance &instance,
QImage image(pluginSplash);
if (!image.isNull()) {
image.save(dataPath + "/splash.png");
- } else {
- log::debug("no plugin splash");
}
}
diff --git a/src/organizercore.cpp b/src/organizercore.cpp
index b61ebde8..92372d82 100644
--- a/src/organizercore.cpp
+++ b/src/organizercore.cpp
@@ -77,26 +77,21 @@ CrashDumpsType OrganizerCore::m_globalCrashDumpsType = CrashDumpsType::None;
static bool isOnline()
{
- QList interfaces = QNetworkInterface::allInterfaces();
-
- bool connected = false;
- for (auto iter = interfaces.begin(); iter != interfaces.end() && !connected;
- ++iter) {
- if ((iter->flags() & QNetworkInterface::IsUp)
- && (iter->flags() & QNetworkInterface::IsRunning)
- && !(iter->flags() & QNetworkInterface::IsLoopBack)) {
- auto addresses = iter->addressEntries();
- if (addresses.count() == 0) {
- continue;
+ const auto runningFlags =
+ QNetworkInterface::IsUp | QNetworkInterface::IsRunning;
+
+ for (auto&& i : QNetworkInterface::allInterfaces()) {
+ if (!(i.flags() & QNetworkInterface::IsLoopBack)) {
+ if (i.flags() & runningFlags) {
+ auto addresses = i.addressEntries();
+ if (!addresses.empty()) {
+ return true;
+ }
}
- log::debug("interface {} seems to be up (address: {})",
- iter->humanReadableName(),
- addresses[0].ip().toString());
- connected = true;
}
}
- return connected;
+ return false;
}
static bool renameFile(const QString &oldName, const QString &newName,
diff --git a/src/usvfsconnector.cpp b/src/usvfsconnector.cpp
index 5918c8a5..b5e6edb1 100644
--- a/src/usvfsconnector.cpp
+++ b/src/usvfsconnector.cpp
@@ -118,6 +118,48 @@ CrashDumpsType crashDumpsType(int type)
}
}
+QString toString(LogLevel lv)
+{
+ switch (lv)
+ {
+ case LogLevel::Debug:
+ return "debug";
+
+ case LogLevel::Info:
+ return "info";
+
+ case LogLevel::Warning:
+ return "warning";
+
+ case LogLevel::Error:
+ return "error";
+
+ default:
+ return QString("%1").arg(static_cast(lv));
+ }
+}
+
+QString toString(CrashDumpsType t)
+{
+ switch (t)
+ {
+ case CrashDumpsType::None:
+ return "none";
+
+ case CrashDumpsType::Mini:
+ return "mini";
+
+ case CrashDumpsType::Data:
+ return "data";
+
+ case CrashDumpsType::Full:
+ return "full";
+
+ default:
+ return QString("%1").arg(static_cast(t));
+ }
+}
+
UsvfsConnector::UsvfsConnector()
{
USVFSParameters params;
@@ -129,9 +171,14 @@ UsvfsConnector::UsvfsConnector()
InitLogging(false);
log::debug(
- "Initializing VFS <{}, {}, {}, {}>",
- params.instanceName, static_cast(params.logLevel),
- static_cast(params.crashDumpsType), params.crashDumpsPath);
+ "initializing usvfs:\n"
+ " . instance: {}\n"
+ " . log: {}\n"
+ " . dump: {} ({})",
+ params.instanceName,
+ toString(params.logLevel),
+ params.crashDumpsPath,
+ toString(params.crashDumpsType));
CreateVFS(¶ms);
--
cgit v1.3.1
From 4f1b15f0a1b2e6cbca4b420608d81570af489067 Mon Sep 17 00:00:00 2001
From: isanae <14251494+isanae@users.noreply.github.com>
Date: Sat, 24 Aug 2019 16:07:07 -0400
Subject: changed crash dump type to use enum instead of int added
ColorSettings settings dialog general and diag tabs don't use qsettings
anymore removed logging of setting changes, will be added back to Settings
class
---
src/modinfo.cpp | 1 -
src/modlist.cpp | 10 +--
src/organizercore.cpp | 6 +-
src/organizercore.h | 4 +-
src/pluginlist.cpp | 2 +-
src/settings.cpp | 160 ++++++++++++++++++++++++++++++--------
src/settings.h | 70 ++++++++++-------
src/settingsdialog.cpp | 26 +------
src/settingsdialog.ui | 20 -----
src/settingsdialogdiagnostics.cpp | 38 ++++++++-
src/settingsdialogdiagnostics.h | 1 +
src/settingsdialoggeneral.cpp | 66 ++++++++--------
src/usvfsconnector.cpp | 7 +-
src/usvfsconnector.h | 2 +-
14 files changed, 259 insertions(+), 154 deletions(-)
(limited to 'src/usvfsconnector.cpp')
diff --git a/src/modinfo.cpp b/src/modinfo.cpp
index 5a05e7ca..e3daa4fd 100644
--- a/src/modinfo.cpp
+++ b/src/modinfo.cpp
@@ -42,7 +42,6 @@ along with Mod Organizer. If not, see .
#include
#include
#include
-#include
using namespace MOBase;
using namespace MOShared;
diff --git a/src/modlist.cpp b/src/modlist.cpp
index c591c49b..94b4a387 100644
--- a/src/modlist.cpp
+++ b/src/modlist.cpp
@@ -416,15 +416,15 @@ QVariant ModList::data(const QModelIndex &modelIndex, int role) const
bool archiveOverwritten = m_ArchiveOverwritten.find(modIndex) != m_ArchiveOverwritten.end();
bool archiveLooseOverwritten = m_ArchiveLooseOverwritten.find(modIndex) != m_ArchiveLooseOverwritten.end();
if (modInfo->getHighlight() & ModInfo::HIGHLIGHT_PLUGIN) {
- return Settings::instance().modlistContainsPluginColor();
+ return Settings::instance().colors().modlistContainsPlugin();
} else if (overwritten || archiveLooseOverwritten) {
- return Settings::instance().modlistOverwritingLooseColor();
+ return Settings::instance().colors().modlistOverwritingLoose();
} else if (overwrite || archiveLooseOverwrite) {
- return Settings::instance().modlistOverwrittenLooseColor();
+ return Settings::instance().colors().modlistOverwrittenLoose();
} else if (archiveOverwritten) {
- return Settings::instance().modlistOverwritingArchiveColor();
+ return Settings::instance().colors().modlistOverwritingArchive();
} else if (archiveOverwrite) {
- return Settings::instance().modlistOverwrittenArchiveColor();
+ return Settings::instance().colors().modlistOverwrittenArchive();
} else if (modInfo->hasFlag(ModInfo::FLAG_SEPARATOR)
&& modInfo->getColor().isValid()
&& ((role != ViewMarkingScrollBar::DEFAULT_ROLE)
diff --git a/src/organizercore.cpp b/src/organizercore.cpp
index 73d0abac..5a8ee4c2 100644
--- a/src/organizercore.cpp
+++ b/src/organizercore.cpp
@@ -667,7 +667,7 @@ void OrganizerCore::prepareVFS()
}
void OrganizerCore::updateVFSParams(
- log::Levels logLevel, int crashDumpsType, QString executableBlacklist)
+ log::Levels logLevel, CrashDumpsType crashDumpsType, QString executableBlacklist)
{
setGlobalCrashDumpsType(crashDumpsType);
m_USVFS.updateParams(logLevel, crashDumpsType, executableBlacklist);
@@ -692,8 +692,8 @@ bool OrganizerCore::cycleDiagnostics() {
}
//static
-void OrganizerCore::setGlobalCrashDumpsType(int crashDumpsType) {
- m_globalCrashDumpsType = ::crashDumpsType(crashDumpsType);
+void OrganizerCore::setGlobalCrashDumpsType(CrashDumpsType type) {
+ m_globalCrashDumpsType = type;
}
//static
diff --git a/src/organizercore.h b/src/organizercore.h
index 4bcfe745..a14d79a9 100644
--- a/src/organizercore.h
+++ b/src/organizercore.h
@@ -193,7 +193,7 @@ public:
void prepareVFS();
void updateVFSParams(
- MOBase::log::Levels logLevel, int crashDumpsType,
+ MOBase::log::Levels logLevel, CrashDumpsType crashDumpsType,
QString executableBlacklist);
void setLogLevel(MOBase::log::Levels level);
@@ -201,7 +201,7 @@ public:
bool cycleDiagnostics();
static CrashDumpsType getGlobalCrashDumpsType() { return m_globalCrashDumpsType; }
- static void setGlobalCrashDumpsType(int crashDumpsType);
+ static void setGlobalCrashDumpsType(CrashDumpsType crashDumpsType);
static std::wstring crashDumpsPath();
public:
diff --git a/src/pluginlist.cpp b/src/pluginlist.cpp
index 8637f546..ddfe492e 100644
--- a/src/pluginlist.cpp
+++ b/src/pluginlist.cpp
@@ -931,7 +931,7 @@ QVariant PluginList::data(const QModelIndex &modelIndex, int role) const
} else if (role == Qt::BackgroundRole
|| (role == ViewMarkingScrollBar::DEFAULT_ROLE)) {
if (m_ESPs[index].m_ModSelected) {
- return Settings::instance().pluginListContainedColor();
+ return Settings::instance().colors().pluginListContained();
} else {
return QVariant();
}
diff --git a/src/settings.cpp b/src/settings.cpp
index 844ee81e..2236fc9d 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -24,7 +24,6 @@ along with Mod Organizer. If not, see .
#include "expanderwidget.h"
#include
#include
-#include
using namespace MOBase;
@@ -33,7 +32,13 @@ std::optional getOptional(
const QSettings& s, const QString& name, std::optional def={})
{
if (s.contains(name)) {
- return s.value(name).value();
+ const auto v = s.value(name);
+
+ if constexpr (std::is_enum_v) {
+ return static_cast(v.value>());
+ } else {
+ return v.value();
+ }
}
return def;
@@ -160,10 +165,12 @@ void warnIfNotCheckable(const QAbstractButton* b)
}
}
+
Settings *Settings::s_Instance = nullptr;
-Settings::Settings(const QString& path)
- : m_Settings(path, QSettings::IniFormat), m_Geometry(m_Settings)
+Settings::Settings(const QString& path) :
+ m_Settings(path, QSettings::IniFormat),
+ m_Geometry(m_Settings), m_Colors(m_Settings)
{
if (s_Instance != nullptr) {
throw std::runtime_error("second instance of \"Settings\" created");
@@ -280,6 +287,11 @@ bool Settings::colorSeparatorScrollbar() const
return m_Settings.value("Settings/colorSeparatorScrollbars", true).toBool();
}
+void Settings::setColorSeparatorScrollbar(bool b)
+{
+ m_Settings.setValue("Settings/colorSeparatorScrollbars", b);
+}
+
void Settings::managedGameChanged(IPluginGame const *gamePlugin)
{
m_GamePlugin = gamePlugin;
@@ -397,6 +409,11 @@ bool Settings::usePrereleases() const
return m_Settings.value("Settings/use_prereleases", false).toBool();
}
+void Settings::setUsePrereleases(bool b)
+{
+ m_Settings.setValue("Settings/use_prereleases", b);
+}
+
void Settings::setDownloadSpeed(const QString &serverName, int bytesPerSecond)
{
m_Settings.beginGroup("Servers");
@@ -615,16 +632,27 @@ bool Settings::getSteamLogin(QString &username, QString &password) const
return !username.isEmpty() && !password.isEmpty();
}
+
bool Settings::compactDownloads() const
{
return m_Settings.value("Settings/compact_downloads", false).toBool();
}
+void Settings::setCompactDownloads(bool b)
+{
+ m_Settings.setValue("Settings/compact_downloads", b);
+}
+
bool Settings::metaDownloads() const
{
return m_Settings.value("Settings/meta_downloads", false).toBool();
}
+void Settings::setMetaDownloads(bool b)
+{
+ m_Settings.setValue("Settings/meta_downloads", b);
+}
+
bool Settings::offlineMode() const
{
return m_Settings.value("Settings/offline_mode", false).toBool();
@@ -640,44 +668,25 @@ void Settings::setLogLevel(log::Levels level)
m_Settings.setValue("Settings/log_level", static_cast(level));
}
-int Settings::crashDumpsType() const
+CrashDumpsType Settings::crashDumpsType() const
{
- return m_Settings.value("Settings/crash_dumps_type", static_cast(CrashDumpsType::Mini)).toInt();
+ const auto v = getOptional(m_Settings, "Settings/crash_dumps_type");
+ return v.value_or(CrashDumpsType::Mini);
}
-int Settings::crashDumpsMax() const
+void Settings::setCrashDumpsType(CrashDumpsType type)
{
- return m_Settings.value("Settings/crash_dumps_max", 5).toInt();
+ m_Settings.setValue("Settings/crash_dumps_type", static_cast(type));
}
-QColor Settings::modlistOverwrittenLooseColor() const
-{
- return m_Settings.value("Settings/overwrittenLooseFilesColor", QColor(0, 255, 0, 64)).value();
-}
-
-QColor Settings::modlistOverwritingLooseColor() const
-{
- return m_Settings.value("Settings/overwritingLooseFilesColor", QColor(255, 0, 0, 64)).value();
-}
-
-QColor Settings::modlistOverwrittenArchiveColor() const
-{
- return m_Settings.value("Settings/overwrittenArchiveFilesColor", QColor(0, 255, 255, 64)).value();
-}
-
-QColor Settings::modlistOverwritingArchiveColor() const
-{
- return m_Settings.value("Settings/overwritingArchiveFilesColor", QColor(255, 0, 255, 64)).value();
-}
-
-QColor Settings::modlistContainsPluginColor() const
+int Settings::crashDumpsMax() const
{
- return m_Settings.value("Settings/containsPluginColor", QColor(0, 0, 255, 64)).value();
+ return m_Settings.value("Settings/crash_dumps_max", 5).toInt();
}
-QColor Settings::pluginListContainedColor() const
+void Settings::setCrashDumpsMax(int n)
{
- return m_Settings.value("Settings/containedColor", QColor(0, 0, 255, 64)).value();
+ return m_Settings.setValue("Settings/crash_dumps_max", n);
}
QString Settings::executablesBlacklist() const
@@ -850,6 +859,11 @@ QString Settings::language()
return result;
}
+void Settings::setLanguage(const QString& name)
+{
+ m_Settings.setValue("Settings/language", name);
+}
+
void Settings::updateServers(const QList &servers)
{
m_Settings.beginGroup("Servers");
@@ -1132,6 +1146,16 @@ const GeometrySettings& Settings::geometry() const
return m_Geometry;
}
+ColorSettings& Settings::colors()
+{
+ return m_Colors;
+}
+
+const ColorSettings& Settings::colors() const
+{
+ return m_Colors;
+}
+
QSettings::Status Settings::sync() const
{
m_Settings.sync();
@@ -1451,6 +1475,78 @@ void GeometrySettings::restoreDocks(QMainWindow* mw) const
}
+ColorSettings::ColorSettings(QSettings& s)
+ : m_Settings(s)
+{
+}
+
+QColor ColorSettings::modlistOverwrittenLoose() const
+{
+ return getOptional(m_Settings, "Settings/overwrittenLooseFilesColor")
+ .value_or(QColor(0, 255, 0, 64));
+}
+
+void ColorSettings::setModlistOverwrittenLoose(const QColor& c)
+{
+ m_Settings.setValue("Settings/overwrittenLooseFilesColor", c);
+}
+
+QColor ColorSettings::modlistOverwritingLoose() const
+{
+ return getOptional(m_Settings, "Settings/overwritingLooseFilesColor")
+ .value_or(QColor(255, 0, 0, 64));
+}
+
+void ColorSettings::setModlistOverwritingLoose(const QColor& c)
+{
+ m_Settings.setValue("Settings/overwritingLooseFilesColor", c);
+}
+
+QColor ColorSettings::modlistOverwrittenArchive() const
+{
+ return getOptional(m_Settings, "Settings/overwrittenArchiveFilesColor")
+ .value_or(QColor(0, 255, 255, 64));
+}
+
+void ColorSettings::setModlistOverwrittenArchive(const QColor& c)
+{
+ m_Settings.setValue("Settings/overwrittenArchiveFilesColor", c);
+}
+
+QColor ColorSettings::modlistOverwritingArchive() const
+{
+ return getOptional(m_Settings, "Settings/overwritingArchiveFilesColor")
+ .value_or(QColor(255, 0, 255, 64));
+}
+
+void ColorSettings::setModlistOverwritingArchive(const QColor& c)
+{
+ m_Settings.setValue("Settings/overwritingArchiveFilesColor", c);
+}
+
+QColor ColorSettings::modlistContainsPlugin() const
+{
+ return getOptional(m_Settings, "Settings/containsPluginColor")
+ .value_or(QColor(0, 0, 255, 64));
+}
+
+void ColorSettings::setModlistContainsPlugin(const QColor& c)
+{
+ m_Settings.setValue("Settings/containsPluginColor", c);
+}
+
+QColor ColorSettings::pluginListContained() const
+{
+ return getOptional(m_Settings, "Settings/containedColor")
+ .value_or(QColor(0, 0, 255, 64));
+}
+
+void ColorSettings::setPluginListContained(const QColor& c)
+{
+ m_Settings.setValue("Settings/containedColor", c);
+}
+
+
GeometrySaver::GeometrySaver(Settings& s, QDialog* dialog)
: m_settings(s), m_dialog(dialog)
{
diff --git a/src/settings.h b/src/settings.h
index b25af15f..5b1d7bfc 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -23,6 +23,7 @@ along with Mod Organizer. If not, see .
#include "loadmechanism.h"
#include
#include
+#include
namespace MOBase {
class IPlugin;
@@ -96,6 +97,36 @@ private:
};
+class ColorSettings
+{
+public:
+ ColorSettings(QSettings& s);
+
+ void setCrashDumpsMax(int i) const;
+
+ QColor modlistOverwrittenLoose() const;
+ void setModlistOverwrittenLoose(const QColor& c);
+
+ QColor modlistOverwritingLoose() const;
+ void setModlistOverwritingLoose(const QColor& c);
+
+ QColor modlistOverwrittenArchive() const;
+ void setModlistOverwrittenArchive(const QColor& c);
+
+ QColor modlistOverwritingArchive() const;
+ void setModlistOverwritingArchive(const QColor& c);
+
+ QColor modlistContainsPlugin() const;
+ void setModlistContainsPlugin(const QColor& c);
+
+ QColor pluginListContained() const;
+ void setPluginListContained(const QColor& c) ;
+
+private:
+ QSettings& m_Settings;
+};
+
+
enum class EndorsementState
{
Accepted = 1,
@@ -268,6 +299,10 @@ public:
GeometrySettings& geometry();
const GeometrySettings& geometry() const;
+ ColorSettings& colors();
+ const ColorSettings& colors() const;
+
+
/**
* retrieve the directory where profiles stored (with native separators)
**/
@@ -329,43 +364,22 @@ public:
* @return true if the user chose compact downloads
*/
bool compactDownloads() const;
+ void setCompactDownloads(bool b);
/**
* @return true if the user chose meta downloads
*/
bool metaDownloads() const;
+ void setMetaDownloads(bool b);
- /**
- * @return the configured log level
- */
MOBase::log::Levels logLevel() const;
-
- /**
- * sets the log level setting
- */
void setLogLevel(MOBase::log::Levels level);
- /**
- * @return the configured crash dumps type
- */
- int crashDumpsType() const;
+ CrashDumpsType crashDumpsType() const;
+ void setCrashDumpsType(CrashDumpsType type);
- /**
- * @return the configured crash dumps max
- */
int crashDumpsMax() const;
-
- QColor modlistOverwrittenLooseColor() const;
-
- QColor modlistOverwritingLooseColor() const;
-
- QColor modlistOverwrittenArchiveColor() const;
-
- QColor modlistOverwritingArchiveColor() const;
-
- QColor modlistContainsPluginColor() const;
-
- QColor pluginListContainedColor() const;
+ void setCrashDumpsMax(int n);
QString executablesBlacklist() const;
@@ -473,6 +487,7 @@ public:
* @return short code of the configured language (corresponding to the translation files)
*/
QString language();
+ void setLanguage(const QString& name);
/**
* @brief updates the list of known servers
@@ -499,6 +514,7 @@ public:
std::vector plugins() const { return m_Plugins; }
bool usePrereleases() const;
+ void setUsePrereleases(bool b);
/**
* @brief register MO as the handler for nxm links
@@ -512,6 +528,7 @@ public:
* @return the state of the setting
*/
bool colorSeparatorScrollbar() const;
+ void setColorSeparatorScrollbar(bool b);
static QColor getIdealTextColor(const QColor& rBackgroundColor);
@@ -540,6 +557,7 @@ private:
MOBase::IPluginGame const *m_GamePlugin;
mutable QSettings m_Settings;
GeometrySettings m_Geometry;
+ ColorSettings m_Colors;
LoadMechanism m_LoadMechanism;
std::vector m_Plugins;
diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp
index 097dafc8..9d031785 100644
--- a/src/settingsdialog.cpp
+++ b/src/settingsdialog.cpp
@@ -51,43 +51,19 @@ int SettingsDialog::exec()
{
GeometrySaver gs(m_settings, this);
- auto& qsettings = m_settings.directInterface();
auto ret = TutorableDialog::exec();
if (ret == QDialog::Accepted) {
-
for (auto&& tab : m_tabs) {
tab->closing();
}
- // remember settings before change
- QMap before;
- qsettings.beginGroup("Settings");
- for (auto k : qsettings.allKeys())
- before[k] = qsettings.value(k).toString();
- qsettings.endGroup();
-
- // transfer modified settings to configuration file
+ // update settings for each tab
for (std::unique_ptr const &tab: m_tabs) {
tab->update();
}
-
- // print "changed" settings
- qsettings.beginGroup("Settings");
- bool first_update = true;
- for (auto k : qsettings.allKeys())
- if (qsettings.value(k).toString() != before[k] && !k.contains("username") && !k.contains("password"))
- {
- if (first_update) {
- log::debug("Changed settings:");
- first_update = false;
- }
- log::debug(" {}={}", k, qsettings.value(k).toString());
- }
- qsettings.endGroup();
}
- // These changes happen regardless of accepted or rejected
bool restartNeeded = false;
if (getApiKeyChanged()) {
restartNeeded = true;
diff --git a/src/settingsdialog.ui b/src/settingsdialog.ui
index e7676387..af230bc0 100644
--- a/src/settingsdialog.ui
+++ b/src/settingsdialog.ui
@@ -1346,26 +1346,6 @@ programs you are intentionally running.
"Full" Even larger dumps with a full memory dump of the process.
- -
-
- None
-
-
- -
-
- Mini (recommended)
-
-
- -
-
- Data
-
-
- -
-
- Full
-
-
diff --git a/src/settingsdialogdiagnostics.cpp b/src/settingsdialogdiagnostics.cpp
index 227d1dfa..278da0bf 100644
--- a/src/settingsdialogdiagnostics.cpp
+++ b/src/settingsdialogdiagnostics.cpp
@@ -10,10 +10,13 @@ DiagnosticsSettingsTab::DiagnosticsSettingsTab(Settings& s, SettingsDialog& d)
: SettingsTab(s, d)
{
setLevelsBox();
- ui->dumpsTypeBox->setCurrentIndex(settings().crashDumpsType());
+ setCrashDumpTypesBox();
+
ui->dumpsMaxEdit->setValue(settings().crashDumpsMax());
+
QString logsPath = qApp->property("dataPath").toString()
+ "/" + QString::fromStdWString(AppConfig::logPath());
+
ui->diagnosticsExplainedLabel->setText(
ui->diagnosticsExplainedLabel->text()
.replace("LOGS_FULL_PATH", logsPath)
@@ -40,9 +43,36 @@ void DiagnosticsSettingsTab::setLevelsBox()
}
}
+void DiagnosticsSettingsTab::setCrashDumpTypesBox()
+{
+ ui->dumpsTypeBox->clear();
+
+ auto add = [&](auto&& text, auto&& type) {
+ ui->dumpsTypeBox->addItem(text, static_cast(type));
+ };
+
+ add(QObject::tr("None"), CrashDumpsType::None);
+ add(QObject::tr("Mini (recommended)"), CrashDumpsType::Mini);
+ add(QObject::tr("Data"), CrashDumpsType::Data);
+ add(QObject::tr("Full"), CrashDumpsType::Full);
+
+ const auto current = static_cast(settings().crashDumpsType());
+
+ for (int i=0; idumpsTypeBox->count(); ++i) {
+ if (ui->dumpsTypeBox->itemData(i) == current) {
+ ui->dumpsTypeBox->setCurrentIndex(i);
+ break;
+ }
+ }
+}
+
void DiagnosticsSettingsTab::update()
{
- qsettings().setValue("Settings/log_level", ui->logLevelBox->currentData().toInt());
- qsettings().setValue("Settings/crash_dumps_type", ui->dumpsTypeBox->currentIndex());
- qsettings().setValue("Settings/crash_dumps_max", ui->dumpsMaxEdit->value());
+ settings().setLogLevel(
+ static_cast(ui->logLevelBox->currentData().toInt()));
+
+ settings().setCrashDumpsType(
+ static_cast(ui->dumpsTypeBox->currentData().toInt()));
+
+ settings().setCrashDumpsMax(ui->dumpsMaxEdit->value());
}
diff --git a/src/settingsdialogdiagnostics.h b/src/settingsdialogdiagnostics.h
index f20413f8..f0fbf770 100644
--- a/src/settingsdialogdiagnostics.h
+++ b/src/settingsdialogdiagnostics.h
@@ -13,6 +13,7 @@ public:
private:
void setLevelsBox();
+ void setCrashDumpTypesBox();
};
#endif // SETTINGSDIALOGDIAGNOSTICS_H
diff --git a/src/settingsdialoggeneral.cpp b/src/settingsdialoggeneral.cpp
index 35012db7..e3d73037 100644
--- a/src/settingsdialoggeneral.cpp
+++ b/src/settingsdialoggeneral.cpp
@@ -26,28 +26,30 @@ GeneralSettingsTab::GeneralSettingsTab(Settings& s, SettingsDialog& d)
}
addStyles();
+
{
- int currentID = ui->styleBox->findData(
- qsettings().value("Settings/style", "").toString());
+ const int currentID = ui->styleBox->findData(
+ settings().getStyleName().value_or(""));
+
if (currentID != -1) {
ui->styleBox->setCurrentIndex(currentID);
}
}
//version with stylesheet
- setButtonColor(ui->overwritingBtn, settings().modlistOverwritingLooseColor());
- setButtonColor(ui->overwrittenBtn, settings().modlistOverwrittenLooseColor());
- setButtonColor(ui->overwritingArchiveBtn, settings().modlistOverwritingArchiveColor());
- setButtonColor(ui->overwrittenArchiveBtn, settings().modlistOverwrittenArchiveColor());
- setButtonColor(ui->containsBtn, settings().modlistContainsPluginColor());
- setButtonColor(ui->containedBtn, settings().pluginListContainedColor());
-
- setOverwritingColor(settings().modlistOverwritingLooseColor());
- setOverwrittenColor(settings().modlistOverwrittenLooseColor());
- setOverwritingArchiveColor(settings().modlistOverwritingArchiveColor());
- setOverwrittenArchiveColor(settings().modlistOverwrittenArchiveColor());
- setContainsColor(settings().modlistContainsPluginColor());
- setContainedColor(settings().pluginListContainedColor());
+ setButtonColor(ui->overwritingBtn, settings().colors().modlistOverwritingLoose());
+ setButtonColor(ui->overwrittenBtn, settings().colors().modlistOverwrittenLoose());
+ setButtonColor(ui->overwritingArchiveBtn, settings().colors().modlistOverwritingArchive());
+ setButtonColor(ui->overwrittenArchiveBtn, settings().colors().modlistOverwrittenArchive());
+ setButtonColor(ui->containsBtn, settings().colors().modlistContainsPlugin());
+ setButtonColor(ui->containedBtn, settings().colors().pluginListContained());
+
+ setOverwritingColor(settings().colors().modlistOverwritingLoose());
+ setOverwrittenColor(settings().colors().modlistOverwrittenLoose());
+ setOverwritingArchiveColor(settings().colors().modlistOverwritingArchive());
+ setOverwrittenArchiveColor(settings().colors().modlistOverwrittenArchive());
+ setContainsColor(settings().colors().modlistContainsPlugin());
+ setContainedColor(settings().colors().pluginListContained());
ui->compactBox->setChecked(settings().compactDownloads());
ui->showMetaBox->setChecked(settings().metaDownloads());
@@ -67,30 +69,32 @@ GeneralSettingsTab::GeneralSettingsTab(Settings& s, SettingsDialog& d)
void GeneralSettingsTab::update()
{
- QString oldLanguage = settings().language();
- QString newLanguage = ui->languageBox->itemData(ui->languageBox->currentIndex()).toString();
+ const QString oldLanguage = settings().language();
+ const QString newLanguage = ui->languageBox->itemData(ui->languageBox->currentIndex()).toString();
+
if (newLanguage != oldLanguage) {
- qsettings().setValue("Settings/language", newLanguage);
+ settings().setLanguage(newLanguage);
emit settings().languageChanged(newLanguage);
}
- QString oldStyle = qsettings().value("Settings/style", "").toString();
- QString newStyle = ui->styleBox->itemData(ui->styleBox->currentIndex()).toString();
+ const QString oldStyle = settings().getStyleName().value_or("");
+ const QString newStyle = ui->styleBox->itemData(ui->styleBox->currentIndex()).toString();
if (oldStyle != newStyle) {
- qsettings().setValue("Settings/style", newStyle);
+ settings().setStyleName(newStyle);
emit settings().styleChanged(newStyle);
}
- qsettings().setValue("Settings/overwritingLooseFilesColor", getOverwritingColor());
- qsettings().setValue("Settings/overwrittenLooseFilesColor", getOverwrittenColor());
- qsettings().setValue("Settings/overwritingArchiveFilesColor", getOverwritingArchiveColor());
- qsettings().setValue("Settings/overwrittenArchiveFilesColor", getOverwrittenArchiveColor());
- qsettings().setValue("Settings/containsPluginColor", getContainsColor());
- qsettings().setValue("Settings/containedColor", getContainedColor());
- qsettings().setValue("Settings/compact_downloads", ui->compactBox->isChecked());
- qsettings().setValue("Settings/meta_downloads", ui->showMetaBox->isChecked());
- qsettings().setValue("Settings/use_prereleases", ui->usePrereleaseBox->isChecked());
- qsettings().setValue("Settings/colorSeparatorScrollbars", ui->colorSeparatorsBox->isChecked());
+ settings().colors().setModlistOverwritingLoose(getOverwritingColor());
+ settings().colors().setModlistOverwrittenLoose(getOverwrittenColor());
+ settings().colors().setModlistOverwritingArchive(getOverwritingArchiveColor());
+ settings().colors().setModlistOverwrittenArchive(getOverwrittenArchiveColor());
+ settings().colors().setModlistContainsPlugin(getContainsColor());
+ settings().colors().setPluginListContained(getContainedColor());
+
+ settings().setCompactDownloads(ui->compactBox->isChecked());
+ settings().setMetaDownloads(ui->showMetaBox->isChecked());
+ settings().setUsePrereleases(ui->usePrereleaseBox->isChecked());
+ settings().setColorSeparatorScrollbar(ui->colorSeparatorsBox->isChecked());
}
void GeneralSettingsTab::addLanguages()
diff --git a/src/usvfsconnector.cpp b/src/usvfsconnector.cpp
index b5e6edb1..41f58308 100644
--- a/src/usvfsconnector.cpp
+++ b/src/usvfsconnector.cpp
@@ -164,7 +164,7 @@ UsvfsConnector::UsvfsConnector()
{
USVFSParameters params;
LogLevel level = toUsvfsLogLevel(Settings::instance().logLevel());
- CrashDumpsType dumpType = crashDumpsType(Settings::instance().crashDumpsType());
+ CrashDumpsType dumpType = Settings::instance().crashDumpsType();
std::string dumpPath = MOShared::ToString(OrganizerCore::crashDumpsPath(), true);
USVFSInitParameters(¶ms, SHMID, false, level, dumpType, dumpPath.c_str());
@@ -249,9 +249,10 @@ void UsvfsConnector::updateMapping(const MappingType &mapping)
}
void UsvfsConnector::updateParams(
- MOBase::log::Levels logLevel, int crashDumpsType, QString executableBlacklist)
+ MOBase::log::Levels logLevel, CrashDumpsType crashDumpsType,
+ QString executableBlacklist)
{
- USVFSUpdateParams(toUsvfsLogLevel(logLevel), ::crashDumpsType(crashDumpsType));
+ USVFSUpdateParams(toUsvfsLogLevel(logLevel), crashDumpsType);
ClearExecutableBlacklist();
for (auto exec : executableBlacklist.split(";")) {
std::wstring buf = exec.toStdWString();
diff --git a/src/usvfsconnector.h b/src/usvfsconnector.h
index b0bd320c..cd5d56b2 100644
--- a/src/usvfsconnector.h
+++ b/src/usvfsconnector.h
@@ -87,7 +87,7 @@ public:
void updateMapping(const MappingType &mapping);
void updateParams(
- MOBase::log::Levels logLevel, int crashDumpsType,
+ MOBase::log::Levels logLevel, CrashDumpsType crashDumpsType,
QString executableBlacklist);
void updateForcedLibraries(const QList &forcedLibraries);
--
cgit v1.3.1
From e9dba260cb9548dd5863ac66da18c295f6499b92 Mon Sep 17 00:00:00 2001
From: isanae <14251494+isanae@users.noreply.github.com>
Date: Mon, 2 Sep 2019 14:52:02 -0400
Subject: split settings into a bunch of classes removed "get" from the getters
that had it
---
src/browserdialog.cpp | 2 +-
src/downloadlistsortproxy.cpp | 2 +-
src/downloadmanager.cpp | 2 +-
src/executableslist.cpp | 2 +-
src/filedialogmemory.cpp | 4 +-
src/main.cpp | 26 +-
src/mainwindow.cpp | 121 +--
src/modinfodialog.cpp | 2 +-
src/modinfodialogconflicts.cpp | 16 +-
src/modinfodialogimages.cpp | 4 +-
src/modinfodialognexus.cpp | 2 +-
src/modinfooverwrite.cpp | 2 +-
src/modinforegular.cpp | 2 +-
src/modlist.cpp | 8 +-
src/nxmaccessmanager.cpp | 2 +-
src/organizercore.cpp | 112 +-
src/pluginlist.cpp | 2 +-
src/profile.cpp | 8 +-
src/profilesdialog.cpp | 4 +-
src/settings.cpp | 2075 ++++++++++++++++++++-----------------
src/settings.h | 569 ++++++----
src/settingsdialog.cpp | 6 +-
src/settingsdialogdiagnostics.cpp | 13 +-
src/settingsdialoggeneral.cpp | 28 +-
src/settingsdialognexus.cpp | 32 +-
src/settingsdialogpaths.cpp | 52 +-
src/settingsdialogsteam.cpp | 4 +-
src/settingsdialogworkarounds.cpp | 30 +-
src/statusbar.cpp | 2 +-
src/usvfsconnector.cpp | 4 +-
30 files changed, 1712 insertions(+), 1426 deletions(-)
(limited to 'src/usvfsconnector.cpp')
diff --git a/src/browserdialog.cpp b/src/browserdialog.cpp
index 70da0b9c..72cb8862 100644
--- a/src/browserdialog.cpp
+++ b/src/browserdialog.cpp
@@ -49,7 +49,7 @@ BrowserDialog::BrowserDialog(QWidget *parent)
ui->setupUi(this);
m_AccessManager->setCookieJar(new PersistentCookieJar(
- QDir::fromNativeSeparators(Settings::instance().getCacheDirectory() + "/cookies.dat")));
+ QDir::fromNativeSeparators(Settings::instance().paths().cache() + "/cookies.dat")));
Qt::WindowFlags flags = windowFlags() | Qt::WindowMaximizeButtonHint | Qt::WindowMinimizeButtonHint;
Qt::WindowFlags helpFlag = Qt::WindowContextHelpButtonHint;
diff --git a/src/downloadlistsortproxy.cpp b/src/downloadlistsortproxy.cpp
index 7bda139b..a69993c0 100644
--- a/src/downloadlistsortproxy.cpp
+++ b/src/downloadlistsortproxy.cpp
@@ -110,7 +110,7 @@ bool DownloadListSortProxy::filterAcceptsRow(int sourceRow, const QModelIndex&)
if (m_CurrentFilter.length() == 0) {
return true;
} else if (sourceRow < m_Manager->numTotalDownloads()) {
- QString displayedName = Settings::instance().metaDownloads()
+ QString displayedName = Settings::instance().interface().metaDownloads()
? m_Manager->getDisplayName(sourceRow)
: m_Manager->getFileName(sourceRow);
return displayedName.contains(m_CurrentFilter, Qt::CaseInsensitive);
diff --git a/src/downloadmanager.cpp b/src/downloadmanager.cpp
index a5dc164c..56238ef3 100644
--- a/src/downloadmanager.cpp
+++ b/src/downloadmanager.cpp
@@ -1731,7 +1731,7 @@ void DownloadManager::nxmDownloadURLsAvailable(QString gameName, int modID, int
return;
}
- const auto servers = m_OrganizerCore->settings().getServers();
+ const auto servers = m_OrganizerCore->settings().network().servers();
std::sort(
resultList.begin(),
diff --git a/src/executableslist.cpp b/src/executableslist.cpp
index f2df2d6d..dce9181b 100644
--- a/src/executableslist.cpp
+++ b/src/executableslist.cpp
@@ -75,7 +75,7 @@ void ExecutablesList::load(const MOBase::IPluginGame* game, const Settings& s)
// executables from 2.2.0, see upgradeFromCustom()
bool needsUpgrade = false;
- for (auto& map : s.getExecutables()) {
+ for (auto& map : s.executables()) {
Executable::Flags flags;
if (map["toolbar"].toBool())
diff --git a/src/filedialogmemory.cpp b/src/filedialogmemory.cpp
index 96587ac7..8cfeb6b5 100644
--- a/src/filedialogmemory.cpp
+++ b/src/filedialogmemory.cpp
@@ -25,12 +25,12 @@ static std::map g_Cache;
void FileDialogMemory::save(Settings& s)
{
- s.setRecentDirectories(g_Cache);
+ s.paths().setRecent(g_Cache);
}
void FileDialogMemory::restore(const Settings& s)
{
- g_Cache = s.getRecentDirectories();
+ g_Cache = s.paths().recent();
}
QString FileDialogMemory::getOpenFileName(
diff --git a/src/main.cpp b/src/main.cpp
index aa781c19..b5568fec 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -246,7 +246,7 @@ static bool HaveWriteAccess(const std::wstring &path)
QString determineProfile(QStringList &arguments, const Settings &settings)
{
- auto selectedProfileName = settings.getSelectedProfileName();
+ auto selectedProfileName = settings.game().selectedProfileName();
{ // see if there is a profile on the command line
int profileIndex = arguments.indexOf("-p", 1);
@@ -271,12 +271,12 @@ QString determineProfile(QStringList &arguments, const Settings &settings)
MOBase::IPluginGame *selectGame(
Settings &settings, QDir const &gamePath, MOBase::IPluginGame *game)
{
- settings.setManagedGameName(game->gameName());
+ settings.game().setName(game->gameName());
QString gameDir = gamePath.absolutePath();
game->setGamePath(gameDir);
- settings.setManagedGameDirectory(gameDir);
+ settings.game().setDirectory(gameDir);
return game;
}
@@ -289,7 +289,7 @@ MOBase::IPluginGame *determineCurrentGame(
//user has done something odd.
//If the game name has been set up, try to use that.
- const auto gameName = settings.getManagedGameName();
+ const auto gameName = settings.game().name();
const bool gameConfigured = (gameName.has_value() && *gameName != "");
if (gameConfigured) {
@@ -299,7 +299,7 @@ MOBase::IPluginGame *determineCurrentGame(
return nullptr;
}
- auto gamePath = settings.getManagedGameDirectory();
+ auto gamePath = settings.game().directory();
if (!gamePath || *gamePath == "") {
gamePath = game->gameDirectory().absolutePath();
}
@@ -320,7 +320,7 @@ MOBase::IPluginGame *determineCurrentGame(
//If we've made it this far and the instance is already configured for a game, something has gone wrong.
//Tell the user about it.
if (gameConfigured) {
- const auto gamePath = settings.getManagedGameDirectory();
+ const auto gamePath = settings.game().directory();
reportError(
QObject::tr("Could not use configuration settings for game \"%1\", path \"%2\".")
@@ -570,11 +570,11 @@ int runApplication(MOApplication &application, SingleInstance &instance,
log::info("working directory: {}", QDir::currentPath());
Settings settings(dataPath + "/" + QString::fromStdWString(AppConfig::iniFileName()));
- log::getDefault().setLevel(settings.logLevel());
+ log::getDefault().setLevel(settings.diagnostics().logLevel());
// global crashDumpType sits in OrganizerCore to make a bit less ugly to
// update it when the settings are changed during runtime
- OrganizerCore::setGlobalCrashDumpsType(settings.crashDumpsType());
+ OrganizerCore::setGlobalCrashDumpsType(settings.diagnostics().crashDumpsType());
env::Environment env;
@@ -621,7 +621,7 @@ int runApplication(MOApplication &application, SingleInstance &instance,
QString edition;
- if (auto v=settings.getManagedGameEdition()) {
+ if (auto v=settings.game().edition()) {
edition = *v;
} else {
QStringList editions = game->gameVariants();
@@ -640,7 +640,7 @@ int runApplication(MOApplication &application, SingleInstance &instance,
return 1;
} else {
edition = selection.getChoiceString();
- settings.setManagedGameEdition(edition);
+ settings.game().setEdition(edition);
}
}
}
@@ -702,7 +702,7 @@ int runApplication(MOApplication &application, SingleInstance &instance,
splash.activateWindow();
QString apiKey;
- if (settings.getNexusApiKey(apiKey)) {
+ if (settings.nexus().apiKey(apiKey)) {
NexusInterface::instance(&pluginContainer)->getAccessManager()->apiCheck(apiKey);
}
@@ -712,9 +712,9 @@ int runApplication(MOApplication &application, SingleInstance &instance,
+ QString::fromStdWString(AppConfig::tutorialsPath()) + "/",
&organizer);
- if (!application.setStyleFile(settings.getStyleName().value_or(""))) {
+ if (!application.setStyleFile(settings.interface().styleName().value_or(""))) {
// disable invalid stylesheet
- settings.setStyleName("");
+ settings.interface().setStyleName("");
}
int res = 1;
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 42b19cb7..657c1a27 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -222,8 +222,8 @@ MainWindow::MainWindow(Settings &settings
{
QWebEngineProfile::defaultProfile()->setPersistentCookiesPolicy(QWebEngineProfile::NoPersistentCookies);
QWebEngineProfile::defaultProfile()->setHttpCacheMaximumSize(52428800);
- QWebEngineProfile::defaultProfile()->setCachePath(settings.getCacheDirectory());
- QWebEngineProfile::defaultProfile()->setPersistentStoragePath(settings.getCacheDirectory());
+ QWebEngineProfile::defaultProfile()->setCachePath(settings.paths().cache());
+ QWebEngineProfile::defaultProfile()->setPersistentStoragePath(settings.paths().cache());
ui->setupUi(this);
ui->statusBar->setup(ui);
@@ -253,7 +253,7 @@ MainWindow::MainWindow(Settings &settings
ui->statusBar->setAPI(ni->getAPIStats(), ni->getAPIUserAccount());
}
- languageChange(settings.language());
+ languageChange(settings.interface().language());
m_CategoryFactory.loadCategories();
@@ -1194,7 +1194,7 @@ void MainWindow::hookUpWindowTutorials()
QString firstLine = QString::fromUtf8(file.readLine());
if (firstLine.startsWith("//WIN")) {
QString windowName = firstLine.mid(6).trimmed();
- if (!m_OrganizerCore.settings().isTutorialCompleted(windowName)) {
+ if (!m_OrganizerCore.settings().interface().isTutorialCompleted(windowName)) {
TutorialManager::instance().activateTutorial(windowName, fileName);
}
}
@@ -1225,7 +1225,7 @@ void MainWindow::showEvent(QShowEvent *event)
hookUpWindowTutorials();
- if (m_OrganizerCore.settings().getFirstStart()) {
+ if (m_OrganizerCore.settings().firstStart()) {
QString firstStepsTutorial = ToQString(AppConfig::firstStepsTutorial());
if (TutorialManager::instance().hasTutorial(firstStepsTutorial)) {
if (QMessageBox::question(this, tr("Show tutorial?"),
@@ -1247,11 +1247,11 @@ void MainWindow::showEvent(QShowEvent *event)
m_OrganizerCore.settings().setFirstStart(false);
}
- m_OrganizerCore.settings().restoreIndex(ui->groupCombo);
+ m_OrganizerCore.settings().widgets().restoreIndex(ui->groupCombo);
allowListResize();
- m_OrganizerCore.settings().registerAsNXMHandler(false);
+ m_OrganizerCore.settings().nexus().registerAsNXMHandler(false);
m_WasVisible = true;
updateProblemsButton();
}
@@ -1751,7 +1751,7 @@ bool MainWindow::refreshProfiles(bool selectProfile)
profileBox->clear();
profileBox->addItem(QObject::tr(""));
- QDir profilesDir(Settings::instance().getProfileDirectory());
+ QDir profilesDir(Settings::instance().paths().profiles());
profilesDir.setFilter(QDir::AllDirs | QDir::NoDotAndDotDot);
QDirIterator profileIter(profilesDir);
@@ -1990,7 +1990,7 @@ void MainWindow::updateBSAList(const QStringList &defaultArchives, const QString
newItem->setFlags(newItem->flags() & ~(Qt::ItemIsDropEnabled | Qt::ItemIsUserCheckable));
newItem->setCheckState(0, (index != -1) ? Qt::Checked : Qt::Unchecked);
newItem->setData(0, Qt::UserRole, false);
- if (m_OrganizerCore.settings().forceEnableCoreFiles()
+ if (m_OrganizerCore.settings().game().forceEnableCoreFiles()
&& defaultArchives.contains(fileInfo.fileName())) {
newItem->setCheckState(0, Qt::Checked);
newItem->setDisabled(true);
@@ -2140,7 +2140,7 @@ void MainWindow::readSettings(const Settings& settings)
{
// special case in case someone puts 0 in the INI
- auto v = settings.getIndex(ui->executablesListBox);
+ auto v = settings.widgets().index(ui->executablesListBox);
if (!v || v == 0) {
v = 1;
}
@@ -2148,7 +2148,7 @@ void MainWindow::readSettings(const Settings& settings)
ui->executablesListBox->setCurrentIndex(*v);
}
- settings.restoreIndex(ui->groupCombo);
+ settings.widgets().restoreIndex(ui->groupCombo);
{
settings.geometry().restoreVisibility(ui->categoriesGroup, false);
@@ -2157,7 +2157,7 @@ void MainWindow::readSettings(const Settings& settings)
ui->displayCategoriesBtn->setChecked(v);
}
- if (settings.getUseProxy()) {
+ if (settings.network().useProxy()) {
activateProxy(true);
}
}
@@ -2165,12 +2165,12 @@ void MainWindow::readSettings(const Settings& settings)
void MainWindow::processUpdates(Settings& settings) {
const auto earliest = QVersionNumber::fromString("2.1.2").normalized();
- const auto lastVersion = settings.getVersion().value_or(earliest);
+ const auto lastVersion = settings.version().value_or(earliest);
const auto currentVersion = m_OrganizerCore.getVersion().asQVersionNumber();
settings.processUpdates(currentVersion, lastVersion);
- if (!settings.getFirstStart()) {
+ if (!settings.firstStart()) {
if (lastVersion < QVersionNumber(2, 1, 3)) {
bool lastHidden = true;
for (int i = ModList::COL_GAME; i < ui->modList->model()->columnCount(); ++i) {
@@ -2222,8 +2222,8 @@ void MainWindow::storeSettings(Settings& s)
s.geometry().saveState(ui->downloadView->header());
s.geometry().saveState(ui->modList->header());
- s.saveIndex(ui->groupCombo);
- s.saveIndex(ui->executablesListBox);
+ s.widgets().saveIndex(ui->groupCombo);
+ s.widgets().saveIndex(ui->executablesListBox);
}
ILockedWaitingForProcess* MainWindow::lock()
@@ -2751,7 +2751,7 @@ void MainWindow::restoreBackup_clicked()
ModInfo::Ptr modInfo = ModInfo::getByIndex(m_ContextRow);
if (backupRegEx.indexIn(modInfo->name()) != -1) {
QString regName = backupRegEx.cap(1);
- QDir modDir(QDir::fromNativeSeparators(m_OrganizerCore.settings().getModDirectory()));
+ QDir modDir(QDir::fromNativeSeparators(m_OrganizerCore.settings().paths().mods()));
if (!modDir.exists(regName) ||
(QMessageBox::question(this, tr("Overwrite?"),
tr("This will replace the existing mod \"%1\". Continue?").arg(regName),
@@ -2759,7 +2759,7 @@ void MainWindow::restoreBackup_clicked()
if (modDir.exists(regName) && !shellDelete(QStringList(modDir.absoluteFilePath(regName)))) {
reportError(tr("failed to remove mod \"%1\"").arg(regName));
} else {
- QString destinationPath = QDir::fromNativeSeparators(m_OrganizerCore.settings().getModDirectory()) + "/" + regName;
+ QString destinationPath = QDir::fromNativeSeparators(m_OrganizerCore.settings().paths().mods()) + "/" + regName;
if (!modDir.rename(modInfo->absolutePath(), destinationPath)) {
reportError(tr("failed to rename \"%1\" to \"%2\"").arg(modInfo->absolutePath()).arg(destinationPath));
}
@@ -3015,7 +3015,7 @@ void MainWindow::untrack_clicked()
void MainWindow::windowTutorialFinished(const QString &windowName)
{
- m_OrganizerCore.settings().setTutorialCompleted(windowName);
+ m_OrganizerCore.settings().interface().setTutorialCompleted(windowName);
}
void MainWindow::overwriteClosed(int)
@@ -3645,7 +3645,7 @@ void MainWindow::createSeparator_clicked()
m_OrganizerCore.modList()->changeModPriority(ModInfo::getIndex(name), newPriority);
}
- if (auto c=m_OrganizerCore.settings().getPreviousSeparatorColor()) {
+ if (auto c=m_OrganizerCore.settings().colors().previousSeparatorColor()) {
ModInfo::getByIndex(ModInfo::getIndex(name))->setColor(*c);
}
}
@@ -3662,7 +3662,7 @@ void MainWindow::setColor_clicked()
if (currentColor.isValid()) {
dialog.setCurrentColor(currentColor);
}
- else if (auto c=settings.getPreviousSeparatorColor()) {
+ else if (auto c=settings.colors().previousSeparatorColor()) {
dialog.setCurrentColor(*c);
}
@@ -3673,7 +3673,7 @@ void MainWindow::setColor_clicked()
if (!currentColor.isValid())
return;
- settings.setPreviousSeparatorColor(currentColor);
+ settings.colors().setPreviousSeparatorColor(currentColor);
QItemSelectionModel *selection = ui->modList->selectionModel();
if (selection->hasSelection() && selection->selectedRows().count() > 1) {
@@ -3710,7 +3710,7 @@ void MainWindow::resetColor_clicked()
modInfo->setColor(color);
}
- m_OrganizerCore.settings().removePreviousSeparatorColor();
+ m_OrganizerCore.settings().colors().removePreviousSeparatorColor();
}
void MainWindow::createModFromOverwrite()
@@ -4184,7 +4184,7 @@ void MainWindow::checkModsForUpdates()
NexusInterface::instance(&m_PluginContainer)->requestTrackingInfo(this, QVariant(), QString());
} else {
QString apiKey;
- if (m_OrganizerCore.settings().getNexusApiKey(apiKey)) {
+ if (m_OrganizerCore.settings().nexus().apiKey(apiKey)) {
m_OrganizerCore.doAfterLogin([this] () { this->checkModsForUpdates(); });
NexusInterface::instance(&m_PluginContainer)->getAccessManager()->apiCheck(apiKey);
} else {
@@ -4387,12 +4387,12 @@ void MainWindow::openIniFolder()
void MainWindow::openDownloadsFolder()
{
- shell::ExploreFile(m_OrganizerCore.settings().getDownloadDirectory());
+ shell::ExploreFile(m_OrganizerCore.settings().paths().downloads());
}
void MainWindow::openModsFolder()
{
- shell::ExploreFile(m_OrganizerCore.settings().getModDirectory());
+ shell::ExploreFile(m_OrganizerCore.settings().paths().mods());
}
void MainWindow::openGameFolder()
@@ -4758,7 +4758,7 @@ void MainWindow::on_modList_customContextMenuRequested(const QPoint &pos)
menu.addSeparator();
- if (info->getNexusID() > 0 && Settings::instance().endorsementIntegration()) {
+ if (info->getNexusID() > 0 && Settings::instance().nexus().endorsementIntegration()) {
switch (info->endorsedState()) {
case ModInfo::ENDORSED_TRUE: {
menu.addAction(tr("Un-Endorse"), this, SLOT(unendorse_clicked()));
@@ -5007,19 +5007,19 @@ void MainWindow::on_actionSettings_triggered()
{
Settings &settings = m_OrganizerCore.settings();
- QString oldModDirectory(settings.getModDirectory());
- QString oldCacheDirectory(settings.getCacheDirectory());
- QString oldProfilesDirectory(settings.getProfileDirectory());
- QString oldManagedGameDirectory(settings.getManagedGameDirectory().value_or(""));
- bool oldDisplayForeign(settings.displayForeign());
- bool proxy = settings.getUseProxy();
+ QString oldModDirectory(settings.paths().mods());
+ QString oldCacheDirectory(settings.paths().cache());
+ QString oldProfilesDirectory(settings.paths().profiles());
+ QString oldManagedGameDirectory(settings.game().directory().value_or(""));
+ bool oldDisplayForeign(settings.interface().displayForeign());
+ bool proxy = settings.network().useProxy();
DownloadManager *dlManager = m_OrganizerCore.downloadManager();
SettingsDialog dialog(&m_PluginContainer, settings, this);
dialog.exec();
- if (oldManagedGameDirectory != settings.getManagedGameDirectory()) {
+ if (oldManagedGameDirectory != settings.game().directory()) {
QMessageBox::about(this, tr("Restarting MO"),
tr("Changing the managed game directory requires restarting MO.\n"
"Any pending downloads will be paused.\n\n"
@@ -5029,28 +5029,28 @@ void MainWindow::on_actionSettings_triggered()
}
InstallationManager *instManager = m_OrganizerCore.installationManager();
- instManager->setModsDirectory(settings.getModDirectory());
- instManager->setDownloadDirectory(settings.getDownloadDirectory());
+ instManager->setModsDirectory(settings.paths().mods());
+ instManager->setDownloadDirectory(settings.paths().downloads());
fixCategories();
refreshFilters();
- if (settings.getProfileDirectory() != oldProfilesDirectory) {
+ if (settings.paths().profiles() != oldProfilesDirectory) {
refreshProfiles();
}
- if (dlManager->getOutputDirectory() != settings.getDownloadDirectory()) {
+ if (dlManager->getOutputDirectory() != settings.paths().downloads()) {
if (dlManager->downloadsInProgress()) {
MessageDialog::showMessage(tr("Can't change download directory while "
"downloads are in progress!"),
this);
} else {
- dlManager->setOutputDirectory(settings.getDownloadDirectory());
+ dlManager->setOutputDirectory(settings.paths().downloads());
}
}
- if ((settings.getModDirectory() != oldModDirectory)
- || (settings.displayForeign() != oldDisplayForeign)) {
+ if ((settings.paths().mods() != oldModDirectory)
+ || (settings.interface().displayForeign() != oldDisplayForeign)) {
m_OrganizerCore.profileRefresh();
}
@@ -5075,18 +5075,19 @@ void MainWindow::on_actionSettings_triggered()
m_OrganizerCore.refreshLists();
}
- if (settings.getCacheDirectory() != oldCacheDirectory) {
- NexusInterface::instance(&m_PluginContainer)->setCacheDirectory(settings.getCacheDirectory());
+ if (settings.paths().cache() != oldCacheDirectory) {
+ NexusInterface::instance(&m_PluginContainer)->setCacheDirectory(
+ settings.paths().cache());
}
- if (proxy != settings.getUseProxy()) {
- activateProxy(settings.getUseProxy());
+ if (proxy != settings.network().useProxy()) {
+ activateProxy(settings.network().useProxy());
}
ui->statusBar->checkSettings(m_OrganizerCore.settings());
updateDownloadView();
- m_OrganizerCore.setLogLevel(settings.logLevel());
+ m_OrganizerCore.setLogLevel(settings.diagnostics().logLevel());
m_OrganizerCore.cycleDiagnostics();
toggleMO2EndorseState();
@@ -5402,10 +5403,10 @@ void MainWindow::motdReceived(const QString &motd)
// internet connection is faster next time
if (m_StartTime.secsTo(QTime::currentTime()) < 5) {
uint hash = qHash(motd);
- if (hash != m_OrganizerCore.settings().getMotDHash()) {
+ if (hash != m_OrganizerCore.settings().motdHash()) {
MotDDialog dialog(motd);
dialog.exec();
- m_OrganizerCore.settings().setMotDHash(hash);
+ m_OrganizerCore.settings().setMotdHash(hash);
}
}
}
@@ -5528,7 +5529,7 @@ void MainWindow::initDownloadView()
void MainWindow::updateDownloadView()
{
// set the view attribute and default row sizes
- if (m_OrganizerCore.settings().compactDownloads()) {
+ if (m_OrganizerCore.settings().interface().compactDownloads()) {
ui->downloadView->setProperty("downloadView", "compact");
setStyleSheet("DownloadListWidget::item { padding: 4px 2px; }");
} else {
@@ -5541,7 +5542,7 @@ void MainWindow::updateDownloadView()
// reapply global stylesheet on the widget level (!) to override the defaults
//ui->downloadView->setStyleSheet(styleSheet());
- ui->downloadView->setMetaDisplay(m_OrganizerCore.settings().metaDownloads());
+ ui->downloadView->setMetaDisplay(m_OrganizerCore.settings().interface().metaDownloads());
ui->downloadView->style()->unpolish(ui->downloadView);
ui->downloadView->style()->polish(ui->downloadView);
qobject_cast(ui->downloadView->header())->customResizeSections();
@@ -5554,7 +5555,7 @@ void MainWindow::modUpdateCheck(std::multimap IDs)
ModInfo::manualUpdateCheck(&m_PluginContainer, this, IDs);
} else {
QString apiKey;
- if (m_OrganizerCore.settings().getNexusApiKey(apiKey)) {
+ if (m_OrganizerCore.settings().nexus().apiKey(apiKey)) {
m_OrganizerCore.doAfterLogin([=]() { this->modUpdateCheck(IDs); });
NexusInterface::instance(&m_PluginContainer)->getAccessManager()->apiCheck(apiKey);
} else
@@ -5566,7 +5567,7 @@ void MainWindow::toggleMO2EndorseState()
{
const auto& s = m_OrganizerCore.settings();
- if (!s.endorsementIntegration()) {
+ if (!s.nexus().endorsementIntegration()) {
ui->actionEndorseMO->setVisible(false);
return;
}
@@ -5576,7 +5577,7 @@ void MainWindow::toggleMO2EndorseState()
bool enabled = false;
QString text;
- switch (s.endorsementState())
+ switch (s.nexus().endorsementState())
{
case EndorsementState::Accepted:
{
@@ -5631,9 +5632,9 @@ void MainWindow::nxmEndorsementsAvailable(QVariant userData, QVariant resultData
mod->setIsEndorsed(false);
}
- if (Settings::instance().endorsementIntegration()) {
+ if (Settings::instance().nexus().endorsementIntegration()) {
if (result->first == "skyrimspecialedition" && result->second.first == gamePlugin->nexusModOrganizerID()) {
- m_OrganizerCore.settings().setEndorsementState(
+ m_OrganizerCore.settings().nexus().setEndorsementState(
endorsementStateFromString(result->second.second));
toggleMO2EndorseState();
@@ -5642,13 +5643,13 @@ void MainWindow::nxmEndorsementsAvailable(QVariant userData, QVariant resultData
}
}
- if (!searchedMO2NexusGame && Settings::instance().endorsementIntegration()) {
+ if (!searchedMO2NexusGame && Settings::instance().nexus().endorsementIntegration()) {
auto gamePlugin = m_OrganizerCore.getGame("SkyrimSE");
if (gamePlugin) {
auto iter = sorted.equal_range(gamePlugin->gameNexusName());
for (auto result = iter.first; result != iter.second; ++result) {
if (result->second.first == gamePlugin->nexusModOrganizerID()) {
- m_OrganizerCore.settings().setEndorsementState(
+ m_OrganizerCore.settings().nexus().setEndorsementState(
endorsementStateFromString(result->second.second));
toggleMO2EndorseState();
@@ -5862,7 +5863,7 @@ void MainWindow::nxmEndorsementToggled(QString, int, QVariant, QVariant resultDa
}
}
- m_OrganizerCore.settings().setEndorsementState(s);
+ m_OrganizerCore.settings().nexus().setEndorsementState(s);
toggleMO2EndorseState();
if (!disconnect(sender(), SIGNAL(nxmEndorsementToggled(QString, int, QVariant, QVariant, int)),
@@ -5901,7 +5902,7 @@ void MainWindow::nxmTrackedModsAvailable(QVariant userData, QVariant resultData,
void MainWindow::nxmDownloadURLs(QString, int, int, QVariant, QVariant resultData, int)
{
- auto servers = m_OrganizerCore.settings().getServers();
+ auto servers = m_OrganizerCore.settings().network().servers();
for (const QVariant &var : resultData.toList()) {
const QVariantMap map = var.toMap();
@@ -5929,7 +5930,7 @@ void MainWindow::nxmDownloadURLs(QString, int, int, QVariant, QVariant resultDat
}
}
- m_OrganizerCore.settings().updateServers(servers);
+ m_OrganizerCore.settings().network().updateServers(servers);
}
diff --git a/src/modinfodialog.cpp b/src/modinfodialog.cpp
index f3840230..2178ef34 100644
--- a/src/modinfodialog.cpp
+++ b/src/modinfodialog.cpp
@@ -381,7 +381,7 @@ void ModInfoDialog::reAddTabs(
Q_ASSERT(visibility.size() == m_tabs.size());
// ordered tab names from settings
- const auto orderedNames = m_core->settings().geometry().getModInfoTabOrder();
+ 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
diff --git a/src/modinfodialogconflicts.cpp b/src/modinfodialogconflicts.cpp
index 7840269d..3a71b405 100644
--- a/src/modinfodialogconflicts.cpp
+++ b/src/modinfodialogconflicts.cpp
@@ -409,7 +409,7 @@ void ConflictsTab::clear()
void ConflictsTab::saveState(Settings& s)
{
- s.saveIndex(ui->tabConflictsTabs);
+ s.widgets().saveIndex(ui->tabConflictsTabs);
m_general.saveState(s);
m_advanced.saveState(s);
@@ -417,7 +417,7 @@ void ConflictsTab::saveState(Settings& s)
void ConflictsTab::restoreState(const Settings& s)
{
- s.restoreIndex(ui->tabConflictsTabs, 0);
+ s.widgets().restoreIndex(ui->tabConflictsTabs, 0);
m_general.restoreState(s);
m_advanced.restoreState(s);
@@ -1014,17 +1014,17 @@ void AdvancedConflictsTab::clear()
void AdvancedConflictsTab::saveState(Settings& s)
{
s.geometry().saveState(ui->conflictsAdvancedList->header());
- s.saveChecked(ui->conflictsAdvancedShowNoConflict);
- s.saveChecked(ui->conflictsAdvancedShowAll);
- s.saveChecked(ui->conflictsAdvancedShowNearest);
+ s.widgets().saveChecked(ui->conflictsAdvancedShowNoConflict);
+ s.widgets().saveChecked(ui->conflictsAdvancedShowAll);
+ s.widgets().saveChecked(ui->conflictsAdvancedShowNearest);
}
void AdvancedConflictsTab::restoreState(const Settings& s)
{
s.geometry().restoreState(ui->conflictsAdvancedList->header());
- s.restoreChecked(ui->conflictsAdvancedShowNoConflict);
- s.restoreChecked(ui->conflictsAdvancedShowAll);
- s.restoreChecked(ui->conflictsAdvancedShowNearest);
+ s.widgets().restoreChecked(ui->conflictsAdvancedShowNoConflict);
+ s.widgets().restoreChecked(ui->conflictsAdvancedShowAll);
+ s.widgets().restoreChecked(ui->conflictsAdvancedShowNearest);
}
void AdvancedConflictsTab::update()
diff --git a/src/modinfodialogimages.cpp b/src/modinfodialogimages.cpp
index 38c12d8a..9d347f57 100644
--- a/src/modinfodialogimages.cpp
+++ b/src/modinfodialogimages.cpp
@@ -130,13 +130,13 @@ void ImagesTab::update()
void ImagesTab::saveState(Settings& s)
{
- s.saveChecked(ui->imagesShowDDS);
+ s.widgets().saveChecked(ui->imagesShowDDS);
s.geometry().saveState(ui->tabImagesSplitter);
}
void ImagesTab::restoreState(const Settings& s)
{
- s.restoreChecked(ui->imagesShowDDS);
+ s.widgets().restoreChecked(ui->imagesShowDDS);
s.geometry().restoreState(ui->tabImagesSplitter);
}
diff --git a/src/modinfodialognexus.cpp b/src/modinfodialognexus.cpp
index 6d28cbe3..95e62328 100644
--- a/src/modinfodialognexus.cpp
+++ b/src/modinfodialognexus.cpp
@@ -19,7 +19,7 @@ NexusTab::NexusTab(ModInfoDialogTabContext cx) :
ModInfoDialogTab(std::move(cx)), m_requestStarted(false), m_loading(false)
{
ui->modID->setValidator(new QIntValidator(ui->modID));
- ui->endorse->setVisible(core().settings().endorsementIntegration());
+ ui->endorse->setVisible(core().settings().nexus().endorsementIntegration());
connect(ui->modID, &QLineEdit::editingFinished, [&]{ onModIDChanged(); });
connect(
diff --git a/src/modinfooverwrite.cpp b/src/modinfooverwrite.cpp
index 37c8c650..fb110abb 100644
--- a/src/modinfooverwrite.cpp
+++ b/src/modinfooverwrite.cpp
@@ -23,7 +23,7 @@ bool ModInfoOverwrite::isEmpty() const
QString ModInfoOverwrite::absolutePath() const
{
- return Settings::instance().getOverwriteDirectory();
+ return Settings::instance().paths().overwrite();
}
std::vector ModInfoOverwrite::getFlags() const
diff --git a/src/modinforegular.cpp b/src/modinforegular.cpp
index ce29e11e..3cff914a 100644
--- a/src/modinforegular.cpp
+++ b/src/modinforegular.cpp
@@ -631,7 +631,7 @@ std::vector ModInfoRegular::getFlags() const
std::vector result = ModInfoWithConflictInfo::getFlags();
if ((m_NexusID > 0) &&
(endorsedState() == ENDORSED_FALSE) &&
- Settings::instance().endorsementIntegration()) {
+ Settings::instance().nexus().endorsementIntegration()) {
result.push_back(ModInfo::FLAG_NOTENDORSED);
}
if ((m_NexusID > 0) &&
diff --git a/src/modlist.cpp b/src/modlist.cpp
index 94b4a387..6018d3d4 100644
--- a/src/modlist.cpp
+++ b/src/modlist.cpp
@@ -390,7 +390,7 @@ QVariant ModList::data(const QModelIndex &modelIndex, int role) const
return QVariant();
} else if (role == Qt::ForegroundRole) {
if (modInfo->hasFlag(ModInfo::FLAG_SEPARATOR) && modInfo->getColor().isValid()) {
- return Settings::getIdealTextColor(modInfo->getColor());
+ return ColorSettings::idealTextColor(modInfo->getColor());
} else if (column == COL_NAME) {
int highlight = modInfo->getHighlight();
if (highlight & ModInfo::HIGHLIGHT_IMPORTANT)
@@ -428,7 +428,7 @@ QVariant ModList::data(const QModelIndex &modelIndex, int role) const
} else if (modInfo->hasFlag(ModInfo::FLAG_SEPARATOR)
&& modInfo->getColor().isValid()
&& ((role != ViewMarkingScrollBar::DEFAULT_ROLE)
- || Settings::instance().colorSeparatorScrollbar())) {
+ || Settings::instance().colors().colorSeparatorScrollbar())) {
return modInfo->getColor();
} else {
return QVariant();
@@ -999,8 +999,8 @@ bool ModList::dropURLs(const QMimeData *mimeData, int row, const QModelIndex &pa
ModInfo::Ptr modInfo = ModInfo::getByIndex(row);
QDir modDir = QDir(modInfo->absolutePath());
- QDir allModsDir(Settings::instance().getModDirectory());
- QDir overwriteDir(Settings::instance().getOverwriteDirectory());
+ QDir allModsDir(Settings::instance().paths().mods());
+ QDir overwriteDir(Settings::instance().paths().overwrite());
QStringList sourceList;
QStringList targetList;
diff --git a/src/nxmaccessmanager.cpp b/src/nxmaccessmanager.cpp
index 16190ca4..c6ef7bc7 100644
--- a/src/nxmaccessmanager.cpp
+++ b/src/nxmaccessmanager.cpp
@@ -572,7 +572,7 @@ NXMAccessManager::NXMAccessManager(QObject *parent, const QString &moVersion)
m_validator.finished = [&](auto&& user){ onValidatorFinished(user); };
setCookieJar(new PersistentCookieJar(QDir::fromNativeSeparators(
- Settings::instance().getCacheDirectory() + "/nexus_cookies.dat")));
+ Settings::instance().paths().cache() + "/nexus_cookies.dat")));
if (networkAccessible() == QNetworkAccessManager::UnknownAccessibility) {
// why is this necessary all of a sudden?
diff --git a/src/organizercore.cpp b/src/organizercore.cpp
index af0cf969..1a89641d 100644
--- a/src/organizercore.cpp
+++ b/src/organizercore.cpp
@@ -146,7 +146,7 @@ static void startSteam(QWidget *widget)
QStringList args;
QString username;
QString password;
- if (Settings::instance().getSteamLogin(username, password)) {
+ if (Settings::instance().steam().login(username, password)) {
args << "-login";
args << username;
if (password != "") {
@@ -275,12 +275,13 @@ OrganizerCore::OrganizerCore(Settings &settings)
, m_ArchivesInit(false)
, m_PluginListsWriter(std::bind(&OrganizerCore::savePluginList, this))
{
- m_DownloadManager.setOutputDirectory(m_Settings.getDownloadDirectory());
+ m_DownloadManager.setOutputDirectory(m_Settings.paths().downloads());
- NexusInterface::instance(m_PluginContainer)->setCacheDirectory(m_Settings.getCacheDirectory());
+ NexusInterface::instance(m_PluginContainer)->setCacheDirectory(
+ m_Settings.paths().cache());
- m_InstallationManager.setModsDirectory(m_Settings.getModDirectory());
- m_InstallationManager.setDownloadDirectory(m_Settings.getDownloadDirectory());
+ m_InstallationManager.setModsDirectory(m_Settings.paths().mods());
+ m_InstallationManager.setDownloadDirectory(m_Settings.paths().downloads());
connect(&m_DownloadManager, SIGNAL(downloadSpeed(QString, int)), this,
SLOT(downloadSpeed(QString, int)));
@@ -333,7 +334,7 @@ OrganizerCore::~OrganizerCore()
void OrganizerCore::storeSettings()
{
if (m_CurrentProfile != nullptr) {
- m_Settings.setSelectedProfileName(m_CurrentProfile->name());
+ m_Settings.game().setSelectedProfileName(m_CurrentProfile->name());
}
m_ExecutablesList.store(m_Settings);
@@ -356,7 +357,7 @@ void OrganizerCore::storeSettings()
QMessageBox::critical(
qApp->activeWindow(), tr("Failed to write settings"),
tr("An error occurred trying to write back MO settings to %1: %2")
- .arg(m_Settings.getFilename(), reason));
+ .arg(m_Settings.filename(), reason));
}
}
@@ -432,8 +433,9 @@ void OrganizerCore::updateExecutablesList()
// TODO this has nothing to do with executables list move to an appropriate
// function!
- ModInfo::updateFromDisc(m_Settings.getModDirectory(), &m_DirectoryStructure,
- m_PluginContainer, m_Settings.displayForeign(), managedGame());
+ ModInfo::updateFromDisc(
+ m_Settings.paths().mods(), &m_DirectoryStructure,
+ m_PluginContainer, m_Settings.interface().displayForeign(), managedGame());
}
void OrganizerCore::setUserInterface(IUserInterface *userInterface,
@@ -478,7 +480,7 @@ void OrganizerCore::setUserInterface(IUserInterface *userInterface,
if (userInterface != nullptr) {
// this currently wouldn't work reliably if the ui isn't initialized yet to
// display the result
- if (isOnline() && !m_Settings.offlineMode()) {
+ if (isOnline() && !m_Settings.network().offlineMode()) {
m_Updater.testForUpdate();
} else {
log::debug("user doesn't seem to be connected to the internet");
@@ -541,7 +543,7 @@ bool OrganizerCore::nexusApi(bool retry)
return false;
} else {
QString apiKey;
- if (m_Settings.getNexusApiKey(apiKey)) {
+ if (m_Settings.nexus().apiKey(apiKey)) {
// credentials stored or user entered them manually
log::debug("attempt to verify nexus api key");
accessManager->apiCheck(apiKey);
@@ -608,7 +610,7 @@ void OrganizerCore::removeOrigin(const QString &name)
void OrganizerCore::downloadSpeed(const QString &serverName, int bytesPerSecond)
{
- m_Settings.setDownloadSpeed(serverName, bytesPerSecond);
+ m_Settings.network().setDownloadSpeed(serverName, bytesPerSecond);
}
InstallationManager *OrganizerCore::installationManager()
@@ -629,9 +631,9 @@ bool OrganizerCore::createDirectory(const QString &path) {
}
bool OrganizerCore::checkPathSymlinks() {
- bool hasSymlink = (QFileInfo(m_Settings.getProfileDirectory()).isSymLink() ||
- QFileInfo(m_Settings.getModDirectory()).isSymLink() ||
- QFileInfo(m_Settings.getOverwriteDirectory()).isSymLink());
+ bool hasSymlink = (QFileInfo(m_Settings.paths().profiles()).isSymLink() ||
+ QFileInfo(m_Settings.paths().mods()).isSymLink() ||
+ QFileInfo(m_Settings.paths().overwrite()).isSymLink());
if (hasSymlink) {
QMessageBox::critical(nullptr, QObject::tr("Error"),
QObject::tr("One of the configured MO2 directories (profiles, mods, or overwrite) "
@@ -643,17 +645,17 @@ bool OrganizerCore::checkPathSymlinks() {
}
bool OrganizerCore::bootstrap() {
- return createDirectory(m_Settings.getProfileDirectory()) &&
- createDirectory(m_Settings.getModDirectory()) &&
- createDirectory(m_Settings.getDownloadDirectory()) &&
- createDirectory(m_Settings.getOverwriteDirectory()) &&
+ return createDirectory(m_Settings.paths().profiles()) &&
+ createDirectory(m_Settings.paths().mods()) &&
+ createDirectory(m_Settings.paths().downloads()) &&
+ createDirectory(m_Settings.paths().overwrite()) &&
createDirectory(QString::fromStdWString(crashDumpsPath())) &&
checkPathSymlinks() && cycleDiagnostics();
}
void OrganizerCore::createDefaultProfile()
{
- QString profilesPath = settings().getProfileDirectory();
+ QString profilesPath = settings().paths().profiles();
if (QDir(profilesPath).entryList(QDir::AllDirs | QDir::NoDotAndDotDot).size()
== 0) {
Profile newProf("Default", managedGame(), false);
@@ -674,18 +676,18 @@ void OrganizerCore::updateVFSParams(
void OrganizerCore::setLogLevel(log::Levels level)
{
- m_Settings.setLogLevel(level);
+ m_Settings.diagnostics().setLogLevel(level);
updateVFSParams(
- m_Settings.logLevel(),
- m_Settings.crashDumpsType(),
+ m_Settings.diagnostics().logLevel(),
+ m_Settings.diagnostics().crashDumpsType(),
m_Settings.executablesBlacklist());
- log::getDefault().setLevel(m_Settings.logLevel());
+ log::getDefault().setLevel(m_Settings.diagnostics().logLevel());
}
bool OrganizerCore::cycleDiagnostics() {
- if (int maxDumps = settings().crashDumpsMax())
+ if (int maxDumps = settings().diagnostics().crashDumpsMax())
removeOldFiles(QString::fromStdWString(crashDumpsPath()), "*.dmp", maxDumps, QDir::Time|QDir::Reversed);
return true;
}
@@ -720,7 +722,7 @@ void OrganizerCore::setCurrentProfile(const QString &profileName)
return;
}
- QDir profileBaseDir(settings().getProfileDirectory());
+ QDir profileBaseDir(settings().paths().profiles());
QString profileDir = profileBaseDir.absoluteFilePath(profileName);
if (!QDir(profileDir).exists()) {
@@ -744,7 +746,7 @@ void OrganizerCore::setCurrentProfile(const QString &profileName)
m_CurrentProfile->deactivateInvalidation();
}
- m_Settings.setSelectedProfileName(m_CurrentProfile->name());
+ m_Settings.game().setSelectedProfileName(m_CurrentProfile->name());
connect(m_CurrentProfile, SIGNAL(modStatusChanged(uint)), this, SLOT(modStatusChanged(uint)));
connect(m_CurrentProfile, SIGNAL(modStatusChanged(QList)), this, SLOT(modStatusChanged(QList)));
@@ -776,22 +778,22 @@ QString OrganizerCore::profilePath() const
QString OrganizerCore::downloadsPath() const
{
- return QDir::fromNativeSeparators(m_Settings.getDownloadDirectory());
+ return QDir::fromNativeSeparators(m_Settings.paths().downloads());
}
QString OrganizerCore::overwritePath() const
{
- return QDir::fromNativeSeparators(m_Settings.getOverwriteDirectory());
+ return QDir::fromNativeSeparators(m_Settings.paths().overwrite());
}
QString OrganizerCore::basePath() const
{
- return QDir::fromNativeSeparators(m_Settings.getBaseDirectory());
+ return QDir::fromNativeSeparators(m_Settings.paths().base());
}
QString OrganizerCore::modsPath() const
{
- return QDir::fromNativeSeparators(m_Settings.getModDirectory());
+ return QDir::fromNativeSeparators(m_Settings.paths().mods());
}
MOBase::VersionInfo OrganizerCore::appVersion() const
@@ -821,10 +823,10 @@ MOBase::IModInterface *OrganizerCore::createMod(GuessedValue &name)
return nullptr;
}
- m_InstallationManager.setModsDirectory(m_Settings.getModDirectory());
+ m_InstallationManager.setModsDirectory(m_Settings.paths().mods());
QString targetDirectory
- = QDir::fromNativeSeparators(m_Settings.getModDirectory())
+ = QDir::fromNativeSeparators(m_Settings.paths().mods())
.append("/")
.append(name);
@@ -912,7 +914,7 @@ MOBase::IModInterface *OrganizerCore::installMod(const QString &fileName,
modName.update(initModName, GUESS_USER);
}
m_CurrentProfile->writeModlistNow();
- m_InstallationManager.setModsDirectory(m_Settings.getModDirectory());
+ m_InstallationManager.setModsDirectory(m_Settings.paths().mods());
if (m_InstallationManager.install(fileName, modName, hasIniTweaks)) {
MessageDialog::showMessage(tr("Installation successful"),
qApp->activeWindow());
@@ -977,7 +979,7 @@ void OrganizerCore::installDownload(int index)
m_CurrentProfile->writeModlistNow();
bool hasIniTweaks = false;
- m_InstallationManager.setModsDirectory(m_Settings.getModDirectory());
+ m_InstallationManager.setModsDirectory(m_Settings.paths().mods());
if (m_InstallationManager.install(fileName, modName, hasIniTweaks)) {
MessageDialog::showMessage(tr("Installation successful"),
qApp->activeWindow());
@@ -1270,7 +1272,7 @@ bool OrganizerCore::previewFileWithAlternatives(
else {
// crude: we search for the next slash after the base mod directory to skip
// everything up to the data-relative directory
- int offset = settings().getModDirectory().size() + 1;
+ int offset = settings().paths().mods().size() + 1;
offset = fileName.indexOf("/", offset);
fileName = fileName.mid(offset + 1);
}
@@ -1412,7 +1414,7 @@ HANDLE OrganizerCore::spawnBinaryDirect(const QFileInfo &binary,
LPDWORD exitCode)
{
HANDLE processHandle = spawnBinaryProcess(binary, arguments, profileName, currentDirectory, steamAppID, customOverwrite, forcedLibraries);
- if (Settings::instance().lockGUI() && processHandle != INVALID_HANDLE_VALUE) {
+ if (Settings::instance().interface().lockGUI() && processHandle != INVALID_HANDLE_VALUE) {
std::unique_ptr dlg;
ILockedWaitingForProcess* uilock = nullptr;
@@ -1461,7 +1463,7 @@ HANDLE OrganizerCore::spawnBinaryProcess(const QFileInfo &binary,
::SetEnvironmentVariableW(L"SteamAPPId", ToWString(steamAppID).c_str());
} else {
::SetEnvironmentVariableW(L"SteamAPPId",
- ToWString(m_Settings.getSteamAppID()).c_str());
+ ToWString(m_Settings.steam().appID()).c_str());
}
QWidget *window = qApp->activeWindow();
@@ -1477,7 +1479,7 @@ HANDLE OrganizerCore::spawnBinaryProcess(const QFileInfo &binary,
|| QFileInfo(managedGame()->gameDirectory().absoluteFilePath(
"steam_api64.dll"))
.exists())
- && (m_Settings.getLoadMechanism() == LoadMechanism::LOAD_MODORGANIZER)) {
+ && (m_Settings.game().loadMechanismType() == LoadMechanism::LOAD_MODORGANIZER)) {
bool steamFound = true;
bool steamAccess = true;
@@ -1592,7 +1594,7 @@ HANDLE OrganizerCore::spawnBinaryProcess(const QFileInfo &binary,
}
}
- QString modsPath = settings().getModDirectory();
+ QString modsPath = settings().paths().mods();
// Check if this a request with either an executable or a working directory under our mods folder
// then will start the process in a virtualized "environment" with the appropriate paths fixed:
@@ -1749,7 +1751,7 @@ HANDLE OrganizerCore::startApplication(const QString &executable,
bool OrganizerCore::waitForApplication(HANDLE handle, LPDWORD exitCode)
{
- if (!Settings::instance().lockGUI())
+ if (!Settings::instance().interface().lockGUI())
return true;
ILockedWaitingForProcess* uilock = nullptr;
@@ -1960,8 +1962,10 @@ void OrganizerCore::refreshModList(bool saveChanges)
if (saveChanges) {
m_CurrentProfile->writeModlistNow(true);
}
- ModInfo::updateFromDisc(m_Settings.getModDirectory(), &m_DirectoryStructure,
- m_PluginContainer, m_Settings.displayForeign(), managedGame());
+
+ ModInfo::updateFromDisc(
+ m_Settings.paths().mods(), &m_DirectoryStructure,
+ m_PluginContainer, m_Settings.interface().displayForeign(), managedGame());
m_CurrentProfile->refreshModStatus();
@@ -2130,7 +2134,7 @@ void OrganizerCore::updateModsInDirectoryStructure(QMaparchivesWriter().writeImmediately(false);
@@ -2156,7 +2160,7 @@ void OrganizerCore::loggedInAction(QWidget* parent, std::function f)
f();
} else {
QString apiKey;
- if (settings().getNexusApiKey(apiKey)) {
+ if (settings().nexus().apiKey(apiKey)) {
doAfterLogin([f]{ f(); });
NexusInterface::instance(m_PluginContainer)->getAccessManager()->apiCheck(apiKey);
} else {
@@ -2295,8 +2299,10 @@ void OrganizerCore::profileRefresh()
{
// have to refresh mods twice (again in refreshModList), otherwise the refresh
// isn't complete. Not sure why
- ModInfo::updateFromDisc(m_Settings.getModDirectory(), &m_DirectoryStructure,
- m_PluginContainer, m_Settings.displayForeign(), managedGame());
+ ModInfo::updateFromDisc(
+ m_Settings.paths().mods(), &m_DirectoryStructure,
+ m_PluginContainer, m_Settings.interface().displayForeign(), managedGame());
+
m_CurrentProfile->refreshModStatus();
refreshModList();
@@ -2463,7 +2469,7 @@ void OrganizerCore::syncOverwrite()
SyncOverwriteDialog syncDialog(modInfo->absolutePath(), m_DirectoryStructure,
qApp->activeWindow());
if (syncDialog.exec() == QDialog::Accepted) {
- syncDialog.apply(QDir::fromNativeSeparators(m_Settings.getModDirectory()));
+ syncDialog.apply(QDir::fromNativeSeparators(m_Settings.paths().mods()));
modInfo->testValid();
refreshDirectoryStructure();
}
@@ -2486,7 +2492,7 @@ std::vector OrganizerCore::activeProblems() const
const auto& hookdll = oldMO1HookDll();
if (!hookdll.isEmpty()) {
// This warning will now be shown every time the problems are checked, which is a bit
- // of a "log spam". But since this is a sevre error which will most likely make the
+ // of a "log spam". But since this is a sever error which will most likely make the
// game crash/freeze/etc. and is very hard to diagnose, this "log spam" will make it
// easier for the user to notice the warning.
log::warn("hook.dll found in game folder: {}", hookdll);
@@ -2562,7 +2568,7 @@ void OrganizerCore::savePluginList()
}
m_PluginList.saveTo(m_CurrentProfile->getLockedOrderFileName(),
m_CurrentProfile->getDeleterFileName(),
- m_Settings.hideUncheckedPlugins());
+ m_Settings.game().hideUncheckedPlugins());
m_PluginList.saveLoadOrder(*m_DirectoryStructure);
}
@@ -2574,7 +2580,7 @@ void OrganizerCore::prepareStart()
m_CurrentProfile->writeModlist();
m_CurrentProfile->createTweakedIniFile();
saveCurrentLists();
- m_Settings.setupLoadMechanism();
+ m_Settings.game().setupLoadMechanism();
storeSettings();
}
@@ -2588,7 +2594,7 @@ std::vector OrganizerCore::fileMapping(const QString &profileName,
}
IPluginGame *game = qApp->property("managed_game").value();
- Profile profile(QDir(m_Settings.getProfileDirectory() + "/" + profileName),
+ Profile profile(QDir(m_Settings.paths().profiles() + "/" + profileName),
game);
MappingType result;
@@ -2634,7 +2640,7 @@ std::vector OrganizerCore::fileMapping(const QString &profileName,
}
result.insert(result.end(), {
- QDir::toNativeSeparators(m_Settings.getOverwriteDirectory()),
+ QDir::toNativeSeparators(m_Settings.paths().overwrite()),
dataPath,
true,
customOverwrite.isEmpty()
diff --git a/src/pluginlist.cpp b/src/pluginlist.cpp
index ddfe492e..33423225 100644
--- a/src/pluginlist.cpp
+++ b/src/pluginlist.cpp
@@ -191,7 +191,7 @@ void PluginList::refresh(const QString &profileName
continue;
}
- bool forceEnabled = Settings::instance().forceEnableCoreFiles() &&
+ bool forceEnabled = Settings::instance().game().forceEnableCoreFiles() &&
primaryPlugins.contains(filename, Qt::CaseInsensitive);
//(std::find(primaryPlugins.begin(), primaryPlugins.end(), filename.toLower()) != primaryPlugins.end());
diff --git a/src/profile.cpp b/src/profile.cpp
index 7f4ebcaa..e76060b9 100644
--- a/src/profile.cpp
+++ b/src/profile.cpp
@@ -73,7 +73,7 @@ Profile::Profile(const QString &name, IPluginGame const *gamePlugin, bool useDef
: m_ModListWriter(std::bind(&Profile::doWriteModlist, this))
, m_GamePlugin(gamePlugin)
{
- QString profilesDir = Settings::instance().getProfileDirectory();
+ QString profilesDir = Settings::instance().paths().profiles();
QDir profileBase(profilesDir);
QString fixedName = name;
if (!fixDirectoryName(fixedName)) {
@@ -299,7 +299,7 @@ void Profile::createTweakedIniFile()
// static
void Profile::renameModInAllProfiles(const QString& oldName, const QString& newName)
{
- QDir profilesDir(Settings::instance().getProfileDirectory());
+ QDir profilesDir(Settings::instance().paths().profiles());
profilesDir.setFilter(QDir::AllDirs | QDir::NoDotAndDotDot);
QDirIterator profileIter(profilesDir);
while (profileIter.hasNext()) {
@@ -655,7 +655,7 @@ void Profile::setModPriority(unsigned int index, int &newPriority)
Profile *Profile::createPtrFrom(const QString &name, const Profile &reference, MOBase::IPluginGame const *gamePlugin)
{
- QString profileDirectory = Settings::instance().getProfileDirectory() + "/" + name;
+ QString profileDirectory = Settings::instance().paths().profiles() + "/" + name;
reference.copyFilesTo(profileDirectory);
return new Profile(QDir(profileDirectory), gamePlugin);
}
@@ -906,7 +906,7 @@ QString Profile::savePath() const
void Profile::rename(const QString &newName)
{
- QDir profileDir(Settings::instance().getProfileDirectory());
+ QDir profileDir(Settings::instance().paths().profiles());
profileDir.rename(name(), newName);
m_Directory.setPath(profileDir.absoluteFilePath(newName));
}
diff --git a/src/profilesdialog.cpp b/src/profilesdialog.cpp
index 2f1bd059..c91f48f4 100644
--- a/src/profilesdialog.cpp
+++ b/src/profilesdialog.cpp
@@ -57,7 +57,7 @@ ProfilesDialog::ProfilesDialog(const QString &profileName, MOBase::IPluginGame c
{
ui->setupUi(this);
- QDir profilesDir(Settings::instance().getProfileDirectory());
+ QDir profilesDir(Settings::instance().paths().profiles());
profilesDir.setFilter(QDir::AllDirs | QDir::NoDotAndDotDot);
QDirIterator profileIter(profilesDir);
@@ -203,7 +203,7 @@ void ProfilesDialog::on_removeProfileButton_clicked()
if (confirmBox.exec() == QMessageBox::Yes) {
QString profilePath;
if (profileToDelete.get() == nullptr) {
- profilePath = Settings::instance().getProfileDirectory()
+ profilePath = Settings::instance().paths().profiles()
+ "/" + ui->profilesList->currentItem()->text();
if (QMessageBox::question(this, tr("Profile broken"),
tr("This profile you're about to delete seems to be broken or the path is invalid. "
diff --git a/src/settings.cpp b/src/settings.cpp
index 71288950..8b063efb 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -150,7 +150,7 @@ std::optional getOptional(
template
T get(
const QSettings& settings,
- const QString& section, const QString& key, T def={})
+ const QString& section, const QString& key, T def)
{
if (auto v=getOptional(settings, section, key)) {
return *v;
@@ -453,22 +453,74 @@ void warnIfNotCheckable(const QAbstractButton* b)
}
+bool setWindowsCredential(const QString key, const QString data)
+{
+ QString finalKey("ModOrganizer2_" + key);
+ wchar_t* keyData = new wchar_t[finalKey.size()+1];
+ finalKey.toWCharArray(keyData);
+ keyData[finalKey.size()] = L'\0';
+ bool result = false;
+ if (data.isEmpty()) {
+ result = CredDeleteW(keyData, CRED_TYPE_GENERIC, 0);
+ if (!result)
+ if (GetLastError() == ERROR_NOT_FOUND)
+ result = true;
+ } else {
+ wchar_t* charData = new wchar_t[data.size()];
+ data.toWCharArray(charData);
+
+ CREDENTIALW cred = {};
+ cred.Flags = 0;
+ cred.Type = CRED_TYPE_GENERIC;
+ cred.TargetName = keyData;
+ cred.CredentialBlob = (LPBYTE)charData;
+ cred.CredentialBlobSize = sizeof(wchar_t) * data.size();
+ cred.Persist = CRED_PERSIST_LOCAL_MACHINE;
+
+ result = CredWriteW(&cred, 0);
+ delete[] charData;
+ }
+ delete[] keyData;
+ return result;
+}
+
+QString getWindowsCredential(const QString key)
+{
+ QString result;
+ QString finalKey("ModOrganizer2_" + key);
+ wchar_t* keyData = new wchar_t[finalKey.size()+1];
+ finalKey.toWCharArray(keyData);
+ keyData[finalKey.size()] = L'\0';
+ PCREDENTIALW creds;
+ if (CredReadW(keyData, 1, 0, &creds)) {
+ wchar_t *charData = (wchar_t *)creds->CredentialBlob;
+ result = QString::fromWCharArray(charData, creds->CredentialBlobSize / sizeof(wchar_t));
+ CredFree(creds);
+ } else {
+ const auto e = GetLastError();
+ if (e != ERROR_NOT_FOUND) {
+ log::error("Retrieving encrypted data failed: {}", formatSystemMessage(e));
+ }
+ }
+ delete[] keyData;
+ return result;
+}
+
+
Settings *Settings::s_Instance = nullptr;
Settings::Settings(const QString& path) :
m_Settings(path, QSettings::IniFormat),
- m_Geometry(m_Settings), m_Colors(m_Settings), m_Plugins(m_Settings)
+ m_Game(m_Settings), m_Geometry(m_Settings), m_Widgets(m_Settings),
+ m_Colors(m_Settings), m_Plugins(m_Settings), m_Paths(m_Settings),
+ m_Network(m_Settings), m_Nexus(*this, m_Settings), m_Steam(*this, m_Settings),
+ m_Interface(m_Settings), m_Diagnostics(m_Settings)
{
if (s_Instance != nullptr) {
throw std::runtime_error("second instance of \"Settings\" created");
} else {
s_Instance = this;
}
-
- MOBase::QuestionBoxMemory::setCallbacks(
- [this](auto&& w, auto&& f){ return getQuestionButton(w, f); },
- [this](auto&& w, auto&& b){ setQuestionWindowButton(w, b); },
- [this](auto&& w, auto&& f, auto&& b){ setQuestionFileButton(w, f, b); });
}
Settings::~Settings()
@@ -488,7 +540,7 @@ Settings &Settings::instance()
void Settings::processUpdates(
const QVersionNumber& currentVersion, const QVersionNumber& lastVersion)
{
- if (getFirstStart()) {
+ if (firstStart()) {
return;
}
@@ -523,1569 +575,1670 @@ void Settings::processUpdates(
set(m_Settings, "General", "version", currentVersion.toString());
}
-QString Settings::getFilename() const
+QString Settings::filename() const
{
return m_Settings.fileName();
}
-void Settings::registerAsNXMHandler(bool force)
+bool Settings::usePrereleases() const
{
- const auto nxmPath = QCoreApplication::applicationDirPath() + "/nxmhandler.exe";
- const auto executable = QCoreApplication::applicationFilePath();
-
- QString mode = force ? "forcereg" : "reg";
- QString parameters = mode + " " + m_GamePlugin->gameShortName();
- for (const QString& altGame : m_GamePlugin->validShortNames()) {
- parameters += "," + altGame;
- }
- parameters += " \"" + executable + "\"";
-
- if (!shell::Execute(nxmPath, parameters)) {
- QMessageBox::critical(
- nullptr, tr("Failed"), tr("Failed to start the helper application"));
- }
+ return get(m_Settings, "Settings", "use_prereleases", false);
}
-bool Settings::colorSeparatorScrollbar() const
+void Settings::setUsePrereleases(bool b)
{
- return get(m_Settings, "Settings", "colorSeparatorScrollbars", true);
+ set(m_Settings, "Settings", "use_prereleases", b);
}
-void Settings::setColorSeparatorScrollbar(bool b)
+std::optional Settings::version() const
{
- set(m_Settings, "Settings", "colorSeparatorScrollbars", b);
+ if (auto v=getOptional(m_Settings, "General", "version")) {
+ return QVersionNumber::fromString(*v).normalized();
+ }
+
+ return {};
}
-void Settings::managedGameChanged(IPluginGame const *gamePlugin)
+bool Settings::firstStart() const
{
- m_GamePlugin = gamePlugin;
+ return get(m_Settings, "General", "first_start", true);
}
-bool Settings::obfuscate(const QString key, const QString data)
+void Settings::setFirstStart(bool b)
{
- QString finalKey("ModOrganizer2_" + key);
- wchar_t* keyData = new wchar_t[finalKey.size()+1];
- finalKey.toWCharArray(keyData);
- keyData[finalKey.size()] = L'\0';
- bool result = false;
- if (data.isEmpty()) {
- result = CredDeleteW(keyData, CRED_TYPE_GENERIC, 0);
- if (!result)
- if (GetLastError() == ERROR_NOT_FOUND)
- result = true;
- } else {
- wchar_t* charData = new wchar_t[data.size()];
- data.toWCharArray(charData);
+ set(m_Settings, "General", "first_start", b);
+}
- CREDENTIALW cred = {};
- cred.Flags = 0;
- cred.Type = CRED_TYPE_GENERIC;
- cred.TargetName = keyData;
- cred.CredentialBlob = (LPBYTE)charData;
- cred.CredentialBlobSize = sizeof(wchar_t) * data.size();
- cred.Persist = CRED_PERSIST_LOCAL_MACHINE;
+QString Settings::executablesBlacklist() const
+{
+ static const QString def = (QStringList()
+ << "Chrome.exe"
+ << "Firefox.exe"
+ << "TSVNCache.exe"
+ << "TGitCache.exe"
+ << "Steam.exe"
+ << "GameOverlayUI.exe"
+ << "Discord.exe"
+ << "GalaxyClient.exe"
+ << "Spotify.exe"
+ ).join(";");
- result = CredWriteW(&cred, 0);
- delete[] charData;
- }
- delete[] keyData;
- return result;
+ return get(m_Settings, "Settings", "executable_blacklist", def);
}
-QString Settings::deObfuscate(const QString key)
+void Settings::setExecutablesBlacklist(const QString& s)
{
- QString result;
- QString finalKey("ModOrganizer2_" + key);
- wchar_t* keyData = new wchar_t[finalKey.size()+1];
- finalKey.toWCharArray(keyData);
- keyData[finalKey.size()] = L'\0';
- PCREDENTIALW creds;
- if (CredReadW(keyData, 1, 0, &creds)) {
- wchar_t *charData = (wchar_t *)creds->CredentialBlob;
- result = QString::fromWCharArray(charData, creds->CredentialBlobSize / sizeof(wchar_t));
- CredFree(creds);
- } else {
- const auto e = GetLastError();
- if (e != ERROR_NOT_FOUND) {
- log::error("Retrieving encrypted data failed: {}", formatSystemMessage(e));
- }
- }
- delete[] keyData;
- return result;
+ set(m_Settings, "Settings", "executable_blacklist", s);
}
-QColor Settings::getIdealTextColor(const QColor& rBackgroundColor)
+void Settings::setMotdHash(uint hash)
{
- if (rBackgroundColor.alpha() == 0)
- return QColor(Qt::black);
-
- const int THRESHOLD = 106 * 255.0f / rBackgroundColor.alpha();
- int BackgroundDelta = (rBackgroundColor.red() * 0.299) + (rBackgroundColor.green() * 0.587) + (rBackgroundColor.blue() * 0.114);
- return QColor((255 - BackgroundDelta <= THRESHOLD) ? Qt::black : Qt::white);
+ set(m_Settings, "General", "motd_hash", hash);
}
-
-bool Settings::hideUncheckedPlugins() const
+unsigned int Settings::motdHash() const
{
- return get(m_Settings, "Settings", "hide_unchecked_plugins", false);
+ return get(m_Settings, "General", "motd_hash", 0);
}
-void Settings::setHideUncheckedPlugins(bool b)
+bool Settings::archiveParsing() const
{
- set(m_Settings, "Settings", "hide_unchecked_plugins", b);
+ return get(m_Settings, "Settings", "archive_parsing_experimental", false);
}
-bool Settings::forceEnableCoreFiles() const
+void Settings::setArchiveParsing(bool b)
{
- return get(m_Settings, "Settings", "force_enable_core_files", true);
+ set(m_Settings, "Settings", "archive_parsing_experimental", b);
}
-void Settings::setForceEnableCoreFiles(bool b)
+std::vector> Settings::executables() const
{
- set(m_Settings, "Settings", "force_enable_core_files", b);
+ ScopedReadArray sra(m_Settings, "customExecutables");
+ std::vector> v;
+
+ sra.for_each([&]{
+ std::map map;
+
+ for (auto&& key : sra.keys()) {
+ map[key] = m_Settings.value(key);
+ }
+
+ v.push_back(map);
+ });
+
+ return v;
}
-bool Settings::lockGUI() const
+void Settings::setExecutables(const std::vector>& v)
{
- return get(m_Settings, "Settings", "lock_gui", true);
+ removeSection(m_Settings, "customExecutables");
+
+ ScopedWriteArray swa(m_Settings, "customExecutables");
+
+ for (const auto& map : v) {
+ swa.next();
+
+ for (auto&& p : map) {
+ swa.set(p.first, p.second);
+ }
+ }
}
-void Settings::setLockGUI(bool b)
+bool Settings::keepBackupOnInstall() const
{
- set(m_Settings, "Settings", "lock_gui", b);
+ return get(m_Settings, "General", "backup_install", false);
}
-bool Settings::automaticLoginEnabled() const
+void Settings::setKeepBackupOnInstall(bool b)
{
- return get(m_Settings, "Settings", "nexus_login", false);
+ set(m_Settings, "General", "backup_install", b);
}
-QString Settings::getSteamAppID() const
+GameSettings& Settings::game()
{
- return get(m_Settings, "Settings", "app_id", m_GamePlugin->steamAPPId());
+ return m_Game;
}
-void Settings::setSteamAppID(const QString& id)
+const GameSettings& Settings::game() const
{
- if (id.isEmpty()) {
- remove(m_Settings, "Settings", "app_id");
- } else {
- set(m_Settings, "Settings", "app_id", id);
- }
+ return m_Game;
}
-bool Settings::usePrereleases() const
+GeometrySettings& Settings::geometry()
{
- return get(m_Settings, "Settings", "use_prereleases", false);
+ return m_Geometry;
}
-void Settings::setUsePrereleases(bool b)
+const GeometrySettings& Settings::geometry() const
{
- set(m_Settings, "Settings", "use_prereleases", b);
+ return m_Geometry;
}
-QString Settings::getConfigurablePath(const QString &key,
- const QString &def,
- bool resolve) const
+WidgetSettings& Settings::widgets()
{
- QString result = QDir::fromNativeSeparators(
- get(m_Settings, "Settings", key, QString("%BASE_DIR%/") + def));
-
- if (resolve) {
- result.replace("%BASE_DIR%", getBaseDirectory());
- }
-
- return result;
+ return m_Widgets;
}
-void Settings::setConfigurablePath(const QString &key, const QString& path)
+const WidgetSettings& Settings::widgets() const
{
- if (path.isEmpty()) {
- remove(m_Settings, "Settings", key);
- } else {
- set(m_Settings, "Settings", key, path);
- }
+ return m_Widgets;
}
-QString Settings::getBaseDirectory() const
+ColorSettings& Settings::colors()
{
- return QDir::fromNativeSeparators(get(m_Settings,
- "Settings", "base_directory", qApp->property("dataPath").toString()));
+ return m_Colors;
}
-QString Settings::getDownloadDirectory(bool resolve) const
+const ColorSettings& Settings::colors() const
{
- return getConfigurablePath(
- "download_directory",
- ToQString(AppConfig::downloadPath()),
- resolve);
+ return m_Colors;
}
-QString Settings::getCacheDirectory(bool resolve) const
+PluginSettings& Settings::plugins()
{
- return getConfigurablePath(
- "cache_directory",
- ToQString(AppConfig::cachePath()),
- resolve);
+ return m_Plugins;
}
-QString Settings::getModDirectory(bool resolve) const
+const PluginSettings& Settings::plugins() const
{
- return getConfigurablePath(
- "mod_directory",
- ToQString(AppConfig::modsPath()),
- resolve);
+ return m_Plugins;
}
-QString Settings::getProfileDirectory(bool resolve) const
+PathSettings& Settings::paths()
{
- return getConfigurablePath(
- "profiles_directory",
- ToQString(AppConfig::profilesPath()),
- resolve);
+ return m_Paths;
}
-QString Settings::getOverwriteDirectory(bool resolve) const
+const PathSettings& Settings::paths() const
{
- return getConfigurablePath(
- "overwrite_directory",
- ToQString(AppConfig::overwritePath()),
- resolve);
+ return m_Paths;
}
-void Settings::setBaseDirectory(const QString& path)
+NetworkSettings& Settings::network()
{
- if (path.isEmpty()) {
- remove(m_Settings, "Settings", "base_directory");
- } else {
- set(m_Settings, "Settings", "base_directory", path);
- }
+ return m_Network;
}
-void Settings::setDownloadDirectory(const QString& path)
+const NetworkSettings& Settings::network() const
{
- setConfigurablePath("download_directory", path);
+ return m_Network;
}
-void Settings::setModDirectory(const QString& path)
+NexusSettings& Settings::nexus()
{
- setConfigurablePath("mod_directory", path);
+ return m_Nexus;
}
-void Settings::setCacheDirectory(const QString& path)
+const NexusSettings& Settings::nexus() const
{
- setConfigurablePath("cache_directory", path);
+ return m_Nexus;
}
-void Settings::setProfileDirectory(const QString& path)
+SteamSettings& Settings::steam()
{
- setConfigurablePath("profiles_directory", path);
+ return m_Steam;
}
-void Settings::setOverwriteDirectory(const QString& path)
+const SteamSettings& Settings::steam() const
{
- setConfigurablePath("overwrite_directory", path);
+ return m_Steam;
}
-std::optional Settings::getManagedGameDirectory() const
+InterfaceSettings& Settings::interface()
{
- if (auto v=getOptional(m_Settings, "General", "gamePath")) {
- return QString::fromUtf8(*v);
- }
-
- return {};
+ return m_Interface;
}
-void Settings::setManagedGameDirectory(const QString& path)
+const InterfaceSettings& Settings::interface() const
{
- set(m_Settings, "General", "gamePath", QDir::toNativeSeparators(path).toUtf8());
+ return m_Interface;
}
-std::optional Settings::getManagedGameName() const
+DiagnosticsSettings& Settings::diagnostics()
{
- return getOptional(m_Settings, "General", "gameName");
+ return m_Diagnostics;
}
-void Settings::setManagedGameName(const QString& name)
+const DiagnosticsSettings& Settings::diagnostics() const
{
- set(m_Settings, "General", "gameName", name);
+ return m_Diagnostics;
}
-std::optional Settings::getManagedGameEdition() const
+QSettings::Status Settings::sync() const
{
- return getOptional(m_Settings, "General", "game_edition");
+ m_Settings.sync();
+ return m_Settings.status();
}
-void Settings::setManagedGameEdition(const QString& name)
+void Settings::dump() const
{
- set(m_Settings, "General", "game_edition", name);
-}
+ static const QStringList ignore({
+ "username", "password", "nexus_api_key"
+ });
-std::optional Settings::getSelectedProfileName() const
-{
- if (auto v=getOptional(m_Settings, "General", "selected_profile")) {
- return QString::fromUtf8(*v);
+ log::debug("settings:");
+
+ {
+ ScopedGroup sg(m_Settings, "Settings");
+
+ for (auto k : m_Settings.allKeys()) {
+ if (ignore.contains(k, Qt::CaseInsensitive)) {
+ continue;
+ }
+
+ log::debug(" . {}={}", k, m_Settings.value(k).toString());
+ }
}
- return {};
+ m_Network.dump();
}
-void Settings::setSelectedProfileName(const QString& name)
+void Settings::managedGameChanged(IPluginGame const *gamePlugin)
{
- set(m_Settings, "General", "selected_profile", name.toUtf8());
+ m_Game.setPlugin(gamePlugin);
}
-std::optional Settings::getStyleName() const
+
+GameSettings::GameSettings(QSettings& settings)
+ : m_Settings(settings), m_GamePlugin(nullptr)
{
- return getOptional(m_Settings, "Settings", "style");
}
-void Settings::setStyleName(const QString& name)
+const MOBase::IPluginGame* GameSettings::plugin()
{
- set(m_Settings, "Settings", "style", name);
+ return m_GamePlugin;
}
-bool Settings::getUseProxy() const
+void GameSettings::setPlugin(const MOBase::IPluginGame* gamePlugin)
{
- return get(m_Settings, "Settings", "use_proxy", false);
+ m_GamePlugin = gamePlugin;
}
-void Settings::setUseProxy(bool b)
+bool GameSettings::forceEnableCoreFiles() const
{
- set(m_Settings, "Settings", "use_proxy", b);
+ return get(m_Settings, "Settings", "force_enable_core_files", true);
}
-std::optional Settings::getVersion() const
+void GameSettings::setForceEnableCoreFiles(bool b)
{
- if (auto v=getOptional(m_Settings, "General", "version")) {
- return QVersionNumber::fromString(*v).normalized();
- }
-
- return {};
+ set(m_Settings, "Settings", "force_enable_core_files", b);
}
-bool Settings::getFirstStart() const
+std::optional GameSettings::directory() const
{
- return get(m_Settings, "General", "first_start", true);
+ if (auto v=getOptional(m_Settings, "General", "gamePath")) {
+ return QString::fromUtf8(*v);
+ }
+
+ return {};
}
-void Settings::setFirstStart(bool b)
+void GameSettings::setDirectory(const QString& path)
{
- set(m_Settings, "General", "first_start", b);
+ set(m_Settings, "General", "gamePath", QDir::toNativeSeparators(path).toUtf8());
}
-std::optional Settings::getPreviousSeparatorColor() const
+std::optional GameSettings::name() const
{
- const auto c = getOptional(m_Settings, "General", "previousSeparatorColor");
- if (c && c->isValid()) {
- return c;
- }
-
- return {};
+ return getOptional(m_Settings, "General", "gameName");
}
-void Settings::setPreviousSeparatorColor(const QColor& c) const
+void GameSettings::setName(const QString& name)
{
- set(m_Settings, "General", "previousSeparatorColor", c);
+ set(m_Settings, "General", "gameName", name);
}
-void Settings::removePreviousSeparatorColor()
+std::optional GameSettings::edition() const
{
- remove(m_Settings, "General", "previousSeparatorColor");
+ return getOptional(m_Settings, "General", "game_edition");
}
-bool Settings::getNexusApiKey(QString &apiKey) const
+void GameSettings::setEdition(const QString& name)
{
- QString tempKey = deObfuscate("APIKEY");
- if (tempKey.isEmpty())
- return false;
-
- apiKey = tempKey;
- return true;
+ set(m_Settings, "General", "game_edition", name);
}
-bool Settings::setNexusApiKey(const QString& apiKey)
+std::optional GameSettings::selectedProfileName() const
{
- if (!obfuscate("APIKEY", apiKey)) {
- const auto e = GetLastError();
- log::error("Storing API key failed: {}", formatSystemMessage(e));
- return false;
+ if (auto v=getOptional(m_Settings, "General", "selected_profile")) {
+ return QString::fromUtf8(*v);
}
- return true;
+ return {};
}
-bool Settings::clearNexusApiKey()
+void GameSettings::setSelectedProfileName(const QString& name)
{
- return setNexusApiKey("");
+ set(m_Settings, "General", "selected_profile", name.toUtf8());
}
-bool Settings::hasNexusApiKey() const
+LoadMechanism::EMechanism GameSettings::loadMechanismType() const
{
- return !deObfuscate("APIKEY").isEmpty();
-}
+ const auto def = LoadMechanism::LOAD_MODORGANIZER;
-bool Settings::getSteamLogin(QString &username, QString &password) const
-{
- username = get(m_Settings, "Settings", "steam_username", "");
- password = deObfuscate("steam_password");
+ const auto i = get(m_Settings,
+ "Settings", "load_mechanism", def);
- return !username.isEmpty() && !password.isEmpty();
-}
+ switch (i)
+ {
+ // ok
+ case LoadMechanism::LOAD_MODORGANIZER: // fall-through
+ {
+ break;
+ }
-bool Settings::compactDownloads() const
-{
- return get(m_Settings, "Settings", "compact_downloads", false);
-}
+ default:
+ {
+ log::error(
+ "invalid load mechanism {}, reverting to {}",
+ static_cast(i), toString(def));
-void Settings::setCompactDownloads(bool b)
-{
- set(m_Settings, "Settings", "compact_downloads", b);
-}
+ set(m_Settings, "Settings", "load_mechanism", def);
-bool Settings::metaDownloads() const
-{
- return get(m_Settings, "Settings", "meta_downloads", false);
-}
+ return def;
+ }
+ }
-void Settings::setMetaDownloads(bool b)
-{
- set(m_Settings, "Settings", "meta_downloads", b);
+ return i;
}
-bool Settings::offlineMode() const
+void GameSettings::setLoadMechanism(LoadMechanism::EMechanism m)
{
- return get(m_Settings, "Settings/offline_mode", false);
+ set(m_Settings, "Settings", "load_mechanism", m);
}
-void Settings::setOfflineMode(bool b)
+const LoadMechanism& GameSettings::loadMechanism() const
{
- set(m_Settings, "Settings", "offline_mode", b);
+ return m_LoadMechanism;
}
-log::Levels Settings::logLevel() const
+void GameSettings::setupLoadMechanism()
{
- return get(m_Settings, "Settings", "log_level", log::Levels::Info);
+ m_LoadMechanism.activate(loadMechanismType());
}
-void Settings::setLogLevel(log::Levels level)
+bool GameSettings::hideUncheckedPlugins() const
{
- set(m_Settings, "Settings", "log_level", level);
+ return get(m_Settings, "Settings", "hide_unchecked_plugins", false);
}
-CrashDumpsType Settings::crashDumpsType() const
+void GameSettings::setHideUncheckedPlugins(bool b)
{
- return get(m_Settings,
- "Settings", "crash_dumps_type", CrashDumpsType::Mini);
+ set(m_Settings, "Settings", "hide_unchecked_plugins", b);
}
-void Settings::setCrashDumpsType(CrashDumpsType type)
-{
- set(m_Settings, "Settings", "crash_dumps_type", type);
-}
-int Settings::crashDumpsMax() const
+GeometrySettings::GeometrySettings(QSettings& s)
+ : m_Settings(s), m_Reset(false)
{
- return get(m_Settings, "Settings", "crash_dumps_max", 5);
}
-void Settings::setCrashDumpsMax(int n)
+void GeometrySettings::requestReset()
{
- set(m_Settings, "Settings", "crash_dumps_max", n);
+ m_Reset = true;
}
-QString Settings::executablesBlacklist() const
+void GeometrySettings::resetIfNeeded()
{
- static const QString def = (QStringList()
- << "Chrome.exe"
- << "Firefox.exe"
- << "TSVNCache.exe"
- << "TGitCache.exe"
- << "Steam.exe"
- << "GameOverlayUI.exe"
- << "Discord.exe"
- << "GalaxyClient.exe"
- << "Spotify.exe"
- ).join(";");
+ if (!m_Reset) {
+ return;
+ }
- return get(m_Settings, "Settings", "executable_blacklist", def);
+ removeSection(m_Settings, "Geometry");
}
-void Settings::setExecutablesBlacklist(const QString& s)
+void GeometrySettings::saveGeometry(const QWidget* w)
{
- set(m_Settings, "Settings", "executable_blacklist", s);
+ set(m_Settings, "Geometry", geoSettingName(w), w->saveGeometry());
}
-void Settings::setSteamLogin(QString username, QString password)
+bool GeometrySettings::restoreGeometry(QWidget* w) const
{
- if (username == "") {
- remove(m_Settings, "Settings", "steam_username");
- password = "";
- } else {
- set(m_Settings, "Settings", "steam_username", username);
+ if (auto v=getOptional(m_Settings, "Geometry", geoSettingName(w))) {
+ w->restoreGeometry(*v);
+ return true;
}
- if (!obfuscate("steam_password", password)) {
- const auto e = GetLastError();
- log::error("Storing or deleting password failed: {}", formatSystemMessage(e));
- }
+ return false;
}
-LoadMechanism::EMechanism Settings::getLoadMechanism() const
+void GeometrySettings::saveState(const QMainWindow* w)
{
- const auto def = LoadMechanism::LOAD_MODORGANIZER;
-
- const auto i = get(m_Settings,
- "Settings", "load_mechanism", def);
-
- switch (i)
- {
- // ok
- case LoadMechanism::LOAD_MODORGANIZER: // fall-through
- {
- break;
- }
-
- default:
- {
- log::error(
- "invalid load mechanism {}, reverting to {}",
- static_cast(i), toString(def));
-
- set(m_Settings, "Settings", "load_mechanism", def);
-
- return def;
- }
- }
-
- return i;
+ set(m_Settings, "Geometry", stateSettingName(w), w->saveState());
}
-void Settings::setLoadMechanism(LoadMechanism::EMechanism m)
+bool GeometrySettings::restoreState(QMainWindow* w) const
{
- set(m_Settings, "Settings", "load_mechanism", m);
-}
+ if (auto v=getOptional(m_Settings, "Geometry", stateSettingName(w))) {
+ w->restoreState(*v);
+ return true;
+ }
-void Settings::setupLoadMechanism()
-{
- m_LoadMechanism.activate(getLoadMechanism());
+ return false;
}
-bool Settings::endorsementIntegration() const
+void GeometrySettings::saveState(const QHeaderView* w)
{
- return get(m_Settings, "Settings", "endorsement_integration", true);
+ set(m_Settings, "Geometry", stateSettingName(w), w->saveState());
}
-void Settings::setEndorsementIntegration(bool b) const
+bool GeometrySettings::restoreState(QHeaderView* w) const
{
- set(m_Settings, "Settings", "endorsement_integration", b);
+ if (auto v=getOptional(m_Settings, "Geometry", stateSettingName(w))) {
+ w->restoreState(*v);
+ return true;
+ }
+
+ return false;
}
-EndorsementState Settings::endorsementState() const
+void GeometrySettings::saveState(const QSplitter* w)
{
- return endorsementStateFromString(
- get(m_Settings, "General", "endorse_state", ""));
+ set(m_Settings, "Geometry", stateSettingName(w), w->saveState());
}
-void Settings::setEndorsementState(EndorsementState s)
+bool GeometrySettings::restoreState(QSplitter* w) const
{
- const auto v = toString(s);
-
- if (v.isEmpty()) {
- remove(m_Settings, "General", "endorse_state");
- } else {
- set(m_Settings, "General", "endorse_state", v);
+ if (auto v=getOptional(m_Settings, "Geometry", stateSettingName(w))) {
+ w->restoreState(*v);
+ return true;
}
-}
-bool Settings::hideAPICounter() const
-{
- return get(m_Settings, "Settings", "hide_api_counter", false);
+ return false;
}
-void Settings::setHideAPICounter(bool b)
+void GeometrySettings::saveState(const ExpanderWidget* expander)
{
- set(m_Settings, "Settings", "hide_api_counter", b);
+ set(m_Settings, "Geometry", stateSettingName(expander), expander->saveState());
}
-bool Settings::displayForeign() const
+bool GeometrySettings::restoreState(ExpanderWidget* expander) const
{
- return get(m_Settings, "Settings", "display_foreign", true);
-}
+ if (auto v=getOptional(m_Settings, "Geometry", stateSettingName(expander))) {
+ expander->restoreState(*v);
+ return true;
+ }
-void Settings::setDisplayForeign(bool b)
-{
- set(m_Settings, "Settings", "display_foreign", b);
+ return false;
}
-void Settings::setMotDHash(uint hash)
+void GeometrySettings::saveVisibility(const QWidget* w)
{
- set(m_Settings, "General", "motd_hash", hash);
+ set(m_Settings, "Geometry", visibilitySettingName(w), w->isVisible());
}
-unsigned int Settings::getMotDHash() const
+bool GeometrySettings::restoreVisibility(QWidget* w, std::optional def) const
{
- return get(m_Settings, "motd_hash", 0);
-}
+ if (auto v=getOptional(m_Settings, "Geometry", visibilitySettingName(w), def)) {
+ w->setVisible(*v);
+ return true;
+ }
-bool Settings::archiveParsing() const
-{
- return get(m_Settings, "Settings", "archive_parsing_experimental", false);
+ return false;
}
-void Settings::setArchiveParsing(bool b)
+void GeometrySettings::restoreToolbars(QMainWindow* w) const
{
- set(m_Settings, "Settings", "archive_parsing_experimental", b);
-}
+ // all toolbars have the same size and button style settings
+ const auto size = getOptional(m_Settings, "Geometry", "toolbar_size");
+ const auto style = getOptional(m_Settings, "Geometry", "toolbar_button_style");
-QString Settings::language()
+ for (auto* tb : w->findChildren()) {
+ if (size) {
+ tb->setIconSize(*size);
+ }
+
+ if (style) {
+ tb->setToolButtonStyle(static_cast(*style));
+ }
+
+ restoreVisibility(tb);
+ }
+}
+
+void GeometrySettings::saveToolbars(const QMainWindow* w)
{
- QString result = get(m_Settings, "Settings", "language", "");
+ const auto tbs = w->findChildren();
- if (result.isEmpty()) {
- QStringList languagePreferences = QLocale::system().uiLanguages();
+ // save visibility for all
+ for (auto* tb : tbs) {
+ saveVisibility(tb);
+ }
- if (languagePreferences.length() > 0) {
- // the users most favoritest language
- result = languagePreferences.at(0);
- } else {
- // fallback system locale
- result = QLocale::system().name();
+ // all toolbars have the same size and button style settings, just save the
+ // first one
+ if (!tbs.isEmpty()) {
+ const auto* tb = tbs[0];
+
+ set(m_Settings, "Geometry", "toolbar_size", tb->iconSize());
+ set(m_Settings, "Geometry", "toolbar_button_style", static_cast(tb->toolButtonStyle()));
+ }
+}
+
+QStringList GeometrySettings::modInfoTabOrder() const
+{
+ QStringList v;
+
+ if (m_Settings.contains("mod_info_tabs")) {
+ // old byte array from 2.2.0
+ QDataStream stream(m_Settings.value("mod_info_tabs").toByteArray());
+
+ int count = 0;
+ stream >> count;
+
+ for (int i=0; i> s;
+ v.push_back(s);
+ }
+ } else {
+ // string list since 2.2.1
+ QString string = m_Settings.value("mod_info_tab_order").toString();
+ QTextStream stream(&string);
+
+ while (!stream.atEnd()) {
+ QString s;
+ stream >> s;
+ v.push_back(s);
}
}
- return result;
+ return v;
}
-void Settings::setLanguage(const QString& name)
+void GeometrySettings::setModInfoTabOrder(const QString& names)
{
- set(m_Settings, "Settings", "language", name);
+ set(m_Settings, "Geometry", "mod_info_tab_order", names);
}
-void Settings::setDownloadSpeed(const QString& name, int bytesPerSecond)
+void GeometrySettings::centerOnMainWindowMonitor(QWidget* w)
{
- auto servers = getServers();
+ const auto monitor = getOptional(
+ m_Settings, "Geometry", "MainWindow_monitor");
- for (auto& server : servers) {
- if (server.name() == name) {
- server.addDownload(bytesPerSecond);
- updateServers(servers);
- return;
+ QPoint center;
+
+ if (monitor && QGuiApplication::screens().size() > *monitor) {
+ center = QGuiApplication::screens().at(*monitor)->geometry().center();
+ } else {
+ center = QGuiApplication::primaryScreen()->geometry().center();
+ }
+
+ w->move(center - w->rect().center());
+}
+
+void GeometrySettings::saveMainWindowMonitor(const QMainWindow* w)
+{
+ if (auto* handle=w->windowHandle()) {
+ if (auto* screen = handle->screen()) {
+ const int screenId = QGuiApplication::screens().indexOf(screen);
+ set(m_Settings, "Geometry", "MainWindow_monitor", screenId);
}
}
+}
- log::error(
- "server '{}' not found while trying to add a download with bps {}",
- name, bytesPerSecond);
+Qt::Orientation dockOrientation(const QMainWindow* mw, const QDockWidget* d)
+{
+ // docks in these areas are horizontal
+ const auto horizontalAreas =
+ Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea;
+
+ if (mw->dockWidgetArea(const_cast(d)) & horizontalAreas) {
+ return Qt::Horizontal;
+ } else {
+ return Qt::Vertical;
+ }
}
-ServerList Settings::getServers() const
+void GeometrySettings::saveDocks(const QMainWindow* mw)
{
- // servers used to be a map of byte arrays until 2.2.1, it's now an array of
- // individual values instead
+ // this attempts to fix https://bugreports.qt.io/browse/QTBUG-46620 where dock
+ // sizes are not restored when the main window is maximized; it is used in
+ // MainWindow::readSettings() and MainWindow::storeSettings()
+ //
+ // there's also https://stackoverflow.com/questions/44005852, which has what
+ // seems to be a popular fix, but it breaks the restored size of the window
+ // by setting it to the desktop's resolution, so that doesn't work
+ //
+ // the only fix I could find is to remember the sizes of the docks and manually
+ // setting them back; saving is straightforward, but restoring is messy
+ //
+ // this also depends on the window being visible before the timer in restore()
+ // is fired and the timer must be processed by application.exec(); therefore,
+ // the splash screen _must_ be closed before readSettings() is called, because
+ // it has its own event loop, which seems to interfere with this
+ //
+ // all of this should become unnecessary when QTBUG-46620 is fixed
//
- // so post 2.2.1, only one key is returned: "size", the size of the arrays;
- // in 2.2.1, one key per server is returned
- {
- const QStringList keys = ScopedGroup(m_Settings, "Servers").keys();
- if (!keys.empty() && keys[0] != "size") {
- // old format
- return getServersFromOldMap();
+ // saves the size of each dock
+ for (const auto* dock : mw->findChildren()) {
+ int size = 0;
+
+ // save the width for horizontal docks, or the height for vertical
+ if (dockOrientation(mw, dock) == Qt::Horizontal) {
+ size = dock->size().width();
+ } else {
+ size = dock->size().height();
}
+
+ set(m_Settings, "Geometry", dockSettingName(dock), size);
}
+}
+void GeometrySettings::restoreDocks(QMainWindow* mw) const
+{
+ struct DockInfo
+ {
+ QDockWidget* d;
+ int size = 0;
+ Qt::Orientation ori;
+ };
- // post 2.2.1 format, array of values
+ std::vector dockInfos;
- ServerList list;
+ // for each dock
+ for (auto* dock : mw->findChildren()) {
+ if (auto size=getOptional(m_Settings, "Geometry", dockSettingName(dock))) {
+ // remember this dock, its size and orientation
+ dockInfos.push_back({dock, *size, dockOrientation(mw, dock)});
+ }
+ }
- {
- ScopedReadArray sra(m_Settings, "Servers");
+ // the main window must have had time to process the settings from
+ // readSettings() or it seems to override whatever is set here
+ //
+ // some people said a single processEvents() call is enough, but it doesn't
+ // look like it
+ QTimer::singleShot(5, [=] {
+ for (const auto& info : dockInfos) {
+ mw->resizeDocks({info.d}, {info.size}, info.ori);
+ }
+ });
+}
- sra.for_each([&] {
- ServerInfo::SpeedList lastDownloads;
- const auto lastDownloadsString = sra.get("lastDownloads", "");
+WidgetSettings::WidgetSettings(QSettings& s)
+ : m_Settings(s)
+{
+ MOBase::QuestionBoxMemory::setCallbacks(
+ [this](auto&& w, auto&& f){ return questionButton(w, f); },
+ [this](auto&& w, auto&& b){ setQuestionWindowButton(w, b); },
+ [this](auto&& w, auto&& f, auto&& b){ setQuestionFileButton(w, f, b); });
+}
- for (const auto& s : lastDownloadsString.split(" ")) {
- const auto bytesPerSecond = s.toInt();
- if (bytesPerSecond > 0) {
- lastDownloads.push_back(bytesPerSecond);
- }
- }
+std::optional WidgetSettings::index(const QComboBox* cb) const
+{
+ return getOptional(m_Settings, "Widgets", indexSettingName(cb));
+}
- ServerInfo server(
- sra.get("name", ""),
- sra.get("premium", false),
- QDate::fromString(sra.get("lastSeen", ""), Qt::ISODate),
- sra.get("preferred", 0),
- lastDownloads);
+void WidgetSettings::saveIndex(const QComboBox* cb)
+{
+ set(m_Settings, "Widgets", indexSettingName(cb), cb->currentIndex());
+}
- list.add(std::move(server));
- });
+void WidgetSettings::restoreIndex(QComboBox* cb, std::optional def) const
+{
+ if (auto v=getOptional(m_Settings, "Widgets", indexSettingName(cb), def)) {
+ cb->setCurrentIndex(*v);
}
-
- return list;
}
-ServerList Settings::getServersFromOldMap() const
+std::optional WidgetSettings::index(const QTabWidget* w) const
{
- // for 2.2.1 and before
+ return getOptional(m_Settings, "Widgets", indexSettingName(w));
+}
- ServerList list;
- const ScopedGroup sg(m_Settings, "Servers");
+void WidgetSettings::saveIndex(const QTabWidget* w)
+{
+ set(m_Settings, "Widgets", indexSettingName(w), w->currentIndex());
+}
- sg.for_each([&](auto&& serverKey) {
- QVariantMap data = sg.get(serverKey);
+void WidgetSettings::restoreIndex(QTabWidget* w, std::optional def) const
+{
+ if (auto v=getOptional(m_Settings, "Widgets", indexSettingName(w), def)) {
+ w->setCurrentIndex(*v);
+ }
+}
- ServerInfo server(
- serverKey,
- data["premium"].toBool(),
- data["lastSeen"].toDate(),
- data["preferred"].toInt(),
- {});
+std::optional WidgetSettings::checked(const QAbstractButton* w) const
+{
+ warnIfNotCheckable(w);
+ return getOptional(m_Settings, "Widgets", checkedSettingName(w));
+}
- // ignoring download count and speed, it's now a list of values instead of
- // a total
+void WidgetSettings::saveChecked(const QAbstractButton* w)
+{
+ warnIfNotCheckable(w);
+ set(m_Settings, "Widgets", checkedSettingName(w), w->isChecked());
+}
- list.add(std::move(server));
- });
+void WidgetSettings::restoreChecked(QAbstractButton* w, std::optional def) const
+{
+ warnIfNotCheckable(w);
- return list;
+ if (auto v=getOptional(m_Settings, "Widgets", checkedSettingName(w), def)) {
+ w->setChecked(*v);
+ }
}
-void Settings::updateServers(ServerList servers)
+QuestionBoxMemory::Button WidgetSettings::questionButton(
+ const QString& windowName, const QString& filename) const
{
- // clean up unavailable servers
- servers.cleanup();
-
- removeSection(m_Settings, "Servers");
+ const QString sectionName("DialogChoices");
- {
- ScopedWriteArray swa(m_Settings, "Servers");
+ if (!filename.isEmpty()) {
+ const auto fileSetting = windowName + "/" + filename;
+ if (auto v=getOptional(m_Settings, sectionName, filename)) {
+ return static_cast(*v);
+ }
+ }
- for (const auto& server : servers) {
- swa.next();
+ if (auto v=getOptional(m_Settings, sectionName, windowName)) {
+ return static_cast(*v);
+ }
- swa.set("name", server.name());
- swa.set("premium", server.isPremium());
- swa.set("lastSeen", server.lastSeen().toString(Qt::ISODate));
- swa.set("preferred", server.preferred());
+ return QuestionBoxMemory::NoButton;
+}
- QString lastDownloads;
- for (const auto& speed : server.lastDownloads()) {
- if (speed > 0) {
- lastDownloads += QString("%1 ").arg(speed);
- }
- }
+void WidgetSettings::setQuestionWindowButton(
+ const QString& windowName, QuestionBoxMemory::Button button)
+{
+ const QString sectionName("DialogChoices");
- swa.set("lastDownloads", lastDownloads.trimmed());
- }
+ if (button == QuestionBoxMemory::NoButton) {
+ remove(m_Settings, sectionName, windowName);
+ } else {
+ set(m_Settings, sectionName, windowName, button);
}
}
-std::map Settings::getRecentDirectories() const
+void WidgetSettings::setQuestionFileButton(
+ const QString& windowName, const QString& filename,
+ QuestionBoxMemory::Button button)
{
- std::map map;
+ const QString sectionName("DialogChoices");
+ const QString settingName(windowName + "/" + filename);
- ScopedReadArray sra(m_Settings, "RecentDirectories");
+ if (button == QuestionBoxMemory::NoButton) {
+ remove(m_Settings, sectionName, settingName);
+ } else {
+ set(m_Settings, sectionName, settingName, button);
+ }
+}
- sra.for_each([&] {
- const QVariant name = sra.get("name");
- const QVariant dir = sra.get("directory");
+void WidgetSettings::resetQuestionButtons()
+{
+ removeSection(m_Settings, "DialogChoices");
+}
- if (name.isValid() && dir.isValid()) {
- map.emplace(name.toString(), dir.toString());
- }
- });
- return map;
+ColorSettings::ColorSettings(QSettings& s)
+ : m_Settings(s)
+{
}
-void Settings::setRecentDirectories(const std::map& map)
+QColor ColorSettings::modlistOverwrittenLoose() const
{
- removeSection(m_Settings, "RecentDirectories");
+ return get(
+ m_Settings, "Settings", "overwrittenLooseFilesColor",
+ QColor(0, 255, 0, 64));
+}
- ScopedWriteArray swa(m_Settings, "recentDirectories");
+void ColorSettings::setModlistOverwrittenLoose(const QColor& c)
+{
+ set(m_Settings, "Settings", "overwrittenLooseFilesColor", c);
+}
- for (auto&& p : map) {
- swa.next();
+QColor ColorSettings::modlistOverwritingLoose() const
+{
+ return get(
+ m_Settings, "Settings", "overwritingLooseFilesColor",
+ QColor(255, 0, 0, 64));
+}
- swa.set("name", p.first);
- swa.set("directory", p.second);
- }
+void ColorSettings::setModlistOverwritingLoose(const QColor& c)
+{
+ set(m_Settings, "Settings", "overwritingLooseFilesColor", c);
}
-std::vector> Settings::getExecutables() const
+QColor ColorSettings::modlistOverwrittenArchive() const
{
- ScopedReadArray sra(m_Settings, "customExecutables");
- std::vector> v;
+ return get(
+ m_Settings, "Settings", "overwrittenArchiveFilesColor",
+ QColor(0, 255, 255, 64));
+}
- sra.for_each([&]{
- std::map map;
+void ColorSettings::setModlistOverwrittenArchive(const QColor& c)
+{
+ set(m_Settings, "Settings", "overwrittenArchiveFilesColor", c);
+}
- for (auto&& key : sra.keys()) {
- map[key] = m_Settings.value(key);
- }
+QColor ColorSettings::modlistOverwritingArchive() const
+{
+ return get