From 8b952b387041341f556edcf0bb34576a2fc88568 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sun, 6 Nov 2016 21:58:54 +0100 Subject: NOISSUE Refactor and sanitize MultiMC startup/shutdown * Always create main window. * Properly handle netowrk manager - it was created twice, leading to potential crashes. --- api/logic/Env.cpp | 121 ++++++++++++++++++------------------------------------ 1 file changed, 41 insertions(+), 80 deletions(-) (limited to 'api/logic/Env.cpp') diff --git a/api/logic/Env.cpp b/api/logic/Env.cpp index b8e07343..b769c9c4 100644 --- a/api/logic/Env.cpp +++ b/api/logic/Env.cpp @@ -10,20 +10,30 @@ #include "wonko/WonkoIndex.h" #include + +class Env::Private +{ +public: + QNetworkAccessManager m_qnam; + shared_qobject_ptr m_metacache; + std::shared_ptr m_iconlist; + QMap> m_versionLists; + shared_qobject_ptr m_wonkoIndex; + QString m_wonkoRootUrl; +}; + /* * The *NEW* global rat nest of an object. Handle with care. */ Env::Env() { - m_qnam = std::make_shared(); + d = new Private(); } -void Env::destroy() +Env::~Env() { - m_metacache.reset(); - m_qnam.reset(); - m_versionLists.clear(); + delete d; } Env& Env::Env::getInstance() @@ -32,85 +42,26 @@ Env& Env::Env::getInstance() return instance; } -std::shared_ptr< HttpMetaCache > Env::metacache() +shared_qobject_ptr< HttpMetaCache > Env::metacache() { - Q_ASSERT(m_metacache != nullptr); - return m_metacache; + return d->m_metacache; } -std::shared_ptr< QNetworkAccessManager > Env::qnam() +QNetworkAccessManager& Env::qnam() const { - return m_qnam; + return d->m_qnam; } std::shared_ptr Env::icons() { - return m_iconlist; + return d->m_iconlist; } void Env::registerIconList(std::shared_ptr iconlist) { - m_iconlist = iconlist; + d->m_iconlist = iconlist; } -/* -class NullVersion : public BaseVersion -{ - Q_OBJECT -public: - virtual QString name() - { - return "null"; - } - virtual QString descriptor() - { - return "null"; - } - virtual QString typeString() const - { - return "Null"; - } -}; - -class NullTask: public Task -{ - Q_OBJECT -public: - virtual void executeTask() - { - emitFailed(tr("Nothing to do.")); - } -}; - -class NullVersionList: public BaseVersionList -{ - Q_OBJECT -public: - virtual const BaseVersionPtr at(int i) const - { - return std::make_shared(); - } - virtual int count() const - { - return 0; - }; - virtual Task* getLoadTask() - { - return new NullTask; - } - virtual bool isLoaded() - { - return false; - } - virtual void sort() - { - } - virtual void updateListData(QList< BaseVersionPtr >) - { - } -}; -*/ - BaseVersionPtr Env::getVersion(QString component, QString version) { auto list = getVersionList(component); @@ -123,8 +74,8 @@ BaseVersionPtr Env::getVersion(QString component, QString version) std::shared_ptr< BaseVersionList > Env::getVersionList(QString component) { - auto iter = m_versionLists.find(component); - if(iter != m_versionLists.end()) + auto iter = d->m_versionLists.find(component); + if(iter != d->m_versionLists.end()) { return *iter; } @@ -134,21 +85,22 @@ std::shared_ptr< BaseVersionList > Env::getVersionList(QString component) void Env::registerVersionList(QString name, std::shared_ptr< BaseVersionList > vlist) { - m_versionLists[name] = vlist; + d->m_versionLists[name] = vlist; } -std::shared_ptr Env::wonkoIndex() +shared_qobject_ptr Env::wonkoIndex() { - if (!m_wonkoIndex) + if (!d->m_wonkoIndex) { - m_wonkoIndex = std::make_shared(); + d->m_wonkoIndex.reset(new WonkoIndex()); } - return m_wonkoIndex; + return d->m_wonkoIndex; } void Env::initHttpMetaCache() { + auto &m_metacache = d->m_metacache; m_metacache.reset(new HttpMetaCache("metacache")); m_metacache->addBase("asset_indexes", QDir("assets/indexes").absolutePath()); m_metacache->addBase("asset_objects", QDir("assets/objects").absolutePath()); @@ -192,8 +144,7 @@ void Env::updateProxySettings(QString proxyTypeStr, QString addr, int port, QStr qDebug() << "Detecting proxy settings..."; QNetworkProxy proxy = QNetworkProxy::applicationProxy(); - if (m_qnam.get()) - m_qnam->setProxy(proxy); + d->m_qnam.setProxy(proxy); QString proxyDesc; if (proxy.type() == QNetworkProxy::NoProxy) { @@ -229,4 +180,14 @@ void Env::updateProxySettings(QString proxyTypeStr, QString addr, int port, QStr qDebug() << proxyDesc; } -#include "Env.moc" +QString Env::wonkoRootUrl() const +{ + return d->m_wonkoRootUrl; +} + +void Env::setWonkoRootUrl(const QString& url) +{ + d->m_wonkoRootUrl = url; +} + +#include "Env.moc" \ No newline at end of file -- cgit v1.2.3