From 6892c11e9f287dcfb1e698f8f46233a01fb7abb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sat, 7 Sep 2013 04:00:58 +0200 Subject: Move a good chunk of the singleton objects into a new QApplication subclass. --- logic/BaseInstance.cpp | 3 + logic/IconListModel.cpp | 280 ----------------------------------- logic/IconListModel.h | 41 ----- logic/InstanceLauncher.cpp | 74 +++++++++ logic/InstanceLauncher.h | 28 ++++ logic/LegacyInstance.cpp | 8 +- logic/LegacyUpdate.cpp | 14 +- logic/lists/IconList.cpp | 257 ++++++++++++++++++++++++++++++++ logic/lists/IconList.h | 38 +++++ logic/lists/InstanceList.cpp | 11 +- logic/lists/LwjglVersionList.cpp | 6 +- logic/lists/MinecraftVersionList.cpp | 6 +- logic/net/DownloadJob.cpp | 6 +- logic/net/NetWorker.cpp | 30 ---- logic/net/NetWorker.h | 31 ---- logic/tasks/LoginTask.cpp | 8 +- 16 files changed, 428 insertions(+), 413 deletions(-) delete mode 100644 logic/IconListModel.cpp delete mode 100644 logic/IconListModel.h create mode 100644 logic/InstanceLauncher.cpp create mode 100644 logic/InstanceLauncher.h create mode 100644 logic/lists/IconList.cpp create mode 100644 logic/lists/IconList.h delete mode 100644 logic/net/NetWorker.cpp delete mode 100644 logic/net/NetWorker.h (limited to 'logic') diff --git a/logic/BaseInstance.cpp b/logic/BaseInstance.cpp index bd3229c8..e166449f 100644 --- a/logic/BaseInstance.cpp +++ b/logic/BaseInstance.cpp @@ -18,6 +18,7 @@ #include #include +#include #include "inisettingsobject.h" #include "setting.h" @@ -52,6 +53,8 @@ BaseInstance::BaseInstance( BaseInstancePrivate* d_in, settings().registerSetting(new Setting("UseCustomBaseJar", true)); settings().registerSetting(new Setting("CustomBaseJar", "")); + auto globalSettings = MMC->settings(); + // Java Settings settings().registerSetting(new Setting("OverrideJava", false)); settings().registerSetting(new OverrideSetting("JavaPath", globalSettings->getSetting("JavaPath"))); diff --git a/logic/IconListModel.cpp b/logic/IconListModel.cpp deleted file mode 100644 index 4a5795d6..00000000 --- a/logic/IconListModel.cpp +++ /dev/null @@ -1,280 +0,0 @@ -#include "IconListModel.h" -#include -#include -#include -#include -#include -#include -#define MAX_SIZE 1024 -IconList* IconList::m_Instance = 0; -QMutex IconList::mutex; - -struct entry -{ - QString key; - QString name; - QIcon icon; - bool is_builtin; - QString filename; -}; - -class Private : public QObject -{ - Q_OBJECT -public: - QMap index; - QVector icons; - Private() - { - } -}; - - -IconList::IconList() : QAbstractListModel(), d(new Private()) -{ - QDir instance_icons(":/icons/instances/"); - auto file_info_list = instance_icons.entryInfoList(QDir::Files, QDir::Name); - for(auto file_info: file_info_list) - { - QString key = file_info.baseName(); - addIcon(key, key, file_info.absoluteFilePath(), true); - } - - // FIXME: get from settings - ensureFolderPathExists("icons"); - QDir user_icons("icons"); - file_info_list = user_icons.entryInfoList(QDir::Files, QDir::Name); - for(auto file_info: file_info_list) - { - QString filename = file_info.absoluteFilePath(); - QString key = file_info.baseName(); - addIcon(key, key, filename); - } -} - -IconList::~IconList() -{ - delete d; - d = nullptr; -} - -QStringList IconList::mimeTypes() const -{ - QStringList types; - types << "text/uri-list"; - return types; -} -Qt::DropActions IconList::supportedDropActions() const -{ - return Qt::CopyAction; -} - -bool IconList::dropMimeData ( const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent ) -{ - if (action == Qt::IgnoreAction) - return true; - // check if the action is supported - if (!data || !(action & supportedDropActions())) - return false; - - // files dropped from outside? - if(data->hasUrls()) - { - /* - bool was_watching = is_watching; - if(was_watching) - stopWatching(); - */ - auto urls = data->urls(); - QStringList iconFiles; - for(auto url: urls) - { - // only local files may be dropped... - if(!url.isLocalFile()) - continue; - iconFiles += url.toLocalFile(); - } - installIcons(iconFiles); - /* - if(was_watching) - startWatching(); - */ - return true; - } - return false; -} - -Qt::ItemFlags IconList::flags ( const QModelIndex& index ) const -{ - Qt::ItemFlags defaultFlags = QAbstractListModel::flags ( index ); - if (index.isValid()) - return Qt::ItemIsDropEnabled | defaultFlags; - else - return Qt::ItemIsDropEnabled | defaultFlags; -} - -QVariant IconList::data ( const QModelIndex& index, int role ) const -{ - if(!index.isValid()) - return QVariant(); - - int row = index.row(); - - if(row < 0 || row >= d->icons.size()) - return QVariant(); - - switch(role) - { - case Qt::DecorationRole: - return d->icons[row].icon; - case Qt::DisplayRole: - return d->icons[row].name; - case Qt::UserRole: - return d->icons[row].key; - default: - return QVariant(); - } -} - -int IconList::rowCount ( const QModelIndex& parent ) const -{ - return d->icons.size(); -} - -void IconList::installIcons ( QStringList iconFiles ) -{ - for(QString file: iconFiles) - { - QFileInfo fileinfo(file); - if(!fileinfo.isReadable() || !fileinfo.isFile()) - continue; - QString target = PathCombine("icons", fileinfo.fileName()); - - QString suffix = fileinfo.suffix(); - if(suffix != "jpeg" && suffix != "png" && suffix != "jpg") - continue; - - if(!QFile::copy(file, target)) - continue; - - QString key = fileinfo.baseName(); - addIcon(key, key, target); - } -} - -bool IconList::deleteIcon ( QString key ) -{ - int iconIdx = getIconIndex(key); - if(iconIdx == -1) - return false; - auto & iconEntry = d->icons[iconIdx]; - if(iconEntry.is_builtin) - return false; - if(QFile::remove(iconEntry.filename)) - { - beginRemoveRows(QModelIndex(), iconIdx, iconIdx); - d->icons.remove(iconIdx); - reindex(); - endRemoveRows(); - } - return true; -} - -bool IconList::addIcon ( QString key, QString name, QString path, bool is_builtin ) -{ - auto iter = d->index.find(key); - if(iter != d->index.end()) - { - if(d->icons[*iter].is_builtin) - return false; - - QIcon icon(path); - if(icon.isNull()) - return false; - - auto & oldOne = d->icons[*iter]; - - if(!QFile::remove(oldOne.filename)) - return false; - - // replace the icon - oldOne = {key, name, icon, is_builtin, path}; - dataChanged(index(*iter),index(*iter)); - return true; - } - else - { - QIcon icon(path); - if(icon.isNull()) return false; - - // add a new icon - beginInsertRows(QModelIndex(), d->icons.size(),d->icons.size()); - d->icons.push_back({key, name, icon, is_builtin, path}); - d->index[key] = d->icons.size() - 1; - endInsertRows(); - return true; - } -} - -void IconList::reindex() -{ - d->index.clear(); - int i = 0; - for(auto& iter: d->icons) - { - d->index[iter.key] = i; - i++; - } -} - - -QIcon IconList::getIcon ( QString key ) -{ - int icon_index = getIconIndex(key); - - if(icon_index != -1) - return d->icons[icon_index].icon; - - // Fallback for icons that don't exist. - icon_index = getIconIndex("infinity"); - - if(icon_index != -1) - return d->icons[icon_index].icon; - return QIcon(); -} - -int IconList::getIconIndex ( QString key ) -{ - if(key == "default") - key = "infinity"; - - auto iter = d->index.find(key); - if(iter != d->index.end()) - return *iter; - - - return -1; -} - - -void IconList::drop() -{ - mutex.lock(); - delete m_Instance; - m_Instance = 0; - mutex.unlock(); -} - -IconList* IconList::instance() -{ - if ( !m_Instance ) - { - mutex.lock(); - if ( !m_Instance ) - m_Instance = new IconList; - mutex.unlock(); - } - return m_Instance; -} - -#include "IconListModel.moc" \ No newline at end of file diff --git a/logic/IconListModel.h b/logic/IconListModel.h deleted file mode 100644 index 907dfd81..00000000 --- a/logic/IconListModel.h +++ /dev/null @@ -1,41 +0,0 @@ -#pragma once - -#include -#include -#include - -class Private; - -class IconList : public QAbstractListModel -{ -public: - static IconList* instance(); - static void drop(); - QIcon getIcon ( QString key ); - int getIconIndex ( QString key ); - - virtual QVariant data ( const QModelIndex& index, int role = Qt::DisplayRole ) const; - virtual int rowCount ( const QModelIndex& parent = QModelIndex() ) const; - - bool addIcon(QString key, QString name, QString path, bool is_builtin = false); - bool deleteIcon(QString key); - - virtual QStringList mimeTypes() const; - virtual Qt::DropActions supportedDropActions() const; - virtual bool dropMimeData ( const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent ); - virtual Qt::ItemFlags flags ( const QModelIndex& index ) const; - - void installIcons ( QStringList iconFiles ); - -private: - virtual ~IconList(); - IconList(); - // hide copy constructor - IconList ( const IconList & ) = delete; - // hide assign op - IconList& operator= ( const IconList & ) = delete; - void reindex(); - static IconList* m_Instance; - static QMutex mutex; - Private* d; -}; diff --git a/logic/InstanceLauncher.cpp b/logic/InstanceLauncher.cpp new file mode 100644 index 00000000..312f4c69 --- /dev/null +++ b/logic/InstanceLauncher.cpp @@ -0,0 +1,74 @@ +#include "InstanceLauncher.h" +#include "MultiMC.h" + +#include +#include "gui/logindialog.h" +#include "gui/taskdialog.h" +#include "gui/consolewindow.h" +#include "logic/tasks/LoginTask.h" +#include "logic/MinecraftProcess.h" +#include "lists/InstanceList.h" + + +InstanceLauncher::InstanceLauncher ( QString instId ) + :QObject(), instId ( instId ) +{} + +void InstanceLauncher::onTerminated() +{ + std::cout << "Minecraft exited" << std::endl; + MMC->quit(); +} + +void InstanceLauncher::onLoginComplete() +{ + LoginTask * task = ( LoginTask * ) QObject::sender(); + auto result = task->getResult(); + auto instance = MMC->instances()->getInstanceById(instId); + proc = instance->prepareForLaunch ( result.username, result.sessionID ); + if ( !proc ) + { + //FIXME: report error + return; + } + console = new ConsoleWindow(); + console->show(); + + connect ( proc, SIGNAL ( ended() ), SLOT ( onTerminated() ) ); + connect ( proc, SIGNAL ( log ( QString,MessageLevel::Enum ) ), console, SLOT ( write ( QString,MessageLevel::Enum ) ) ); + + proc->launch(); +} + +void InstanceLauncher::doLogin ( const QString& errorMsg ) +{ + LoginDialog* loginDlg = new LoginDialog ( nullptr, errorMsg ); + loginDlg->exec(); + if ( loginDlg->result() == QDialog::Accepted ) + { + UserInfo uInfo {loginDlg->getUsername(), loginDlg->getPassword() }; + + TaskDialog* tDialog = new TaskDialog ( nullptr ); + LoginTask* loginTask = new LoginTask ( uInfo, tDialog ); + connect ( loginTask, SIGNAL ( succeeded() ),SLOT ( onLoginComplete() ), Qt::QueuedConnection ); + connect ( loginTask, SIGNAL ( failed ( QString ) ),SLOT ( doLogin ( QString ) ), Qt::QueuedConnection ); + tDialog->exec ( loginTask ); + } + //onLoginComplete(LoginResponse("Offline","Offline", 1)); +} + +int InstanceLauncher::launch() +{ + std::cout << "Launching Instance '" << qPrintable ( instId ) << "'" << std::endl; + auto instance = MMC->instances()->getInstanceById(instId); + if ( instance.isNull() ) + { + std::cout << "Could not find instance requested. note that you have to specify the ID, not the NAME" << std::endl; + return 1; + } + + std::cout << "Logging in..." << std::endl; + doLogin ( "" ); + + return MMC->exec(); +} diff --git a/logic/InstanceLauncher.h b/logic/InstanceLauncher.h new file mode 100644 index 00000000..de93e3d7 --- /dev/null +++ b/logic/InstanceLauncher.h @@ -0,0 +1,28 @@ +#pragma once + +#include + +class MinecraftProcess; +class ConsoleWindow; + +// Commandline instance launcher +class InstanceLauncher : public QObject +{ + Q_OBJECT + +private: + QString instId; + MinecraftProcess *proc; + ConsoleWindow *console; + +public: + InstanceLauncher(QString instId); + +private slots: + void onTerminated(); + void onLoginComplete(); + void doLogin(const QString &errorMsg); + +public: + int launch(); +}; diff --git a/logic/LegacyInstance.cpp b/logic/LegacyInstance.cpp index 124cdfcb..0672d2c8 100644 --- a/logic/LegacyInstance.cpp +++ b/logic/LegacyInstance.cpp @@ -2,7 +2,7 @@ #include "LegacyInstance_p.h" #include "MinecraftProcess.h" #include "LegacyUpdate.h" -#include "IconListModel.h" +#include "lists/IconList.h" #include #include #include @@ -10,6 +10,7 @@ #include #include #include +#include #define LAUNCHER_FILE "MultiMCLauncher.jar" @@ -32,8 +33,7 @@ MinecraftProcess* LegacyInstance::prepareForLaunch(QString user, QString session { MinecraftProcess * proc = new MinecraftProcess(this); - IconList * list = IconList::instance(); - QIcon icon = list->getIcon(iconKey()); + QIcon icon = MMC->icons()->getIcon(iconKey()); auto pixmap = icon.pixmap(128,128); pixmap.save(PathCombine(minecraftRoot(), "icon.png"),"PNG"); @@ -66,7 +66,7 @@ MinecraftProcess* LegacyInstance::prepareForLaunch(QString user, QString session args << QString("-Xdock:name=\"%1\"").arg(windowTitle); #endif - QString lwjgl = QDir(globalSettings->get("LWJGLDir").toString() + "/" + lwjglVersion()).absolutePath(); + QString lwjgl = QDir(MMC->settings()->get("LWJGLDir").toString() + "/" + lwjglVersion()).absolutePath(); // launcher arguments args << QString("-Xms%1m").arg(settings().get("MinMemAlloc").toInt()); diff --git a/logic/LegacyUpdate.cpp b/logic/LegacyUpdate.cpp index 3d286373..626ad1e0 100644 --- a/logic/LegacyUpdate.cpp +++ b/logic/LegacyUpdate.cpp @@ -3,7 +3,7 @@ #include "lists/MinecraftVersionList.h" #include "BaseInstance.h" #include "LegacyInstance.h" -#include "net/NetWorker.h" +#include "MultiMC.h" #include "ModList.h" #include #include @@ -52,15 +52,15 @@ void LegacyUpdate::lwjglStart() QString url = version->url(); QUrl realUrl(url); QString hostname = realUrl.host(); - auto &worker = NetWorker::qnam(); + auto worker = MMC->qnam(); QNetworkRequest req(realUrl); req.setRawHeader("Host", hostname.toLatin1()); req.setHeader(QNetworkRequest::UserAgentHeader, "Wget/1.14 (linux-gnu)"); - QNetworkReply * rep = worker.get ( req ); + QNetworkReply * rep = worker->get ( req ); m_reply = QSharedPointer (rep, &QObject::deleteLater); connect(rep, SIGNAL(downloadProgress(qint64,qint64)), SLOT(updateDownloadProgress(qint64,qint64))); - connect(&worker, SIGNAL(finished(QNetworkReply*)), SLOT(lwjglFinished(QNetworkReply*))); + connect(worker, SIGNAL(finished(QNetworkReply*)), SLOT(lwjglFinished(QNetworkReply*))); //connect(rep, SIGNAL(error(QNetworkReply::NetworkError)), SLOT(downloadError(QNetworkReply::NetworkError))); } @@ -77,13 +77,13 @@ void LegacyUpdate::lwjglFinished(QNetworkReply* reply) "\nSometimes you have to wait a bit if you download many LWJGL versions in a row. YMMV"); return; } - auto &worker = NetWorker::qnam(); + auto *worker = MMC->qnam(); //Here i check if there is a cookie for me in the reply and extract it QList cookies = qvariant_cast>(reply->header(QNetworkRequest::SetCookieHeader)); if(cookies.count() != 0) { //you must tell which cookie goes with which url - worker.cookieJar()->setCookiesFromUrl(cookies, QUrl("sourceforge.net")); + worker->cookieJar()->setCookiesFromUrl(cookies, QUrl("sourceforge.net")); } //here you can check for the 302 or whatever other header i need @@ -96,7 +96,7 @@ void LegacyUpdate::lwjglFinished(QNetworkReply* reply) QNetworkRequest req(redirectedTo); req.setRawHeader("Host", hostname.toLatin1()); req.setHeader(QNetworkRequest::UserAgentHeader, "Wget/1.14 (linux-gnu)"); - QNetworkReply * rep = worker.get(req); + QNetworkReply * rep = worker->get(req); connect(rep, SIGNAL(downloadProgress(qint64,qint64)), SLOT(updateDownloadProgress(qint64,qint64))); m_reply = QSharedPointer (rep, &QObject::deleteLater); return; diff --git a/logic/lists/IconList.cpp b/logic/lists/IconList.cpp new file mode 100644 index 00000000..6988d02f --- /dev/null +++ b/logic/lists/IconList.cpp @@ -0,0 +1,257 @@ +#include "IconList.h" +#include +#include +#include +#include +#include +#include +#define MAX_SIZE 1024 + +struct entry +{ + QString key; + QString name; + QIcon icon; + bool is_builtin; + QString filename; +}; + +class Private : public QObject +{ + Q_OBJECT +public: + QMap index; + QVector icons; + Private() + { + } +}; + + +IconList::IconList() : QAbstractListModel(), d(new Private()) +{ + QDir instance_icons(":/icons/instances/"); + auto file_info_list = instance_icons.entryInfoList(QDir::Files, QDir::Name); + for(auto file_info: file_info_list) + { + QString key = file_info.baseName(); + addIcon(key, key, file_info.absoluteFilePath(), true); + } + + // FIXME: get from settings + ensureFolderPathExists("icons"); + QDir user_icons("icons"); + file_info_list = user_icons.entryInfoList(QDir::Files, QDir::Name); + for(auto file_info: file_info_list) + { + QString filename = file_info.absoluteFilePath(); + QString key = file_info.baseName(); + addIcon(key, key, filename); + } +} + +IconList::~IconList() +{ + delete d; + d = nullptr; +} + +QStringList IconList::mimeTypes() const +{ + QStringList types; + types << "text/uri-list"; + return types; +} +Qt::DropActions IconList::supportedDropActions() const +{ + return Qt::CopyAction; +} + +bool IconList::dropMimeData ( const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent ) +{ + if (action == Qt::IgnoreAction) + return true; + // check if the action is supported + if (!data || !(action & supportedDropActions())) + return false; + + // files dropped from outside? + if(data->hasUrls()) + { + /* + bool was_watching = is_watching; + if(was_watching) + stopWatching(); + */ + auto urls = data->urls(); + QStringList iconFiles; + for(auto url: urls) + { + // only local files may be dropped... + if(!url.isLocalFile()) + continue; + iconFiles += url.toLocalFile(); + } + installIcons(iconFiles); + /* + if(was_watching) + startWatching(); + */ + return true; + } + return false; +} + +Qt::ItemFlags IconList::flags ( const QModelIndex& index ) const +{ + Qt::ItemFlags defaultFlags = QAbstractListModel::flags ( index ); + if (index.isValid()) + return Qt::ItemIsDropEnabled | defaultFlags; + else + return Qt::ItemIsDropEnabled | defaultFlags; +} + +QVariant IconList::data ( const QModelIndex& index, int role ) const +{ + if(!index.isValid()) + return QVariant(); + + int row = index.row(); + + if(row < 0 || row >= d->icons.size()) + return QVariant(); + + switch(role) + { + case Qt::DecorationRole: + return d->icons[row].icon; + case Qt::DisplayRole: + return d->icons[row].name; + case Qt::UserRole: + return d->icons[row].key; + default: + return QVariant(); + } +} + +int IconList::rowCount ( const QModelIndex& parent ) const +{ + return d->icons.size(); +} + +void IconList::installIcons ( QStringList iconFiles ) +{ + for(QString file: iconFiles) + { + QFileInfo fileinfo(file); + if(!fileinfo.isReadable() || !fileinfo.isFile()) + continue; + QString target = PathCombine("icons", fileinfo.fileName()); + + QString suffix = fileinfo.suffix(); + if(suffix != "jpeg" && suffix != "png" && suffix != "jpg") + continue; + + if(!QFile::copy(file, target)) + continue; + + QString key = fileinfo.baseName(); + addIcon(key, key, target); + } +} + +bool IconList::deleteIcon ( QString key ) +{ + int iconIdx = getIconIndex(key); + if(iconIdx == -1) + return false; + auto & iconEntry = d->icons[iconIdx]; + if(iconEntry.is_builtin) + return false; + if(QFile::remove(iconEntry.filename)) + { + beginRemoveRows(QModelIndex(), iconIdx, iconIdx); + d->icons.remove(iconIdx); + reindex(); + endRemoveRows(); + } + return true; +} + +bool IconList::addIcon ( QString key, QString name, QString path, bool is_builtin ) +{ + auto iter = d->index.find(key); + if(iter != d->index.end()) + { + if(d->icons[*iter].is_builtin) + return false; + + QIcon icon(path); + if(icon.isNull()) + return false; + + auto & oldOne = d->icons[*iter]; + + if(!QFile::remove(oldOne.filename)) + return false; + + // replace the icon + oldOne = {key, name, icon, is_builtin, path}; + dataChanged(index(*iter),index(*iter)); + return true; + } + else + { + QIcon icon(path); + if(icon.isNull()) return false; + + // add a new icon + beginInsertRows(QModelIndex(), d->icons.size(),d->icons.size()); + d->icons.push_back({key, name, icon, is_builtin, path}); + d->index[key] = d->icons.size() - 1; + endInsertRows(); + return true; + } +} + +void IconList::reindex() +{ + d->index.clear(); + int i = 0; + for(auto& iter: d->icons) + { + d->index[iter.key] = i; + i++; + } +} + + +QIcon IconList::getIcon ( QString key ) +{ + int icon_index = getIconIndex(key); + + if(icon_index != -1) + return d->icons[icon_index].icon; + + // Fallback for icons that don't exist. + icon_index = getIconIndex("infinity"); + + if(icon_index != -1) + return d->icons[icon_index].icon; + return QIcon(); +} + +int IconList::getIconIndex ( QString key ) +{ + if(key == "default") + key = "infinity"; + + auto iter = d->index.find(key); + if(iter != d->index.end()) + return *iter; + + + return -1; +} + +#include "IconList.moc" \ No newline at end of file diff --git a/logic/lists/IconList.h b/logic/lists/IconList.h new file mode 100644 index 00000000..cad80cdf --- /dev/null +++ b/logic/lists/IconList.h @@ -0,0 +1,38 @@ +#pragma once + +#include +#include +#include + +class Private; + +class IconList : public QAbstractListModel +{ +public: + IconList(); + virtual ~IconList(); + + QIcon getIcon ( QString key ); + int getIconIndex ( QString key ); + + virtual QVariant data ( const QModelIndex& index, int role = Qt::DisplayRole ) const; + virtual int rowCount ( const QModelIndex& parent = QModelIndex() ) const; + + bool addIcon(QString key, QString name, QString path, bool is_builtin = false); + bool deleteIcon(QString key); + + virtual QStringList mimeTypes() const; + virtual Qt::DropActions supportedDropActions() const; + virtual bool dropMimeData ( const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent ); + virtual Qt::ItemFlags flags ( const QModelIndex& index ) const; + + void installIcons ( QStringList iconFiles ); + +private: + // hide copy constructor + IconList ( const IconList & ) = delete; + // hide assign op + IconList& operator= ( const IconList & ) = delete; + void reindex(); + Private* d; +}; diff --git a/logic/lists/InstanceList.cpp b/logic/lists/InstanceList.cpp index 1d13e3f2..b930f781 100644 --- a/logic/lists/InstanceList.cpp +++ b/logic/lists/InstanceList.cpp @@ -22,13 +22,13 @@ #include #include #include +#include +#include "MultiMC.h" #include "logic/lists/InstanceList.h" +#include "logic/lists/IconList.h" #include "logic/BaseInstance.h" #include "logic/InstanceFactory.h" -#include - -#include "pathutils.h" const static int GROUP_FILE_FORMAT_VERSION = 1; @@ -81,9 +81,8 @@ QVariant InstanceList::data ( const QModelIndex& index, int role ) const } case Qt::DecorationRole: { - IconList * ic = IconList::instance(); QString key = pdata->iconKey(); - return ic->getIcon(key); + return MMC->icons()->getIcon(key); } // for now. case KCategorizedSortFilterProxyModel::CategorySortRole: @@ -413,5 +412,3 @@ bool InstanceProxyModel::subSortLessThan (const QModelIndex& left, const QModelI return QString::localeAwareCompare(pdataLeft->name(), pdataRight->name()) < 0; //return pdataLeft->name() < pdataRight->name(); } - -#include "InstanceList.moc" \ No newline at end of file diff --git a/logic/lists/LwjglVersionList.cpp b/logic/lists/LwjglVersionList.cpp index c0854628..d7826a82 100644 --- a/logic/lists/LwjglVersionList.cpp +++ b/logic/lists/LwjglVersionList.cpp @@ -14,7 +14,7 @@ */ #include "LwjglVersionList.h" -#include "logic/net/NetWorker.h" +#include "MultiMC.h" #include @@ -91,8 +91,8 @@ void LWJGLVersionList::loadList() Q_ASSERT_X(!m_loading, "loadList", "list is already loading (m_loading is true)"); setLoading(true); - auto & worker = NetWorker::qnam(); - reply = worker.get(QNetworkRequest(QUrl(RSS_URL))); + auto worker = MMC->qnam(); + reply = worker->get(QNetworkRequest(QUrl(RSS_URL))); connect(reply, SIGNAL(finished()), SLOT(netRequestComplete())); } diff --git a/logic/lists/MinecraftVersionList.cpp b/logic/lists/MinecraftVersionList.cpp index 4444f5b0..42fb1b50 100644 --- a/logic/lists/MinecraftVersionList.cpp +++ b/logic/lists/MinecraftVersionList.cpp @@ -14,7 +14,7 @@ */ #include "MinecraftVersionList.h" -#include +#include #include @@ -151,8 +151,8 @@ MCVListLoadTask::~MCVListLoadTask() void MCVListLoadTask::executeTask() { setStatus("Loading instance version list..."); - auto & worker = NetWorker::qnam(); - vlistReply = worker.get(QNetworkRequest(QUrl(QString(MCVLIST_URLBASE) + "versions.json"))); + auto worker = MMC->qnam(); + vlistReply = worker->get(QNetworkRequest(QUrl(QString(MCVLIST_URLBASE) + "versions.json"))); connect(vlistReply, SIGNAL(finished()), this, SLOT(list_downloaded())); } diff --git a/logic/net/DownloadJob.cpp b/logic/net/DownloadJob.cpp index b87d3dc9..cad9ae72 100644 --- a/logic/net/DownloadJob.cpp +++ b/logic/net/DownloadJob.cpp @@ -1,6 +1,6 @@ #include "DownloadJob.h" #include "pathutils.h" -#include "NetWorker.h" +#include "MultiMC.h" Download::Download (QUrl url, QString target_path, QString expected_md5 ) :Job() @@ -49,8 +49,8 @@ void Download::start() QNetworkRequest request ( m_url ); request.setRawHeader(QString("If-None-Match").toLatin1(), m_expected_md5.toLatin1()); - auto &worker = NetWorker::qnam(); - QNetworkReply * rep = worker.get ( request ); + auto worker = MMC->qnam(); + QNetworkReply * rep = worker->get ( request ); m_reply = QSharedPointer ( rep, &QObject::deleteLater ); connect ( rep, SIGNAL ( downloadProgress ( qint64,qint64 ) ), SLOT ( downloadProgress ( qint64,qint64 ) ) ); diff --git a/logic/net/NetWorker.cpp b/logic/net/NetWorker.cpp deleted file mode 100644 index c5943348..00000000 --- a/logic/net/NetWorker.cpp +++ /dev/null @@ -1,30 +0,0 @@ -#include "NetWorker.h" -#include - -class NetWorker::Private -{ -public: - QNetworkAccessManager manager; -}; - -NetWorker::NetWorker ( QObject* parent ) : QObject ( parent ) -{ - d = new Private(); -} - -QNetworkAccessManager& NetWorker::qnam() -{ - auto & w = worker(); - return w.d->manager; -} - - -NetWorker& NetWorker::worker() -{ - static QThreadStorage storage; - if (!storage.hasLocalData()) - { - storage.setLocalData(new NetWorker()); - } - return *storage.localData(); -} diff --git a/logic/net/NetWorker.h b/logic/net/NetWorker.h deleted file mode 100644 index cf7e72e1..00000000 --- a/logic/net/NetWorker.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - _.ooo-._ - .OOOP _ '. - dOOOO (_) \ - OOOOOb | - OOOOOOb. | - OOOOOOOOb | - YOO(_)OOO / - 'OOOOOY _.' - '""""'' -*/ -#pragma once - -#include -#include - -class NetWorker : public QObject -{ - Q_OBJECT -public: - // for high level access to the sevices (preferred) - static NetWorker &worker(); - // for low-level access to the network manager object - static QNetworkAccessManager &qnam(); -public: - -private: - explicit NetWorker ( QObject* parent = 0 ); - class Private; - Private * d; -}; \ No newline at end of file diff --git a/logic/tasks/LoginTask.cpp b/logic/tasks/LoginTask.cpp index 4e2f0fb7..ad9de7f5 100644 --- a/logic/tasks/LoginTask.cpp +++ b/logic/tasks/LoginTask.cpp @@ -14,7 +14,7 @@ */ #include "LoginTask.h" -#include "logic/net/NetWorker.h" +#include "MultiMC.h" #include @@ -29,8 +29,8 @@ LoginTask::LoginTask( const UserInfo& uInfo, QObject* parent ) : Task(parent), u void LoginTask::executeTask() { setStatus("Logging in..."); - auto & worker = NetWorker::qnam(); - connect(&worker, SIGNAL(finished(QNetworkReply*)), this, SLOT(processNetReply(QNetworkReply*))); + auto worker = MMC->qnam(); + connect(worker, SIGNAL(finished(QNetworkReply*)), this, SLOT(processNetReply(QNetworkReply*))); QUrl loginURL("https://login.minecraft.net/"); QNetworkRequest netRequest(loginURL); @@ -41,7 +41,7 @@ void LoginTask::executeTask() params.addQueryItem("password", uInfo.password); params.addQueryItem("version", "13"); - netReply = worker.post(netRequest, params.query(QUrl::EncodeSpaces).toUtf8()); + netReply = worker->post(netRequest, params.query(QUrl::EncodeSpaces).toUtf8()); } void LoginTask::processNetReply(QNetworkReply *reply) -- cgit v1.2.3