From 7179e75e70f4157326d6d97f11a947df576d02e6 Mon Sep 17 00:00:00 2001 From: Graeme Geldenhuys Date: Sun, 12 Dec 2021 00:35:46 +0000 Subject: [PATCH 01/13] Changes required to support FreeBSD --- CMakeLists.txt | 3 ++ launcher/Application.cpp | 2 +- launcher/DesktopServices.cpp | 12 ++--- launcher/FileSystem.cpp | 2 +- launcher/UpdateController.cpp | 2 +- launcher/Version.cpp | 2 +- launcher/install_prereqs.cmake.in | 2 +- launcher/java/JavaUtils.cpp | 4 +- launcher/minecraft/MinecraftInstance.cpp | 4 ++ launcher/minecraft/OpSys.cpp | 4 ++ launcher/minecraft/OpSys.h | 7 +-- launcher/minecraft/launch/ExtractNatives.cpp | 7 +++ .../minecraft/launch/PrintInstanceInfo.cpp | 45 ++++++++++++++++++- launcher/tools/MCEditTool.cpp | 2 +- libraries/iconfix/internal/qiconloader.cpp | 2 +- libraries/systeminfo/src/sys_unix.cpp | 14 ++++++ 16 files changed, 94 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a0a8c5ec..d1c6ac3b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,6 +47,9 @@ if(UNIX AND APPLE) endif() set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Werror=return-type") +# Fix build with Qt 5.13 +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DQT_NO_DEPRECATED_WARNINGS=Y") + ##################################### Set Application options ##################################### ######## Set URLs ######## diff --git a/launcher/Application.cpp b/launcher/Application.cpp index 2d0c81bb..625f99ad 100644 --- a/launcher/Application.cpp +++ b/launcher/Application.cpp @@ -512,7 +512,7 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv) // Set up paths { // Root path is used for updates. -#ifdef Q_OS_LINUX +#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) QDir foo(FS::PathCombine(binPath, "..")); m_rootPath = foo.absolutePath(); #elif defined(Q_OS_WIN32) diff --git a/launcher/DesktopServices.cpp b/launcher/DesktopServices.cpp index 5368ddc8..dcc1b0ce 100644 --- a/launcher/DesktopServices.cpp +++ b/launcher/DesktopServices.cpp @@ -7,7 +7,7 @@ /** * This shouldn't exist, but until QTBUG-9328 and other unreported bugs are fixed, it needs to be a thing. */ -#if defined(Q_OS_LINUX) +#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) #include #include @@ -83,7 +83,7 @@ bool openDirectory(const QString &path, bool ensureExists) { return QDesktopServices::openUrl(QUrl::fromLocalFile(dir.absolutePath())); }; -#if defined(Q_OS_LINUX) +#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) return IndirectOpen(f); #else return f(); @@ -97,7 +97,7 @@ bool openFile(const QString &path) { return QDesktopServices::openUrl(QUrl::fromLocalFile(path)); }; -#if defined(Q_OS_LINUX) +#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) return IndirectOpen(f); #else return f(); @@ -107,7 +107,7 @@ bool openFile(const QString &path) bool openFile(const QString &application, const QString &path, const QString &workingDirectory, qint64 *pid) { qDebug() << "Opening file" << path << "using" << application; -#if defined(Q_OS_LINUX) +#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) // FIXME: the pid here is fake. So if something depends on it, it will likely misbehave return IndirectOpen([&]() { @@ -121,7 +121,7 @@ bool openFile(const QString &application, const QString &path, const QString &wo bool run(const QString &application, const QStringList &args, const QString &workingDirectory, qint64 *pid) { qDebug() << "Running" << application << "with args" << args.join(' '); -#if defined(Q_OS_LINUX) +#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) // FIXME: the pid here is fake. So if something depends on it, it will likely misbehave return IndirectOpen([&]() { @@ -139,7 +139,7 @@ bool openUrl(const QUrl &url) { return QDesktopServices::openUrl(url); }; -#if defined(Q_OS_LINUX) +#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) return IndirectOpen(f); #else return f(); diff --git a/launcher/FileSystem.cpp b/launcher/FileSystem.cpp index 13f05b86..6de20de6 100644 --- a/launcher/FileSystem.cpp +++ b/launcher/FileSystem.cpp @@ -403,7 +403,7 @@ QString getDesktopDir() bool createShortCut(QString location, QString dest, QStringList args, QString name, QString icon) { -#if defined Q_OS_LINUX +#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) location = PathCombine(location, name + ".desktop"); QFile f(location); diff --git a/launcher/UpdateController.cpp b/launcher/UpdateController.cpp index 136e22fd..f9b7d349 100644 --- a/launcher/UpdateController.cpp +++ b/launcher/UpdateController.cpp @@ -93,7 +93,7 @@ void UpdateController::installUpdates() qDebug() << "Installing updates."; #ifdef Q_OS_WIN QString finishCmd = QApplication::applicationFilePath(); -#elif defined Q_OS_LINUX +#elif defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) QString finishCmd = FS::PathCombine(m_root, BuildConfig.LAUNCHER_NAME); #elif defined Q_OS_MAC QString finishCmd = QApplication::applicationFilePath(); diff --git a/launcher/Version.cpp b/launcher/Version.cpp index 6392a50f..b9090e29 100644 --- a/launcher/Version.cpp +++ b/launcher/Version.cpp @@ -78,7 +78,7 @@ void Version::parse() // FIXME: this is bad. versions can contain a lot more separators... QStringList parts = m_string.split('.'); - for (const auto &part : parts) + for (const auto& part : parts) { m_sections.append(Section(part)); } diff --git a/launcher/install_prereqs.cmake.in b/launcher/install_prereqs.cmake.in index e4408d16..f627369c 100644 --- a/launcher/install_prereqs.cmake.in +++ b/launcher/install_prereqs.cmake.in @@ -23,5 +23,5 @@ set(gp_cmd_paths ${gp_cmd_paths} ) include(BundleUtilities) -fixup_bundle("@APPS@" "${QTPLUGINS}" "@DIRS@") + diff --git a/launcher/java/JavaUtils.cpp b/launcher/java/JavaUtils.cpp index 6b58db37..87aee2bf 100644 --- a/launcher/java/JavaUtils.cpp +++ b/launcher/java/JavaUtils.cpp @@ -31,7 +31,7 @@ JavaUtils::JavaUtils() { } -#ifdef Q_OS_LINUX +#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) static QString processLD_LIBRARY_PATH(const QString & LD_LIBRARY_PATH) { QDir mmcBin(QCoreApplication::applicationDirPath()); @@ -83,7 +83,7 @@ QProcessEnvironment CleanEnviroment() qDebug() << "Env: ignoring" << key << value; continue; } -#ifdef Q_OS_LINUX +#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) // Do not pass LD_* variables to java. They were intended for MultiMC if(key.startsWith("LD_")) { diff --git a/launcher/minecraft/MinecraftInstance.cpp b/launcher/minecraft/MinecraftInstance.cpp index 4c16e572..bed25ead 100644 --- a/launcher/minecraft/MinecraftInstance.cpp +++ b/launcher/minecraft/MinecraftInstance.cpp @@ -186,7 +186,11 @@ QString MinecraftInstance::binRoot() const QString MinecraftInstance::getNativePath() const { +#if defined(Q_OS_FREEBSD) + QDir natives_dir("/usr/local/lib/lwjgl/"); +#else QDir natives_dir(FS::PathCombine(instanceRoot(), "natives/")); +#endif return natives_dir.absolutePath(); } diff --git a/launcher/minecraft/OpSys.cpp b/launcher/minecraft/OpSys.cpp index f6a4ed1c..093ec419 100644 --- a/launcher/minecraft/OpSys.cpp +++ b/launcher/minecraft/OpSys.cpp @@ -17,6 +17,8 @@ OpSys OpSys_fromString(QString name) { + if (name == "freebsd") + return Os_FreeBSD; if (name == "linux") return Os_Linux; if (name == "windows") @@ -30,6 +32,8 @@ QString OpSys_toString(OpSys name) { switch (name) { + case Os_FreeBSD: + return "freebsd"; case Os_Linux: return "linux"; case Os_OSX: diff --git a/launcher/minecraft/OpSys.h b/launcher/minecraft/OpSys.h index 63c750b1..c6ed5222 100644 --- a/launcher/minecraft/OpSys.h +++ b/launcher/minecraft/OpSys.h @@ -18,6 +18,7 @@ enum OpSys { Os_Windows, + Os_FreeBSD, Os_Linux, Os_OSX, Os_Other @@ -28,10 +29,10 @@ QString OpSys_toString(OpSys); #ifdef Q_OS_WIN32 #define currentSystem Os_Windows -#else -#ifdef Q_OS_MAC +#elif Q_OS_MAC #define currentSystem Os_OSX +#elif defined Q_OS_FREEBSD +#define currentSystem Os_FreeBSD #else #define currentSystem Os_Linux -#endif #endif \ No newline at end of file diff --git a/launcher/minecraft/launch/ExtractNatives.cpp b/launcher/minecraft/launch/ExtractNatives.cpp index d57499aa..8cd439b1 100644 --- a/launcher/minecraft/launch/ExtractNatives.cpp +++ b/launcher/minecraft/launch/ExtractNatives.cpp @@ -23,6 +23,13 @@ #include "FileSystem.h" #include +#ifdef major + #undef major +#endif +#ifdef minor + #undef minor +#endif + static QString replaceSuffix (QString target, const QString &suffix, const QString &replacement) { if (!target.endsWith(suffix)) diff --git a/launcher/minecraft/launch/PrintInstanceInfo.cpp b/launcher/minecraft/launch/PrintInstanceInfo.cpp index 3da17902..e8fbcb9b 100644 --- a/launcher/minecraft/launch/PrintInstanceInfo.cpp +++ b/launcher/minecraft/launch/PrintInstanceInfo.cpp @@ -19,8 +19,9 @@ #include "PrintInstanceInfo.h" #include -#ifdef Q_OS_LINUX +#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) namespace { +#if defined(Q_OS_LINUX) void probeProcCpuinfo(QStringList &log) { std::ifstream cpuin("/proc/cpuinfo"); @@ -66,7 +67,43 @@ void runLspci(QStringList &log) } pclose(lspci); } +#elif defined(Q_OS_FREEBSD) +void runSysctlHwModel(QStringList &log) +{ + char buff[512]; + FILE *hwmodel = popen("sysctl hw.model", "r"); + while (fgets(buff, 512, hwmodel) != NULL) + { + log << QString::fromUtf8(buff); + break; + } + pclose(hwmodel); +} +void runPciconf(QStringList &log) +{ + char buff[512]; + std::string strcard; + FILE *pciconf = popen("pciconf -lv -a vgapci0", "r"); + while (fgets(buff, 512, pciconf) != NULL) + { + if (strncmp(buff, " vendor", 10) == 0) + { + std::string str(buff); + strcard.append(str.substr(str.find_first_of("'") + 1, str.find_last_not_of("'") - (str.find_first_of("'") + 2))); + strcard.append(" "); + } + else if (strncmp(buff, " device", 10) == 0) + { + std::string str2(buff); + strcard.append(str2.substr(str2.find_first_of("'") + 1, str2.find_last_not_of("'") - (str2.find_first_of("'") + 2))); + } + log << QString::fromStdString(strcard); + break; + } + pclose(pciconf); +} +#endif void runGlxinfo(QStringList & log) { // FIXME: fixed size buffers... @@ -94,10 +131,14 @@ void PrintInstanceInfo::executeTask() auto instance = m_parent->instance(); QStringList log; -#ifdef Q_OS_LINUX +#if defined(Q_OS_LINUX) ::probeProcCpuinfo(log); ::runLspci(log); ::runGlxinfo(log); +#elif defined(Q_OS_FREEBSD) + ::runSysctlHwModel(log); + ::runPciconf(log); + ::runGlxinfo(log); #endif logLines(log, MessageLevel::Launcher); diff --git a/launcher/tools/MCEditTool.cpp b/launcher/tools/MCEditTool.cpp index 880327c7..21e1a3b0 100644 --- a/launcher/tools/MCEditTool.cpp +++ b/launcher/tools/MCEditTool.cpp @@ -52,7 +52,7 @@ QString MCEditTool::getProgramPath() #else const QString mceditPath = path(); QDir mceditDir(mceditPath); -#ifdef Q_OS_LINUX +#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) if (mceditDir.exists("mcedit.sh")) { return mceditDir.absoluteFilePath("mcedit.sh"); diff --git a/libraries/iconfix/internal/qiconloader.cpp b/libraries/iconfix/internal/qiconloader.cpp index 41cf3d50..0d8466f0 100644 --- a/libraries/iconfix/internal/qiconloader.cpp +++ b/libraries/iconfix/internal/qiconloader.cpp @@ -320,7 +320,7 @@ Description: Make it so that the QIcon loader honors /usr/share/pixmaps icon theme specification. Bug: https://bugreports.qt.nokia.com/browse/QTBUG-12874 *********************************************************************/ -#ifdef Q_OS_LINUX +#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) /* Freedesktop standard says to look in /usr/share/pixmaps last */ if (entries.isEmpty()) { diff --git a/libraries/systeminfo/src/sys_unix.cpp b/libraries/systeminfo/src/sys_unix.cpp index fb96c72c..b3098522 100644 --- a/libraries/systeminfo/src/sys_unix.cpp +++ b/libraries/systeminfo/src/sys_unix.cpp @@ -47,6 +47,7 @@ Sys::KernelInfo Sys::getKernelInfo() uint64_t Sys::getSystemRam() { std::string token; +#ifdef Q_OS_LINUX std::ifstream file("/proc/meminfo"); while(file >> token) { @@ -65,6 +66,19 @@ uint64_t Sys::getSystemRam() // ignore rest of the line file.ignore(std::numeric_limits::max(), '\n'); } +#elif defined(Q_OS_FREEBSD) + char buff[512]; + FILE *fp = popen("sysctl hw.physmem", "r"); + if (fp != NULL) + { + while(fgets(buff, 512, fp) != NULL) + { + std::string str(buff); + uint64_t mem = std::stoull(str.substr(12, std::string::npos)); + return mem * 1024ull; + } + } +#endif return 0; // nothing found } From fce98f5e166d20930d71168b967aab3bb2cab82b Mon Sep 17 00:00:00 2001 From: Graeme Geldenhuys Date: Sun, 12 Dec 2021 11:45:58 +0000 Subject: [PATCH 02/13] Fixes compilation error expanding from macro 'major'. --- launcher/minecraft/launch/VerifyJavaInstall.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/launcher/minecraft/launch/VerifyJavaInstall.cpp b/launcher/minecraft/launch/VerifyJavaInstall.cpp index d9f7ecdc..15acf678 100644 --- a/launcher/minecraft/launch/VerifyJavaInstall.cpp +++ b/launcher/minecraft/launch/VerifyJavaInstall.cpp @@ -5,6 +5,13 @@ #include #include +#ifdef major + #undef major +#endif +#ifdef minor + #undef minor +#endif + void VerifyJavaInstall::executeTask() { auto m_inst = std::dynamic_pointer_cast(m_parent->instance()); From 3bc450a6d71f382e2198815a7582619dc7de5fab Mon Sep 17 00:00:00 2001 From: Graeme Geldenhuys Date: Sun, 12 Dec 2021 16:44:48 +0000 Subject: [PATCH 03/13] Restore the previously deleted line. --- launcher/install_prereqs.cmake.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/launcher/install_prereqs.cmake.in b/launcher/install_prereqs.cmake.in index f627369c..e4408d16 100644 --- a/launcher/install_prereqs.cmake.in +++ b/launcher/install_prereqs.cmake.in @@ -23,5 +23,5 @@ set(gp_cmd_paths ${gp_cmd_paths} ) include(BundleUtilities) - +fixup_bundle("@APPS@" "${QTPLUGINS}" "@DIRS@") From 95c9a6d8f411df9aa59303e2a00156d186bfabf7 Mon Sep 17 00:00:00 2001 From: CreeperzEdge Date: Thu, 23 Dec 2021 00:46:23 +1100 Subject: [PATCH 04/13] Use correct title on Java check during setup --- launcher/ui/widgets/JavaSettingsWidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/launcher/ui/widgets/JavaSettingsWidget.cpp b/launcher/ui/widgets/JavaSettingsWidget.cpp index b9d7620c..ed07e082 100644 --- a/launcher/ui/widgets/JavaSettingsWidget.cpp +++ b/launcher/ui/widgets/JavaSettingsWidget.cpp @@ -319,7 +319,7 @@ void JavaSettingsWidget::on_javaStatusBtn_clicked() } CustomMessageBox::selectable( this, - failed ? QObject::tr("Java test success") : QObject::tr("Java test failure"), + failed ? QObject::tr("Java test failure") : QObject::tr("Java test success"), text, failed ? QMessageBox::Critical : QMessageBox::Information )->show(); From 01e4e62de354db05b9536a51e863b3b21a446eb4 Mon Sep 17 00:00:00 2001 From: iGerman00 <36676880+iGerman00@users.noreply.github.com> Date: Tue, 28 Dec 2021 05:59:44 +0500 Subject: [PATCH 05/13] BUILD.md - Clearer differences with binaries Coming from personal inconvenience - I've tried to build this from source, and was faced with Microsoft accounts not working. Upon re-reading the READMEs, I didn't find a reason for it, so I resorted to messaging in the Discord, which, after some back and forth, allowed me to understand that additional private stuff is needed for it to work. The question could've been avoided entirely, in my opinion, if this was included in BUILD.md - the place where anyone intending to build from source will come for guidance. (Not) Secrets should've been linked clearly because it's a crucial piece of info for someone building from source, since normally. I'd expect the source code to fully reflect the pre-built binaries. --- BUILD.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/BUILD.md b/BUILD.md index e41068bd..5f33555b 100644 --- a/BUILD.md +++ b/BUILD.md @@ -15,8 +15,14 @@ MultiMC is a portable application and is not supposed to be installed into any s That would be anything outside your home folder. Before running `make install`, make sure you set the install path to something you have write access to. Never build this under an administrator/root level account. Don't use `sudo`. It won't work and it's not supposed to work. -Also note that this guide is for development purposes only. No support is given for building your own fork or special build for any reason whatsoever. +Also note that this guide is for development purposes only. +**No support is given for building your own fork or special build for any reason whatsoever**. +# Branding, identifying marks and API keys + +The logo and related assets are All Rights Reserved and may only be used in official builds of MultiMC hosted on multimc.org, and as such, are not, and will not be included in this repository. The source is only provided for the purpose of collaboration. + +API keys are necessary for Microsoft account functionality. More info in [(Not) Secrets](https://github.com/MultiMC/Launcher/tree/develop/notsecrets) # Getting the source From f42c3a953c15b01632131435e4885f9acc3b1f1a Mon Sep 17 00:00:00 2001 From: Graeme Geldenhuys Date: Tue, 28 Dec 2021 21:59:24 +0000 Subject: [PATCH 06/13] Restore getNativePath() to its original form. --- launcher/minecraft/MinecraftInstance.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/launcher/minecraft/MinecraftInstance.cpp b/launcher/minecraft/MinecraftInstance.cpp index bed25ead..4c16e572 100644 --- a/launcher/minecraft/MinecraftInstance.cpp +++ b/launcher/minecraft/MinecraftInstance.cpp @@ -186,11 +186,7 @@ QString MinecraftInstance::binRoot() const QString MinecraftInstance::getNativePath() const { -#if defined(Q_OS_FREEBSD) - QDir natives_dir("/usr/local/lib/lwjgl/"); -#else QDir natives_dir(FS::PathCombine(instanceRoot(), "natives/")); -#endif return natives_dir.absolutePath(); } From 6fe07561fe8dc32d61b7c50ed962faa87eba78eb Mon Sep 17 00:00:00 2001 From: Janrupf Date: Wed, 29 Dec 2021 16:54:20 +0100 Subject: [PATCH 07/13] GH-4299 Don't hard crash on when missing network --- launcher/net/NetJob.cpp | 6 ++++++ launcher/net/NetJob.h | 9 --------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/launcher/net/NetJob.cpp b/launcher/net/NetJob.cpp index 9bad89ed..b190b3e9 100644 --- a/launcher/net/NetJob.cpp +++ b/launcher/net/NetJob.cpp @@ -98,6 +98,12 @@ void NetJob::partProgress(int index, qint64 bytesReceived, qint64 bytesTotal) void NetJob::executeTask() { + if(!m_network) { + qCritical() << "Attempted to start NetJob" << objectName() << "without the network set!"; + emitFailed(tr("Internal error: NetJob '%1' has been started without a network pointer!").arg(objectName())); + return; + } + // hack that delays early failures so they can be caught easier QMetaObject::invokeMethod(this, "startMoreParts", Qt::QueuedConnection); } diff --git a/launcher/net/NetJob.h b/launcher/net/NetJob.h index 45b9bc0f..2f272da4 100644 --- a/launcher/net/NetJob.h +++ b/launcher/net/NetJob.h @@ -67,15 +67,6 @@ public slots: virtual bool abort() override; virtual void start(shared_qobject_ptr network) { m_network = network; - start(); - } - -protected slots: - void start() override { - if(!m_network) { - throw "Missing network while trying to start " + objectName(); - return; - } Task::start(); } From be029ab36015bfc19a40e27a42ab10be03e6eea5 Mon Sep 17 00:00:00 2001 From: Janrupf Date: Wed, 29 Dec 2021 17:08:15 +0100 Subject: [PATCH 08/13] GH-4299 Fix screenshot upload --- launcher/net/NetJob.h | 5 +++++ launcher/ui/pages/instance/ScreenshotsPage.cpp | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/launcher/net/NetJob.h b/launcher/net/NetJob.h index 2f272da4..06b23306 100644 --- a/launcher/net/NetJob.h +++ b/launcher/net/NetJob.h @@ -35,6 +35,11 @@ public: } virtual ~NetJob(); + void setNetwork(shared_qobject_ptr network) + { + m_network = network; + } + bool addNetAction(NetAction::Ptr action); NetAction::Ptr operator[](int index) diff --git a/launcher/ui/pages/instance/ScreenshotsPage.cpp b/launcher/ui/pages/instance/ScreenshotsPage.cpp index 06c4379f..3fcc61fa 100644 --- a/launcher/ui/pages/instance/ScreenshotsPage.cpp +++ b/launcher/ui/pages/instance/ScreenshotsPage.cpp @@ -314,6 +314,8 @@ void ScreenshotsPage::on_actionUpload_triggered() m_uploadActive = true; ProgressDialog dialog(this); + + job->setNetwork(APPLICATION->network()); if(dialog.execWithTask(job.get()) != QDialog::Accepted) { CustomMessageBox::selectable(this, tr("Failed to upload screenshots!"), @@ -348,7 +350,9 @@ void ScreenshotsPage::on_actionUpload_triggered() auto albumTask = NetJob::Ptr(new NetJob("Imgur Album Creation")); auto imgurAlbum = ImgurAlbumCreation::make(uploaded); albumTask->addNetAction(imgurAlbum); + job->setNetwork(APPLICATION->network()); task.addTask(job); + albumTask->setNetwork(APPLICATION->network()); task.addTask(albumTask); m_uploadActive = true; ProgressDialog prog(this); From 1f21d84fdc5b8229c15c6a5f1824cf1699783400 Mon Sep 17 00:00:00 2001 From: WhiXard Date: Wed, 29 Dec 2021 21:40:45 +0100 Subject: [PATCH 09/13] Update BUILD.md --- BUILD.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/BUILD.md b/BUILD.md index 5f33555b..ecc46260 100644 --- a/BUILD.md +++ b/BUILD.md @@ -182,11 +182,19 @@ zlib1.dll # macOS ### Install prerequisites: -- Install XCode and set it up to the point where you can build things from a terminal +- Install XCode Command Line tools - Install the official build of CMake (https://cmake.org/download/) - Install JDK 8 (https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html) - Get Qt 5.6 and install it (https://download.qt.io/new_archive/qt/5.6/5.6.3/) +### XCode Command Line tools + +If you don't have XCode CommandLine tools installed, you can install them by using this command in the Terminal App + +```bash +xcode-select --install +``` + ### Build Pick an installation path - this is where the final `.app` will be constructed when you run `make install`. Supply it as the `CMAKE_INSTALL_PREFIX` argument during CMake configuration. From a6e59cb4f43cbe19bf25390dff045202b636c4c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Thu, 30 Dec 2021 17:19:41 +0100 Subject: [PATCH 10/13] NOISSUE detect when user loses entitlements --- launcher/minecraft/auth/Parsers.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/launcher/minecraft/auth/Parsers.cpp b/launcher/minecraft/auth/Parsers.cpp index 4cab78ef..2b189fe4 100644 --- a/launcher/minecraft/auth/Parsers.cpp +++ b/launcher/minecraft/auth/Parsers.cpp @@ -226,6 +226,8 @@ bool parseMinecraftEntitlements(QByteArray & data, MinecraftEntitlement &output) } auto obj = doc.object(); + output.canPlayMinecraft = false; + output.ownsMinecraft = true; auto itemsArray = obj.value("items").toArray(); for(auto item: itemsArray) { From 94fdf13f4a113bb1ffc75a4862308f12c904b2c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Thu, 30 Dec 2021 21:26:29 +0100 Subject: [PATCH 11/13] NOISSUE proper fix for missing profile + demo mode --- launcher/LaunchController.cpp | 63 ++++++++++++---------- launcher/minecraft/MinecraftInstance.cpp | 10 ++-- launcher/minecraft/auth/AuthSession.cpp | 5 ++ launcher/minecraft/auth/AuthSession.h | 4 ++ launcher/minecraft/auth/Parsers.cpp | 2 +- launcher/minecraft/launch/ClaimAccount.cpp | 2 +- 6 files changed, 54 insertions(+), 32 deletions(-) diff --git a/launcher/LaunchController.cpp b/launcher/LaunchController.cpp index be12eb79..7750be1a 100644 --- a/launcher/LaunchController.cpp +++ b/launcher/LaunchController.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include "BuildConfig.h" #include "JavaCommon.h" @@ -145,36 +146,44 @@ void LaunchController::login() { m_session->MakeOffline(usedname); // offline flavored game from here :3 } - if(m_accountToUse->ownsMinecraft() && !m_accountToUse->hasProfile()) { - auto entitlement = m_accountToUse->accountData()->minecraftEntitlement; - QString errorString; - if(!entitlement.canPlayMinecraft) { - errorString = tr("The account does not own Minecraft. You need to purchase the game first to play it."); - QMessageBox::warning( - nullptr, - tr("Missing Minecraft profile"), - errorString, - QMessageBox::StandardButton::Ok, - QMessageBox::StandardButton::Ok - ); - emitFailed(errorString); - return; - } - // Now handle setting up a profile name here... - ProfileSetupDialog dialog(m_accountToUse, m_parentWidget); - if (dialog.exec() == QDialog::Accepted) - { - tryagain = true; - continue; - } - else - { - emitFailed(tr("Received undetermined session status during login.")); - return; + if(m_accountToUse->ownsMinecraft()) { + if(!m_accountToUse->hasProfile()) { + // Now handle setting up a profile name here... + ProfileSetupDialog dialog(m_accountToUse, m_parentWidget); + if (dialog.exec() == QDialog::Accepted) + { + tryagain = true; + continue; + } + else + { + emitFailed(tr("Received undetermined session status during login.")); + return; + } } + // we own Minecraft, there is a profile, it's all ready to go! + launchInstance(); + return; } else { - launchInstance(); + // play demo ? + QMessageBox box(m_parentWidget); + box.setWindowTitle(tr("Play demo?")); + box.setText(tr("This account does not own Minecraft.\nYou need to purchase the game first to play it.\n\nDo you want to play the demo?")); + box.setIcon(QMessageBox::Warning); + auto demoButton = box.addButton(tr("Play Demo"), QMessageBox::ButtonRole::YesRole); + auto cancelButton = box.addButton(tr("Cancel"), QMessageBox::ButtonRole::NoRole); + box.setDefaultButton(cancelButton); + + box.exec(); + if(box.clickedButton() == demoButton) { + // play demo here + m_session->MakeDemo(); + launchInstance(); + } + else { + emitFailed(tr("Launch cancelled - account does not own Minecraft.")); + } } return; } diff --git a/launcher/minecraft/MinecraftInstance.cpp b/launcher/minecraft/MinecraftInstance.cpp index 2526e620..0b3c049b 100644 --- a/launcher/minecraft/MinecraftInstance.cpp +++ b/launcher/minecraft/MinecraftInstance.cpp @@ -431,8 +431,7 @@ QStringList MinecraftInstance::processMinecraftArgs( QMap token_mapping; // yggdrasil! - if(session) - { + if(session) { // token_mapping["auth_username"] = session->username; token_mapping["auth_session"] = session->session; token_mapping["auth_access_token"] = session->access_token; @@ -440,6 +439,9 @@ QStringList MinecraftInstance::processMinecraftArgs( token_mapping["auth_uuid"] = session->uuid; token_mapping["user_properties"] = session->serializeUserProperties(); token_mapping["user_type"] = session->user_type; + if(session->demo) { + args_pattern += " --demo"; + } } // blatant self-promotion. @@ -872,7 +874,9 @@ shared_qobject_ptr MinecraftInstance::createLaunchTask(AuthSessionPt // if we aren't in offline mode,. if(session->status != AuthSession::PlayableOffline) { - process->appendStep(new ClaimAccount(pptr, session)); + if(!session->demo) { + process->appendStep(new ClaimAccount(pptr, session)); + } process->appendStep(new Update(pptr, Net::Mode::Online)); } else diff --git a/launcher/minecraft/auth/AuthSession.cpp b/launcher/minecraft/auth/AuthSession.cpp index d44f9098..6bea74a3 100644 --- a/launcher/minecraft/auth/AuthSession.cpp +++ b/launcher/minecraft/auth/AuthSession.cpp @@ -30,3 +30,8 @@ bool AuthSession::MakeOffline(QString offline_playername) status = PlayableOffline; return true; } + +void AuthSession::MakeDemo() { + player_name = "Player"; + demo = true; +} diff --git a/launcher/minecraft/auth/AuthSession.h b/launcher/minecraft/auth/AuthSession.h index 55fbdf39..a75df506 100644 --- a/launcher/minecraft/auth/AuthSession.h +++ b/launcher/minecraft/auth/AuthSession.h @@ -11,6 +11,7 @@ class QNetworkAccessManager; struct AuthSession { bool MakeOffline(QString offline_playername); + void MakeDemo(); QString serializeUserProperties(); @@ -43,6 +44,9 @@ struct AuthSession bool auth_server_online = false; // Did the user request online mode? bool wants_online = true; + + //Is this a demo session? + bool demo = false; }; typedef std::shared_ptr AuthSessionPtr; diff --git a/launcher/minecraft/auth/Parsers.cpp b/launcher/minecraft/auth/Parsers.cpp index 2b189fe4..ed31e934 100644 --- a/launcher/minecraft/auth/Parsers.cpp +++ b/launcher/minecraft/auth/Parsers.cpp @@ -227,7 +227,7 @@ bool parseMinecraftEntitlements(QByteArray & data, MinecraftEntitlement &output) auto obj = doc.object(); output.canPlayMinecraft = false; - output.ownsMinecraft = true; + output.ownsMinecraft = false; auto itemsArray = obj.value("items").toArray(); for(auto item: itemsArray) { diff --git a/launcher/minecraft/launch/ClaimAccount.cpp b/launcher/minecraft/launch/ClaimAccount.cpp index bb4f6806..1cd7c0da 100644 --- a/launcher/minecraft/launch/ClaimAccount.cpp +++ b/launcher/minecraft/launch/ClaimAccount.cpp @@ -6,7 +6,7 @@ ClaimAccount::ClaimAccount(LaunchTask* parent, AuthSessionPtr session): LaunchStep(parent) { - if(session->status == AuthSession::Status::PlayableOnline) + if(session->status == AuthSession::Status::PlayableOnline && !session->demo) { auto accounts = APPLICATION->accounts(); m_account = accounts->getAccountByProfileName(session->player_name); From 9cc168c5261c6cd0523287e995da58beee8f5096 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Fri, 31 Dec 2021 00:36:25 +0100 Subject: [PATCH 12/13] NOISSUE fix some OS ifdefs --- launcher/minecraft/OpSys.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/launcher/minecraft/OpSys.h b/launcher/minecraft/OpSys.h index c6ed5222..0936f817 100644 --- a/launcher/minecraft/OpSys.h +++ b/launcher/minecraft/OpSys.h @@ -28,11 +28,11 @@ OpSys OpSys_fromString(QString); QString OpSys_toString(OpSys); #ifdef Q_OS_WIN32 -#define currentSystem Os_Windows -#elif Q_OS_MAC -#define currentSystem Os_OSX + #define currentSystem Os_Windows +#elif defined Q_OS_MAC + #define currentSystem Os_OSX #elif defined Q_OS_FREEBSD -#define currentSystem Os_FreeBSD + #define currentSystem Os_FreeBSD #else -#define currentSystem Os_Linux -#endif \ No newline at end of file + #define currentSystem Os_Linux +#endif From 9579231ccc36d9d32f4d5571ced91e8fe7851643 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Fri, 31 Dec 2021 05:27:59 +0100 Subject: [PATCH 13/13] NOISSUE fix build and change how NetJob is used Feed it network upfront... --- launcher/InstanceImportTask.cpp | 8 ++++---- launcher/meta/BaseEntity.cpp | 4 ++-- launcher/minecraft/AssetsUtils.cpp | 4 +++- launcher/minecraft/update/AssetUpdateTask.cpp | 9 ++++++--- launcher/minecraft/update/FMLLibrariesTask.cpp | 4 ++-- launcher/minecraft/update/LibrariesTask.cpp | 4 ++-- .../modplatform/atlauncher/ATLPackInstallTask.cpp | 12 ++++++------ launcher/modplatform/flame/FileResolvingTask.cpp | 4 ++-- launcher/modplatform/legacy_ftb/PackFetchTask.cpp | 8 ++++---- .../modplatform/legacy_ftb/PackInstallTask.cpp | 4 ++-- .../modplatform/modpacksch/FTBPackInstallTask.cpp | 11 +++++------ .../technic/SingleZipPackInstallTask.cpp | 4 ++-- .../modplatform/technic/SolderPackInstallTask.cpp | 12 ++++++------ launcher/net/NetJob.cpp | 6 ------ launcher/net/NetJob.h | 11 +---------- launcher/news/NewsChecker.cpp | 4 ++-- launcher/notifications/NotificationChecker.cpp | 4 ++-- launcher/translations/TranslationsModel.cpp | 8 ++++---- launcher/ui/dialogs/AboutDialog.cpp | 4 ++-- launcher/ui/dialogs/UpdateDialog.cpp | 4 ++-- launcher/ui/pages/instance/ScreenshotsPage.cpp | 15 ++++++++------- .../pages/modplatform/atlauncher/AtlListModel.cpp | 8 ++++---- .../ui/pages/modplatform/flame/FlameModel.cpp | 8 ++++---- launcher/ui/pages/modplatform/flame/FlamePage.cpp | 4 ++-- .../ui/pages/modplatform/ftb/FtbListModel.cpp | 15 +++++++-------- .../ui/pages/modplatform/legacy_ftb/ListModel.cpp | 4 ++-- .../ui/pages/modplatform/technic/TechnicModel.cpp | 8 ++++---- .../ui/pages/modplatform/technic/TechnicPage.cpp | 6 +++--- launcher/updater/DownloadTask.cpp | 8 ++++---- launcher/updater/DownloadTask_test.cpp | 3 ++- launcher/updater/UpdateChecker.cpp | 8 ++++---- 31 files changed, 103 insertions(+), 113 deletions(-) diff --git a/launcher/InstanceImportTask.cpp b/launcher/InstanceImportTask.cpp index d0a63fe3..8cd68d7b 100644 --- a/launcher/InstanceImportTask.cpp +++ b/launcher/InstanceImportTask.cpp @@ -55,14 +55,14 @@ void InstanceImportTask::executeTask() const QString path = m_sourceUrl.host() + '/' + m_sourceUrl.path(); auto entry = APPLICATION->metacache()->resolveEntry("general", path); entry->setStale(true); - m_filesNetJob.reset(new NetJob(tr("Modpack download"))); + m_filesNetJob = new NetJob(tr("Modpack download"), APPLICATION->network()); m_filesNetJob->addNetAction(Net::Download::makeCached(m_sourceUrl, entry)); m_archivePath = entry->getFullPath(); auto job = m_filesNetJob.get(); connect(job, &NetJob::succeeded, this, &InstanceImportTask::downloadSucceeded); connect(job, &NetJob::progress, this, &InstanceImportTask::downloadProgressChanged); connect(job, &NetJob::failed, this, &InstanceImportTask::downloadFailed); - m_filesNetJob->start(APPLICATION->network()); + m_filesNetJob->start(); } } @@ -337,7 +337,7 @@ void InstanceImportTask::processFlame() connect(m_modIdResolver.get(), &Flame::FileResolvingTask::succeeded, [&]() { auto results = m_modIdResolver->getResults(); - m_filesNetJob.reset(new NetJob(tr("Mod download"))); + m_filesNetJob = new NetJob(tr("Mod download"), APPLICATION->network()); for(auto result: results.files) { QString filename = result.fileName; @@ -391,7 +391,7 @@ void InstanceImportTask::processFlame() setProgress(current, total); }); setStatus(tr("Downloading mods...")); - m_filesNetJob->start(APPLICATION->network()); + m_filesNetJob->start(); } ); connect(m_modIdResolver.get(), &Flame::FileResolvingTask::failed, [&](QString reason) diff --git a/launcher/meta/BaseEntity.cpp b/launcher/meta/BaseEntity.cpp index a9d62fcd..84155922 100644 --- a/launcher/meta/BaseEntity.cpp +++ b/launcher/meta/BaseEntity.cpp @@ -117,7 +117,7 @@ void Meta::BaseEntity::load(Net::Mode loadType) { return; } - m_updateTask = new NetJob(QObject::tr("Download of meta file %1").arg(localFilename())); + m_updateTask = new NetJob(QObject::tr("Download of meta file %1").arg(localFilename()), APPLICATION->network()); auto url = this->url(); auto entry = APPLICATION->metacache()->resolveEntry("meta", localFilename()); entry->setStale(true); @@ -140,7 +140,7 @@ void Meta::BaseEntity::load(Net::Mode loadType) m_updateStatus = UpdateStatus::Failed; m_updateTask.reset(); }); - m_updateTask->start(APPLICATION->network()); + m_updateTask->start(); } bool Meta::BaseEntity::isLoaded() const diff --git a/launcher/minecraft/AssetsUtils.cpp b/launcher/minecraft/AssetsUtils.cpp index 1c65a212..7290aeb4 100644 --- a/launcher/minecraft/AssetsUtils.cpp +++ b/launcher/minecraft/AssetsUtils.cpp @@ -29,6 +29,8 @@ #include "net/ChecksumValidator.h" #include "BuildConfig.h" +#include "Application.h" + namespace { QSet collectPathsFromDir(QString dirPath) { @@ -318,7 +320,7 @@ QString AssetObject::getRelPath() NetJob::Ptr AssetsIndex::getDownloadJob() { - auto job = new NetJob(QObject::tr("Assets for %1").arg(id)); + auto job = new NetJob(QObject::tr("Assets for %1").arg(id), APPLICATION->network()); for (auto &object : objects.values()) { auto dl = object.getDownloadAction(); diff --git a/launcher/minecraft/update/AssetUpdateTask.cpp b/launcher/minecraft/update/AssetUpdateTask.cpp index 096e1719..c4bddb08 100644 --- a/launcher/minecraft/update/AssetUpdateTask.cpp +++ b/launcher/minecraft/update/AssetUpdateTask.cpp @@ -24,7 +24,10 @@ void AssetUpdateTask::executeTask() auto assets = profile->getMinecraftAssets(); QUrl indexUrl = assets->url; QString localPath = assets->id + ".json"; - auto job = new NetJob(tr("Asset index for %1").arg(m_inst->name())); + auto job = new NetJob( + tr("Asset index for %1").arg(m_inst->name()), + APPLICATION->network() + ); auto metacache = APPLICATION->metacache(); auto entry = metacache->resolveEntry("asset_indexes", localPath); @@ -43,7 +46,7 @@ void AssetUpdateTask::executeTask() connect(downloadJob.get(), &NetJob::progress, this, &AssetUpdateTask::progress); qDebug() << m_inst->name() << ": Starting asset index download"; - downloadJob->start(APPLICATION->network()); + downloadJob->start(); } bool AssetUpdateTask::canAbort() const @@ -78,7 +81,7 @@ void AssetUpdateTask::assetIndexFinished() connect(downloadJob.get(), &NetJob::succeeded, this, &AssetUpdateTask::emitSucceeded); connect(downloadJob.get(), &NetJob::failed, this, &AssetUpdateTask::assetsFailed); connect(downloadJob.get(), &NetJob::progress, this, &AssetUpdateTask::progress); - downloadJob->start(APPLICATION->network()); + downloadJob->start(); return; } emitSucceeded(); diff --git a/launcher/minecraft/update/FMLLibrariesTask.cpp b/launcher/minecraft/update/FMLLibrariesTask.cpp index a5c6b1e3..58141991 100644 --- a/launcher/minecraft/update/FMLLibrariesTask.cpp +++ b/launcher/minecraft/update/FMLLibrariesTask.cpp @@ -61,7 +61,7 @@ void FMLLibrariesTask::executeTask() // download missing libs to our place setStatus(tr("Downloading FML libraries...")); - auto dljob = new NetJob("FML libraries"); + auto dljob = new NetJob("FML libraries", APPLICATION->network()); auto metacache = APPLICATION->metacache(); for (auto &lib : fmlLibsToProcess) { @@ -74,7 +74,7 @@ void FMLLibrariesTask::executeTask() connect(dljob, &NetJob::failed, this, &FMLLibrariesTask::fmllibsFailed); connect(dljob, &NetJob::progress, this, &FMLLibrariesTask::progress); downloadJob.reset(dljob); - downloadJob->start(APPLICATION->network()); + downloadJob->start(); } bool FMLLibrariesTask::canAbort() const diff --git a/launcher/minecraft/update/LibrariesTask.cpp b/launcher/minecraft/update/LibrariesTask.cpp index 065b4e06..667dd5d9 100644 --- a/launcher/minecraft/update/LibrariesTask.cpp +++ b/launcher/minecraft/update/LibrariesTask.cpp @@ -20,7 +20,7 @@ void LibrariesTask::executeTask() auto components = inst->getPackProfile(); auto profile = components->getProfile(); - auto job = new NetJob(tr("Libraries for instance %1").arg(inst->name())); + auto job = new NetJob(tr("Libraries for instance %1").arg(inst->name()), APPLICATION->network()); downloadJob.reset(job); auto metacache = APPLICATION->metacache(); @@ -65,7 +65,7 @@ void LibrariesTask::executeTask() connect(downloadJob.get(), &NetJob::succeeded, this, &LibrariesTask::emitSucceeded); connect(downloadJob.get(), &NetJob::failed, this, &LibrariesTask::jarlibFailed); connect(downloadJob.get(), &NetJob::progress, this, &LibrariesTask::progress); - downloadJob->start(APPLICATION->network()); + downloadJob->start(); } bool LibrariesTask::canAbort() const diff --git a/launcher/modplatform/atlauncher/ATLPackInstallTask.cpp b/launcher/modplatform/atlauncher/ATLPackInstallTask.cpp index 7352d174..e5db512e 100644 --- a/launcher/modplatform/atlauncher/ATLPackInstallTask.cpp +++ b/launcher/modplatform/atlauncher/ATLPackInstallTask.cpp @@ -58,12 +58,12 @@ bool PackInstallTask::abort() void PackInstallTask::executeTask() { qDebug() << "PackInstallTask::executeTask: " << QThread::currentThreadId(); - auto *netJob = new NetJob("ATLauncher::VersionFetch"); + auto *netJob = new NetJob("ATLauncher::VersionFetch", APPLICATION->network()); auto searchUrl = QString(BuildConfig.ATL_DOWNLOAD_SERVER_URL + "packs/%1/versions/%2/Configs.json") .arg(m_pack).arg(m_version_name); netJob->addNetAction(Net::Download::makeByteArray(QUrl(searchUrl), &response)); jobPtr = netJob; - jobPtr->start(APPLICATION->network()); + jobPtr->start(); QObject::connect(netJob, &NetJob::succeeded, this, &PackInstallTask::onDownloadSucceeded); QObject::connect(netJob, &NetJob::failed, this, &PackInstallTask::onDownloadFailed); @@ -424,7 +424,7 @@ void PackInstallTask::installConfigs() { qDebug() << "PackInstallTask::installConfigs: " << QThread::currentThreadId(); setStatus(tr("Downloading configs...")); - jobPtr.reset(new NetJob(tr("Config download"))); + jobPtr = new NetJob(tr("Config download"), APPLICATION->network()); auto path = QString("Configs/%1/%2.zip").arg(m_pack).arg(m_version_name); auto url = QString(BuildConfig.ATL_DOWNLOAD_SERVER_URL + "packs/%1/versions/%2/Configs.zip") @@ -458,7 +458,7 @@ void PackInstallTask::installConfigs() setProgress(current, total); }); - jobPtr->start(APPLICATION->network()); + jobPtr->start(); } void PackInstallTask::extractConfigs() @@ -508,7 +508,7 @@ void PackInstallTask::downloadMods() setStatus(tr("Downloading mods...")); jarmods.clear(); - jobPtr.reset(new NetJob(tr("Mod download"))); + jobPtr = new NetJob(tr("Mod download"), APPLICATION->network()); for(const auto& mod : m_version.mods) { // skip non-client mods if(!mod.client) continue; @@ -613,7 +613,7 @@ void PackInstallTask::downloadMods() setProgress(current, total); }); - jobPtr->start(APPLICATION->network()); + jobPtr->start(); } void PackInstallTask::onModsDownloaded() { diff --git a/launcher/modplatform/flame/FileResolvingTask.cpp b/launcher/modplatform/flame/FileResolvingTask.cpp index 06f0cf2b..3889a935 100644 --- a/launcher/modplatform/flame/FileResolvingTask.cpp +++ b/launcher/modplatform/flame/FileResolvingTask.cpp @@ -14,7 +14,7 @@ void Flame::FileResolvingTask::executeTask() { setStatus(tr("Resolving mod IDs...")); setProgress(0, m_toProcess.files.size()); - m_dljob = new NetJob("Mod id resolver"); + m_dljob = new NetJob("Mod id resolver", m_network); results.resize(m_toProcess.files.size()); int index = 0; for(auto & file: m_toProcess.files) @@ -27,7 +27,7 @@ void Flame::FileResolvingTask::executeTask() index ++; } connect(m_dljob.get(), &NetJob::finished, this, &Flame::FileResolvingTask::netJobFinished); - m_dljob->start(m_network); + m_dljob->start(); } void Flame::FileResolvingTask::netJobFinished() diff --git a/launcher/modplatform/legacy_ftb/PackFetchTask.cpp b/launcher/modplatform/legacy_ftb/PackFetchTask.cpp index ecf36188..961fe868 100644 --- a/launcher/modplatform/legacy_ftb/PackFetchTask.cpp +++ b/launcher/modplatform/legacy_ftb/PackFetchTask.cpp @@ -12,7 +12,7 @@ void PackFetchTask::fetch() publicPacks.clear(); thirdPartyPacks.clear(); - jobPtr = new NetJob("LegacyFTB::ModpackFetch"); + jobPtr = new NetJob("LegacyFTB::ModpackFetch", m_network); QUrl publicPacksUrl = QUrl(BuildConfig.LEGACY_FTB_CDN_BASE_URL + "static/modpacks.xml"); qDebug() << "Downloading public version info from" << publicPacksUrl.toString(); @@ -25,7 +25,7 @@ void PackFetchTask::fetch() QObject::connect(jobPtr.get(), &NetJob::succeeded, this, &PackFetchTask::fileDownloadFinished); QObject::connect(jobPtr.get(), &NetJob::failed, this, &PackFetchTask::fileDownloadFailed); - jobPtr->start(m_network); + jobPtr->start(); } void PackFetchTask::fetchPrivate(const QStringList & toFetch) @@ -35,7 +35,7 @@ void PackFetchTask::fetchPrivate(const QStringList & toFetch) for (auto &packCode: toFetch) { QByteArray *data = new QByteArray(); - NetJob *job = new NetJob("Fetching private pack"); + NetJob *job = new NetJob("Fetching private pack", m_network); job->addNetAction(Net::Download::makeByteArray(privatePackBaseUrl.arg(packCode), data)); QObject::connect(job, &NetJob::succeeded, this, [this, job, data, packCode] @@ -63,7 +63,7 @@ void PackFetchTask::fetchPrivate(const QStringList & toFetch) delete data; }); - job->start(m_network); + job->start(); } } diff --git a/launcher/modplatform/legacy_ftb/PackInstallTask.cpp b/launcher/modplatform/legacy_ftb/PackInstallTask.cpp index 64aecb39..1d300192 100644 --- a/launcher/modplatform/legacy_ftb/PackInstallTask.cpp +++ b/launcher/modplatform/legacy_ftb/PackInstallTask.cpp @@ -33,7 +33,7 @@ void PackInstallTask::downloadPack() auto packoffset = QString("%1/%2/%3").arg(m_pack.dir, m_version.replace(".", "_"), m_pack.file); auto entry = APPLICATION->metacache()->resolveEntry("FTBPacks", packoffset); - netJobContainer = new NetJob("Download FTB Pack"); + netJobContainer = new NetJob("Download FTB Pack", m_network); entry->setStale(true); QString url; @@ -51,7 +51,7 @@ void PackInstallTask::downloadPack() connect(netJobContainer.get(), &NetJob::succeeded, this, &PackInstallTask::onDownloadSucceeded); connect(netJobContainer.get(), &NetJob::failed, this, &PackInstallTask::onDownloadFailed); connect(netJobContainer.get(), &NetJob::progress, this, &PackInstallTask::onDownloadProgress); - netJobContainer->start(m_network); + netJobContainer->start(); progress(1, 4); } diff --git a/launcher/modplatform/modpacksch/FTBPackInstallTask.cpp b/launcher/modplatform/modpacksch/FTBPackInstallTask.cpp index 5fd85dfc..03570226 100644 --- a/launcher/modplatform/modpacksch/FTBPackInstallTask.cpp +++ b/launcher/modplatform/modpacksch/FTBPackInstallTask.cpp @@ -63,12 +63,11 @@ void PackInstallTask::executeTask() return; } - auto *netJob = new NetJob("ModpacksCH::VersionFetch"); - auto searchUrl = QString(BuildConfig.MODPACKSCH_API_BASE_URL + "public/modpack/%1/%2") - .arg(m_pack.id).arg(version.id); + auto *netJob = new NetJob("ModpacksCH::VersionFetch", APPLICATION->network()); + auto searchUrl = QString(BuildConfig.MODPACKSCH_API_BASE_URL + "public/modpack/%1/%2").arg(m_pack.id).arg(version.id); netJob->addNetAction(Net::Download::makeByteArray(QUrl(searchUrl), &response)); jobPtr = netJob; - jobPtr->start(APPLICATION->network()); + jobPtr->start(); QObject::connect(netJob, &NetJob::succeeded, this, &PackInstallTask::onDownloadSucceeded); QObject::connect(netJob, &NetJob::failed, this, &PackInstallTask::onDownloadFailed); @@ -113,7 +112,7 @@ void PackInstallTask::downloadPack() { setStatus(tr("Downloading mods...")); - jobPtr = new NetJob(tr("Mod download")); + jobPtr = new NetJob(tr("Mod download"), APPLICATION->network()); for(auto file : m_version.files) { if(file.serverOnly) continue; @@ -159,7 +158,7 @@ void PackInstallTask::downloadPack() setProgress(current, total); }); - jobPtr->start(APPLICATION->network()); + jobPtr->start(); } void PackInstallTask::install() diff --git a/launcher/modplatform/technic/SingleZipPackInstallTask.cpp b/launcher/modplatform/technic/SingleZipPackInstallTask.cpp index 0ab9f3c0..9093b245 100644 --- a/launcher/modplatform/technic/SingleZipPackInstallTask.cpp +++ b/launcher/modplatform/technic/SingleZipPackInstallTask.cpp @@ -44,14 +44,14 @@ void Technic::SingleZipPackInstallTask::executeTask() const QString path = m_sourceUrl.host() + '/' + m_sourceUrl.path(); auto entry = APPLICATION->metacache()->resolveEntry("general", path); entry->setStale(true); - m_filesNetJob.reset(new NetJob(tr("Modpack download"))); + m_filesNetJob = new NetJob(tr("Modpack download"), APPLICATION->network()); m_filesNetJob->addNetAction(Net::Download::makeCached(m_sourceUrl, entry)); m_archivePath = entry->getFullPath(); auto job = m_filesNetJob.get(); connect(job, &NetJob::succeeded, this, &Technic::SingleZipPackInstallTask::downloadSucceeded); connect(job, &NetJob::progress, this, &Technic::SingleZipPackInstallTask::downloadProgressChanged); connect(job, &NetJob::failed, this, &Technic::SingleZipPackInstallTask::downloadFailed); - m_filesNetJob->start(APPLICATION->network()); + m_filesNetJob->start(); } void Technic::SingleZipPackInstallTask::downloadSucceeded() diff --git a/launcher/modplatform/technic/SolderPackInstallTask.cpp b/launcher/modplatform/technic/SolderPackInstallTask.cpp index 2492ee81..b5c91582 100644 --- a/launcher/modplatform/technic/SolderPackInstallTask.cpp +++ b/launcher/modplatform/technic/SolderPackInstallTask.cpp @@ -42,12 +42,12 @@ bool Technic::SolderPackInstallTask::abort() { void Technic::SolderPackInstallTask::executeTask() { setStatus(tr("Finding recommended version:\n%1").arg(m_sourceUrl.toString())); - m_filesNetJob.reset(new NetJob(tr("Finding recommended version"))); + m_filesNetJob = new NetJob(tr("Finding recommended version"), m_network); m_filesNetJob->addNetAction(Net::Download::makeByteArray(m_sourceUrl, &m_response)); auto job = m_filesNetJob.get(); connect(job, &NetJob::succeeded, this, &Technic::SolderPackInstallTask::versionSucceeded); connect(job, &NetJob::failed, this, &Technic::SolderPackInstallTask::downloadFailed); - m_filesNetJob->start(m_network); + m_filesNetJob->start(); } void Technic::SolderPackInstallTask::versionSucceeded() @@ -67,12 +67,12 @@ void Technic::SolderPackInstallTask::versionSucceeded() } setStatus(tr("Resolving modpack files:\n%1").arg(m_sourceUrl.toString())); - m_filesNetJob.reset(new NetJob(tr("Resolving modpack files"))); + m_filesNetJob = new NetJob(tr("Resolving modpack files"), m_network); m_filesNetJob->addNetAction(Net::Download::makeByteArray(m_sourceUrl, &m_response)); auto job = m_filesNetJob.get(); connect(job, &NetJob::succeeded, this, &Technic::SolderPackInstallTask::fileListSucceeded); connect(job, &NetJob::failed, this, &Technic::SolderPackInstallTask::downloadFailed); - m_filesNetJob->start(m_network); + m_filesNetJob->start(); } void Technic::SolderPackInstallTask::fileListSucceeded() @@ -99,7 +99,7 @@ void Technic::SolderPackInstallTask::fileListSucceeded() m_filesNetJob.reset(); return; } - m_filesNetJob.reset(new NetJob(tr("Downloading modpack"))); + m_filesNetJob = new NetJob(tr("Downloading modpack"), m_network); int i = 0; for (auto &modUrl: modUrls) { @@ -113,7 +113,7 @@ void Technic::SolderPackInstallTask::fileListSucceeded() connect(m_filesNetJob.get(), &NetJob::succeeded, this, &Technic::SolderPackInstallTask::downloadSucceeded); connect(m_filesNetJob.get(), &NetJob::progress, this, &Technic::SolderPackInstallTask::downloadProgressChanged); connect(m_filesNetJob.get(), &NetJob::failed, this, &Technic::SolderPackInstallTask::downloadFailed); - m_filesNetJob->start(m_network); + m_filesNetJob->start(); } void Technic::SolderPackInstallTask::downloadSucceeded() diff --git a/launcher/net/NetJob.cpp b/launcher/net/NetJob.cpp index b190b3e9..9bad89ed 100644 --- a/launcher/net/NetJob.cpp +++ b/launcher/net/NetJob.cpp @@ -98,12 +98,6 @@ void NetJob::partProgress(int index, qint64 bytesReceived, qint64 bytesTotal) void NetJob::executeTask() { - if(!m_network) { - qCritical() << "Attempted to start NetJob" << objectName() << "without the network set!"; - emitFailed(tr("Internal error: NetJob '%1' has been started without a network pointer!").arg(objectName())); - return; - } - // hack that delays early failures so they can be caught easier QMetaObject::invokeMethod(this, "startMoreParts", Qt::QueuedConnection); } diff --git a/launcher/net/NetJob.h b/launcher/net/NetJob.h index 06b23306..fdea710f 100644 --- a/launcher/net/NetJob.h +++ b/launcher/net/NetJob.h @@ -29,17 +29,12 @@ class NetJob : public Task public: using Ptr = shared_qobject_ptr; - explicit NetJob(QString job_name) : Task() + explicit NetJob(QString job_name, shared_qobject_ptr network) : Task(), m_network(network) { setObjectName(job_name); } virtual ~NetJob(); - void setNetwork(shared_qobject_ptr network) - { - m_network = network; - } - bool addNetAction(NetAction::Ptr action); NetAction::Ptr operator[](int index) @@ -70,10 +65,6 @@ private slots: public slots: virtual void executeTask() override; virtual bool abort() override; - virtual void start(shared_qobject_ptr network) { - m_network = network; - Task::start(); - } private slots: void partProgress(int index, qint64 bytesReceived, qint64 bytesTotal); diff --git a/launcher/news/NewsChecker.cpp b/launcher/news/NewsChecker.cpp index 77d428a5..4f4359b8 100644 --- a/launcher/news/NewsChecker.cpp +++ b/launcher/news/NewsChecker.cpp @@ -37,12 +37,12 @@ void NewsChecker::reloadNews() qDebug() << "Reloading news."; - NetJob* job = new NetJob("News RSS Feed"); + NetJob* job = new NetJob("News RSS Feed", m_network); job->addNetAction(Net::Download::makeByteArray(m_feedUrl, &newsData)); QObject::connect(job, &NetJob::succeeded, this, &NewsChecker::rssDownloadFinished); QObject::connect(job, &NetJob::failed, this, &NewsChecker::rssDownloadFailed); m_newsNetJob.reset(job); - job->start(m_network); + job->start(); } void NewsChecker::rssDownloadFinished() diff --git a/launcher/notifications/NotificationChecker.cpp b/launcher/notifications/NotificationChecker.cpp index 00c918f8..c08bcdcb 100644 --- a/launcher/notifications/NotificationChecker.cpp +++ b/launcher/notifications/NotificationChecker.cpp @@ -52,12 +52,12 @@ void NotificationChecker::checkForNotifications() { return; } - m_checkJob.reset(new NetJob("Checking for notifications")); + m_checkJob = new NetJob("Checking for notifications", APPLICATION->network()); auto entry = APPLICATION->metacache()->resolveEntry("root", "notifications.json"); entry->setStale(true); m_checkJob->addNetAction(m_download = Net::Download::makeCached(m_notificationsUrl, entry)); connect(m_download.get(), &Net::Download::succeeded, this, &NotificationChecker::downloadSucceeded); - m_checkJob->start(APPLICATION->network()); + m_checkJob->start(); } void NotificationChecker::downloadSucceeded(int) diff --git a/launcher/translations/TranslationsModel.cpp b/launcher/translations/TranslationsModel.cpp index 576258eb..2e744007 100644 --- a/launcher/translations/TranslationsModel.cpp +++ b/launcher/translations/TranslationsModel.cpp @@ -573,14 +573,14 @@ void TranslationsModel::downloadIndex() return; } qDebug() << "Downloading Translations Index..."; - d->m_index_job.reset(new NetJob("Translations Index")); + d->m_index_job = new NetJob("Translations Index", APPLICATION->network()); MetaEntryPtr entry = APPLICATION->metacache()->resolveEntry("translations", "index_v2.json"); entry->setStale(true); d->m_index_task = Net::Download::makeCached(QUrl("https://files.multimc.org/translations/index_v2.json"), entry); d->m_index_job->addNetAction(d->m_index_task); connect(d->m_index_job.get(), &NetJob::failed, this, &TranslationsModel::indexFailed); connect(d->m_index_job.get(), &NetJob::succeeded, this, &TranslationsModel::indexReceived); - d->m_index_job->start(APPLICATION->network()); + d->m_index_job->start(); } void TranslationsModel::updateLanguage(QString key) @@ -625,13 +625,13 @@ void TranslationsModel::downloadTranslation(QString key) dl->addValidator(new Net::ChecksumValidator(QCryptographicHash::Sha1, rawHash)); dl->m_total_progress = lang->file_size; - d->m_dl_job.reset(new NetJob("Translation for " + key)); + d->m_dl_job = new NetJob("Translation for " + key, APPLICATION->network()); d->m_dl_job->addNetAction(dl); connect(d->m_dl_job.get(), &NetJob::succeeded, this, &TranslationsModel::dlGood); connect(d->m_dl_job.get(), &NetJob::failed, this, &TranslationsModel::dlFailed); - d->m_dl_job->start(APPLICATION->network()); + d->m_dl_job->start(); } void TranslationsModel::downloadNext() diff --git a/launcher/ui/dialogs/AboutDialog.cpp b/launcher/ui/dialogs/AboutDialog.cpp index 501156d0..9795c38b 100644 --- a/launcher/ui/dialogs/AboutDialog.cpp +++ b/launcher/ui/dialogs/AboutDialog.cpp @@ -133,10 +133,10 @@ AboutDialog::~AboutDialog() void AboutDialog::loadPatronList() { - netJob = new NetJob("Patreon Patron List"); + netJob = new NetJob("Patreon Patron List", APPLICATION->network()); netJob->addNetAction(Net::Download::makeByteArray(QUrl("https://files.multimc.org/patrons.txt"), &dataSink)); connect(netJob.get(), &NetJob::succeeded, this, &AboutDialog::patronListLoaded); - netJob->start(APPLICATION->network()); + netJob->start(); } void AboutDialog::patronListLoaded() diff --git a/launcher/ui/dialogs/UpdateDialog.cpp b/launcher/ui/dialogs/UpdateDialog.cpp index 4a6a1fdd..c0f6074c 100644 --- a/launcher/ui/dialogs/UpdateDialog.cpp +++ b/launcher/ui/dialogs/UpdateDialog.cpp @@ -34,7 +34,7 @@ UpdateDialog::~UpdateDialog() void UpdateDialog::loadChangelog() { auto channel = APPLICATION->settings()->get("UpdateChannel").toString(); - dljob.reset(new NetJob("Changelog")); + dljob = new NetJob("Changelog", APPLICATION->network()); QString url; if(channel == "stable") { @@ -49,7 +49,7 @@ void UpdateDialog::loadChangelog() dljob->addNetAction(Net::Download::makeByteArray(QUrl(url), &changelogData)); connect(dljob.get(), &NetJob::succeeded, this, &UpdateDialog::changelogLoaded); connect(dljob.get(), &NetJob::failed, this, &UpdateDialog::changelogFailed); - dljob->start(APPLICATION->network()); + dljob->start(); } QString reprocessMarkdown(QByteArray markdown) diff --git a/launcher/ui/pages/instance/ScreenshotsPage.cpp b/launcher/ui/pages/instance/ScreenshotsPage.cpp index 3fcc61fa..f568ef0d 100644 --- a/launcher/ui/pages/instance/ScreenshotsPage.cpp +++ b/launcher/ui/pages/instance/ScreenshotsPage.cpp @@ -304,7 +304,7 @@ void ScreenshotsPage::on_actionUpload_triggered() return; QList uploaded; - auto job = NetJob::Ptr(new NetJob("Screenshot Upload")); + auto job = NetJob::Ptr(new NetJob("Screenshot Upload", APPLICATION->network())); if(selection.size() < 2) { auto item = selection.at(0); @@ -315,7 +315,6 @@ void ScreenshotsPage::on_actionUpload_triggered() m_uploadActive = true; ProgressDialog dialog(this); - job->setNetwork(APPLICATION->network()); if(dialog.execWithTask(job.get()) != QDialog::Accepted) { CustomMessageBox::selectable(this, tr("Failed to upload screenshots!"), @@ -347,19 +346,21 @@ void ScreenshotsPage::on_actionUpload_triggered() job->addNetAction(ImgurUpload::make(screenshot)); } SequentialTask task; - auto albumTask = NetJob::Ptr(new NetJob("Imgur Album Creation")); + auto albumTask = NetJob::Ptr(new NetJob("Imgur Album Creation", APPLICATION->network())); auto imgurAlbum = ImgurAlbumCreation::make(uploaded); albumTask->addNetAction(imgurAlbum); - job->setNetwork(APPLICATION->network()); task.addTask(job); - albumTask->setNetwork(APPLICATION->network()); task.addTask(albumTask); m_uploadActive = true; ProgressDialog prog(this); if (prog.execWithTask(&task) != QDialog::Accepted) { - CustomMessageBox::selectable(this, tr("Failed to upload screenshots!"), - tr("Unknown error"), QMessageBox::Warning)->exec(); + CustomMessageBox::selectable( + this, + tr("Failed to upload screenshots!"), + tr("Unknown error"), + QMessageBox::Warning + )->exec(); } else { diff --git a/launcher/ui/pages/modplatform/atlauncher/AtlListModel.cpp b/launcher/ui/pages/modplatform/atlauncher/AtlListModel.cpp index 82e383ca..ef9a9268 100644 --- a/launcher/ui/pages/modplatform/atlauncher/AtlListModel.cpp +++ b/launcher/ui/pages/modplatform/atlauncher/AtlListModel.cpp @@ -86,11 +86,11 @@ void ListModel::request() modpacks.clear(); endResetModel(); - auto *netJob = new NetJob("Atl::Request"); + auto *netJob = new NetJob("Atl::Request", APPLICATION->network()); auto url = QString(BuildConfig.ATL_DOWNLOAD_SERVER_URL + "launcher/json/packsnew.json"); netJob->addNetAction(Net::Download::makeByteArray(QUrl(url), &response)); jobPtr = netJob; - jobPtr->start(APPLICATION->network()); + jobPtr->start(); QObject::connect(netJob, &NetJob::succeeded, this, &ListModel::requestFinished); QObject::connect(netJob, &NetJob::failed, this, &ListModel::requestFailed); @@ -183,7 +183,7 @@ void ListModel::requestLogo(QString file, QString url) } MetaEntryPtr entry = APPLICATION->metacache()->resolveEntry("ATLauncherPacks", QString("logos/%1").arg(file.section(".", 0, 0))); - NetJob *job = new NetJob(QString("ATLauncher Icon Download %1").arg(file)); + NetJob *job = new NetJob(QString("ATLauncher Icon Download %1").arg(file), APPLICATION->network()); job->addNetAction(Net::Download::makeCached(QUrl(url), entry)); auto fullPath = entry->getFullPath(); @@ -201,7 +201,7 @@ void ListModel::requestLogo(QString file, QString url) emit logoFailed(file); }); - job->start(APPLICATION->network()); + job->start(); m_loadingLogos.append(file); } diff --git a/launcher/ui/pages/modplatform/flame/FlameModel.cpp b/launcher/ui/pages/modplatform/flame/FlameModel.cpp index a05ab641..891676cf 100644 --- a/launcher/ui/pages/modplatform/flame/FlameModel.cpp +++ b/launcher/ui/pages/modplatform/flame/FlameModel.cpp @@ -100,7 +100,7 @@ void ListModel::requestLogo(QString logo, QString url) } MetaEntryPtr entry = APPLICATION->metacache()->resolveEntry("FlamePacks", QString("logos/%1").arg(logo.section(".", 0, 0))); - NetJob *job = new NetJob(QString("Flame Icon Download %1").arg(logo)); + NetJob *job = new NetJob(QString("Flame Icon Download %1").arg(logo), APPLICATION->network()); job->addNetAction(Net::Download::makeCached(QUrl(url), entry)); auto fullPath = entry->getFullPath(); @@ -118,7 +118,7 @@ void ListModel::requestLogo(QString logo, QString url) emit logoFailed(logo); }); - job->start(APPLICATION->network()); + job->start(); m_loadingLogos.append(logo); } @@ -158,7 +158,7 @@ void ListModel::fetchMore(const QModelIndex& parent) void ListModel::performPaginatedSearch() { - NetJob *netJob = new NetJob("Flame::Search"); + NetJob *netJob = new NetJob("Flame::Search", APPLICATION->network()); auto searchUrl = QString( "https://addons-ecs.forgesvc.net/api/v2/addon/search?" "categoryId=0&" @@ -171,7 +171,7 @@ void ListModel::performPaginatedSearch() ).arg(nextSearchOffset).arg(currentSearchTerm).arg(currentSort); netJob->addNetAction(Net::Download::makeByteArray(QUrl(searchUrl), &response)); jobPtr = netJob; - jobPtr->start(APPLICATION->network()); + jobPtr->start(); QObject::connect(netJob, &NetJob::succeeded, this, &ListModel::searchRequestFinished); QObject::connect(netJob, &NetJob::failed, this, &ListModel::searchRequestFailed); } diff --git a/launcher/ui/pages/modplatform/flame/FlamePage.cpp b/launcher/ui/pages/modplatform/flame/FlamePage.cpp index cb1185f7..1138a298 100644 --- a/launcher/ui/pages/modplatform/flame/FlamePage.cpp +++ b/launcher/ui/pages/modplatform/flame/FlamePage.cpp @@ -109,7 +109,7 @@ void FlamePage::onSelectionChanged(QModelIndex first, QModelIndex second) if (current.versionsLoaded == false) { qDebug() << "Loading flame modpack versions"; - NetJob *netJob = new NetJob(QString("Flame::PackVersions(%1)").arg(current.name)); + NetJob *netJob = new NetJob(QString("Flame::PackVersions(%1)").arg(current.name), APPLICATION->network()); std::shared_ptr response = std::make_shared(); int addonId = current.addonId; netJob->addNetAction(Net::Download::makeByteArray(QString("https://addons-ecs.forgesvc.net/api/v2/addon/%1/files").arg(addonId), response.get())); @@ -140,7 +140,7 @@ void FlamePage::onSelectionChanged(QModelIndex first, QModelIndex second) suggestCurrent(); }); - netJob->start(APPLICATION->network()); + netJob->start(); } else { diff --git a/launcher/ui/pages/modplatform/ftb/FtbListModel.cpp b/launcher/ui/pages/modplatform/ftb/FtbListModel.cpp index be9e1760..37244fed 100644 --- a/launcher/ui/pages/modplatform/ftb/FtbListModel.cpp +++ b/launcher/ui/pages/modplatform/ftb/FtbListModel.cpp @@ -107,11 +107,11 @@ void ListModel::request() modpacks.clear(); endResetModel(); - auto *netJob = new NetJob("Ftb::Request"); + auto *netJob = new NetJob("Ftb::Request", APPLICATION->network()); auto url = QString(BuildConfig.MODPACKSCH_API_BASE_URL + "public/modpack/all"); netJob->addNetAction(Net::Download::makeByteArray(QUrl(url), &response)); jobPtr = netJob; - jobPtr->start(APPLICATION->network()); + jobPtr->start(); QObject::connect(netJob, &NetJob::succeeded, this, &ListModel::requestFinished); QObject::connect(netJob, &NetJob::failed, this, &ListModel::requestFailed); @@ -150,12 +150,11 @@ void ListModel::requestFailed(QString reason) void ListModel::requestPack() { - auto *netJob = new NetJob("Ftb::Search"); - auto searchUrl = QString(BuildConfig.MODPACKSCH_API_BASE_URL + "public/modpack/%1") - .arg(currentPack); + auto *netJob = new NetJob("Ftb::Search", APPLICATION->network()); + auto searchUrl = QString(BuildConfig.MODPACKSCH_API_BASE_URL + "public/modpack/%1").arg(currentPack); netJob->addNetAction(Net::Download::makeByteArray(QUrl(searchUrl), &response)); jobPtr = netJob; - jobPtr->start(APPLICATION->network()); + jobPtr->start(); QObject::connect(netJob, &NetJob::succeeded, this, &ListModel::packRequestFinished); QObject::connect(netJob, &NetJob::failed, this, &ListModel::packRequestFailed); @@ -271,7 +270,7 @@ void ListModel::requestLogo(QString logo, QString url) bool stale = entry->isStale(); - NetJob *job = new NetJob(QString("FTB Icon Download %1").arg(logo)); + NetJob *job = new NetJob(QString("FTB Icon Download %1").arg(logo), APPLICATION->network()); job->addNetAction(Net::Download::makeCached(QUrl(url), entry)); auto fullPath = entry->getFullPath(); @@ -288,7 +287,7 @@ void ListModel::requestLogo(QString logo, QString url) auto &newLogoEntry = m_logoMap[logo]; newLogoEntry.downloadJob = job; newLogoEntry.fullpath = fullPath; - job->start(APPLICATION->network()); + job->start(); } } diff --git a/launcher/ui/pages/modplatform/legacy_ftb/ListModel.cpp b/launcher/ui/pages/modplatform/legacy_ftb/ListModel.cpp index 5fa932b7..9c46e887 100644 --- a/launcher/ui/pages/modplatform/legacy_ftb/ListModel.cpp +++ b/launcher/ui/pages/modplatform/legacy_ftb/ListModel.cpp @@ -216,7 +216,7 @@ void ListModel::requestLogo(QString file) } MetaEntryPtr entry = APPLICATION->metacache()->resolveEntry("FTBPacks", QString("logos/%1").arg(file.section(".", 0, 0))); - NetJob *job = new NetJob(QString("FTB Icon Download for %1").arg(file)); + NetJob *job = new NetJob(QString("FTB Icon Download for %1").arg(file), APPLICATION->network()); job->addNetAction(Net::Download::makeCached(QUrl(QString(BuildConfig.LEGACY_FTB_CDN_BASE_URL + "static/%1").arg(file)), entry)); auto fullPath = entry->getFullPath(); @@ -234,7 +234,7 @@ void ListModel::requestLogo(QString file) emit logoFailed(file); }); - job->start(APPLICATION->network()); + job->start(); m_loadingLogos.append(file); } diff --git a/launcher/ui/pages/modplatform/technic/TechnicModel.cpp b/launcher/ui/pages/modplatform/technic/TechnicModel.cpp index 63c2d4c4..0167f746 100644 --- a/launcher/ui/pages/modplatform/technic/TechnicModel.cpp +++ b/launcher/ui/pages/modplatform/technic/TechnicModel.cpp @@ -91,7 +91,7 @@ void Technic::ListModel::searchWithTerm(const QString& term) void Technic::ListModel::performSearch() { - NetJob *netJob = new NetJob("Technic::Search"); + NetJob *netJob = new NetJob("Technic::Search", APPLICATION->network()); QString searchUrl = ""; if (currentSearchTerm.isEmpty()) { searchUrl = "https://api.technicpack.net/trending?build=multimc"; @@ -104,7 +104,7 @@ void Technic::ListModel::performSearch() } netJob->addNetAction(Net::Download::makeByteArray(QUrl(searchUrl), &response)); jobPtr = netJob; - jobPtr->start(APPLICATION->network()); + jobPtr->start(); QObject::connect(netJob, &NetJob::succeeded, this, &ListModel::searchRequestFinished); QObject::connect(netJob, &NetJob::failed, this, &ListModel::searchRequestFailed); } @@ -216,7 +216,7 @@ void Technic::ListModel::requestLogo(QString logo, QString url) } MetaEntryPtr entry = APPLICATION->metacache()->resolveEntry("TechnicPacks", QString("logos/%1").arg(logo)); - NetJob *job = new NetJob(QString("Technic Icon Download %1").arg(logo)); + NetJob *job = new NetJob(QString("Technic Icon Download %1").arg(logo), APPLICATION->network()); job->addNetAction(Net::Download::makeCached(QUrl(url), entry)); auto fullPath = entry->getFullPath(); @@ -231,7 +231,7 @@ void Technic::ListModel::requestLogo(QString logo, QString url) logoFailed(logo); }); - job->start(APPLICATION->network()); + job->start(); m_loadingLogos.append(logo); } diff --git a/launcher/ui/pages/modplatform/technic/TechnicPage.cpp b/launcher/ui/pages/modplatform/technic/TechnicPage.cpp index ac69675c..67f6e52c 100644 --- a/launcher/ui/pages/modplatform/technic/TechnicPage.cpp +++ b/launcher/ui/pages/modplatform/technic/TechnicPage.cpp @@ -110,8 +110,8 @@ void TechnicPage::suggestCurrent() metadataLoaded(); return; } - - NetJob *netJob = new NetJob(QString("Technic::PackMeta(%1)").arg(current.name)); + + NetJob *netJob = new NetJob(QString("Technic::PackMeta(%1)").arg(current.name), APPLICATION->network()); std::shared_ptr response = std::make_shared(); QString slug = current.slug; netJob->addNetAction(Net::Download::makeByteArray(QString("https://api.technicpack.net/modpack/%1?build=multimc").arg(slug), response.get())); @@ -167,7 +167,7 @@ void TechnicPage::suggestCurrent() current.metadataLoaded = true; metadataLoaded(); }); - netJob->start(APPLICATION->network()); + netJob->start(); } // expects current.metadataLoaded to be true diff --git a/launcher/updater/DownloadTask.cpp b/launcher/updater/DownloadTask.cpp index eba59142..48fe767a 100644 --- a/launcher/updater/DownloadTask.cpp +++ b/launcher/updater/DownloadTask.cpp @@ -47,7 +47,7 @@ void DownloadTask::loadVersionInfo() { setStatus(tr("Loading version information...")); - NetJob *netJob = new NetJob("Version Info"); + NetJob *netJob = new NetJob("Version Info", m_network); // Find the index URL. QUrl newIndexUrl = QUrl(m_status.newRepoUrl).resolved(QString::number(m_status.newVersionId) + ".json"); @@ -67,7 +67,7 @@ void DownloadTask::loadVersionInfo() connect(netJob, &NetJob::succeeded, this, &DownloadTask::processDownloadedVersionInfo); connect(netJob, &NetJob::failed, this, &DownloadTask::vinfoDownloadFailed); m_vinfoNetJob.reset(netJob); - netJob->start(m_network); + netJob->start(); } void DownloadTask::vinfoDownloadFailed() @@ -121,7 +121,7 @@ void DownloadTask::processDownloadedVersionInfo() setStatus(tr("Processing file lists - figuring out how to install the update...")); // make a new netjob for the actual update files - NetJob::Ptr netJob (new NetJob("Update Files")); + NetJob::Ptr netJob = new NetJob("Update Files", m_network); // fill netJob and operationList if (!processFileLists(m_currentVersionFileList, m_newVersionFileList, m_status.rootPath, m_updateFilesDir.path(), netJob, m_operations)) @@ -145,7 +145,7 @@ void DownloadTask::processDownloadedVersionInfo() } qDebug() << "Begin downloading update files to" << m_updateFilesDir.path(); m_filesNetJob = netJob; - m_filesNetJob->start(m_network); + m_filesNetJob->start(); } void DownloadTask::fileDownloadFinished() diff --git a/launcher/updater/DownloadTask_test.cpp b/launcher/updater/DownloadTask_test.cpp index dc263c17..8e823a63 100644 --- a/launcher/updater/DownloadTask_test.cpp +++ b/launcher/updater/DownloadTask_test.cpp @@ -179,7 +179,8 @@ slots: OperationList operations; - processFileLists(currentVersion, newVersion, QDir::currentPath(), tempFolder, new NetJob("Dummy"), operations); + shared_qobject_ptr network = new QNetworkAccessManager(); + processFileLists(currentVersion, newVersion, QDir::currentPath(), tempFolder, new NetJob("Dummy", network), operations); qDebug() << (operations == expectedOperations); qDebug() << operations; qDebug() << expectedOperations; diff --git a/launcher/updater/UpdateChecker.cpp b/launcher/updater/UpdateChecker.cpp index c72bbe0b..efdb6093 100644 --- a/launcher/updater/UpdateChecker.cpp +++ b/launcher/updater/UpdateChecker.cpp @@ -104,11 +104,11 @@ void UpdateChecker::checkForUpdate(QString updateChannel, bool notifyNoUpdate) QUrl indexUrl = QUrl(m_newRepoUrl).resolved(QUrl("index.json")); - indexJob = new NetJob("GoUpdate Repository Index"); + indexJob = new NetJob("GoUpdate Repository Index", m_network); indexJob->addNetAction(Net::Download::makeByteArray(indexUrl, &indexData)); connect(indexJob.get(), &NetJob::succeeded, [this, notifyNoUpdate](){ updateCheckFinished(notifyNoUpdate); }); connect(indexJob.get(), &NetJob::failed, this, &UpdateChecker::updateCheckFailed); - indexJob->start(m_network); + indexJob->start(); } void UpdateChecker::updateCheckFinished(bool notifyNoUpdate) @@ -191,11 +191,11 @@ void UpdateChecker::updateChanList(bool notifyNoUpdate) } m_chanListLoading = true; - chanListJob = new NetJob("Update System Channel List"); + chanListJob = new NetJob("Update System Channel List", m_network); chanListJob->addNetAction(Net::Download::makeByteArray(QUrl(m_channelUrl), &chanlistData)); connect(chanListJob.get(), &NetJob::succeeded, [this, notifyNoUpdate]() { chanListDownloadFinished(notifyNoUpdate); }); connect(chanListJob.get(), &NetJob::failed, this, &UpdateChecker::chanListDownloadFailed); - chanListJob->start(m_network); + chanListJob->start(); } void UpdateChecker::chanListDownloadFinished(bool notifyNoUpdate)