From 6d034bda825c506bede7bf0229f47095222edfc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Tue, 5 Dec 2017 09:52:04 +0100 Subject: [PATCH] GH-2059 fix instance directory not being created on first launch --- api/logic/FolderInstanceProvider.cpp | 9 +++++---- api/logic/InstanceList.cpp | 5 ++--- api/logic/InstanceList.h | 6 +----- application/MultiMC.cpp | 4 ++-- 4 files changed, 10 insertions(+), 14 deletions(-) diff --git a/api/logic/FolderInstanceProvider.cpp b/api/logic/FolderInstanceProvider.cpp index 296b366e..74ac456a 100644 --- a/api/logic/FolderInstanceProvider.cpp +++ b/api/logic/FolderInstanceProvider.cpp @@ -34,12 +34,13 @@ struct WatchLock FolderInstanceProvider::FolderInstanceProvider(SettingsObjectPtr settings, const QString& instDir) : BaseInstanceProvider(settings) { - // Normalize path - m_instDir = QDir(instDir).canonicalPath(); - if (!QDir::current().exists(m_instDir)) + // Create aand normalize path + if (!QDir::current().exists(instDir)) { - QDir::current().mkpath(m_instDir); + QDir::current().mkpath(instDir); } + // NOTE: canonicalPath requires the path to exist. Do not move this above the creation block! + m_instDir = QDir(instDir).canonicalPath(); m_watcher = new QFileSystemWatcher(this); connect(m_watcher, &QFileSystemWatcher::directoryChanged, this, &FolderInstanceProvider::instanceDirContentsChanged); m_watcher->addPath(m_instDir); diff --git a/api/logic/InstanceList.cpp b/api/logic/InstanceList.cpp index 96251b60..d5b71d50 100644 --- a/api/logic/InstanceList.cpp +++ b/api/logic/InstanceList.cpp @@ -26,10 +26,9 @@ #include "FolderInstanceProvider.h" -InstanceList::InstanceList(SettingsObjectPtr globalSettings, const QString &instDir, QObject *parent) - : QAbstractListModel(parent), m_instDir(instDir) +InstanceList::InstanceList(QObject *parent) + : QAbstractListModel(parent) { - m_globalSettings = globalSettings; resumeWatch(); } diff --git a/api/logic/InstanceList.h b/api/logic/InstanceList.h index 89be10de..dceca043 100644 --- a/api/logic/InstanceList.h +++ b/api/logic/InstanceList.h @@ -27,16 +27,14 @@ #include "QObjectPtr.h" -class QFileSystemWatcher; class BaseInstance; -class QDir; class MULTIMC_LOGIC_EXPORT InstanceList : public QAbstractListModel { Q_OBJECT public: - explicit InstanceList(SettingsObjectPtr globalSettings, const QString &instDir, QObject *parent = 0); + explicit InstanceList(QObject *parent = 0); virtual ~InstanceList(); public: @@ -101,9 +99,7 @@ private: protected: int m_watchLevel = 0; QSet m_updatedProviders; - QString m_instDir; QList m_instances; QSet m_groups; - SettingsObjectPtr m_globalSettings; QVector> m_providers; }; diff --git a/application/MultiMC.cpp b/application/MultiMC.cpp index 7fce31d0..e8309ceb 100644 --- a/application/MultiMC.cpp +++ b/application/MultiMC.cpp @@ -584,13 +584,13 @@ MultiMC::MultiMC(int &argc, char **argv) : QApplication(argc, argv) auto InstDirSetting = m_settings->getSetting("InstanceDir"); // instance path: check for problems with '!' in instance path and warn the user in the log // and rememer that we have to show him a dialog when the gui starts (if it does so) - QString instDir = m_settings->get("InstanceDir").toString(); + QString instDir = InstDirSetting->get().toString(); qDebug() << "Instance path : " << instDir; if (FS::checkProblemticPathJava(QDir(instDir))) { qWarning() << "Your instance path contains \'!\' and this is known to cause java problems"; } - m_instances.reset(new InstanceList(m_settings, InstDirSetting->get().toString(), this)); + m_instances.reset(new InstanceList(this)); m_instanceFolder = new FolderInstanceProvider(m_settings, instDir); connect(InstDirSetting.get(), &Setting::SettingChanged, m_instanceFolder, &FolderInstanceProvider::on_InstFolderChanged); m_instances->addInstanceProvider(m_instanceFolder);