diff options
Diffstat (limited to 'logic')
-rw-r--r-- | logic/BaseInstance.h | 2 | ||||
-rw-r--r-- | logic/LegacyInstance.cpp | 12 | ||||
-rw-r--r-- | logic/LegacyInstance.h | 2 | ||||
-rw-r--r-- | logic/MinecraftProcess.cpp | 2 | ||||
-rw-r--r-- | logic/MinecraftProcess.h | 19 | ||||
-rw-r--r-- | logic/OneSixInstance.cpp | 13 | ||||
-rw-r--r-- | logic/OneSixInstance.h | 2 | ||||
-rw-r--r-- | logic/status/StatusChecker.cpp | 23 | ||||
-rw-r--r-- | logic/status/StatusChecker.h | 11 |
9 files changed, 47 insertions, 39 deletions
diff --git a/logic/BaseInstance.h b/logic/BaseInstance.h index d38ae409..16791592 100644 --- a/logic/BaseInstance.h +++ b/logic/BaseInstance.h @@ -163,7 +163,7 @@ public: virtual std::shared_ptr<Task> doUpdate() = 0; /// returns a valid minecraft process, ready for launch with the given account. - virtual MinecraftProcess *prepareForLaunch(AuthSessionPtr account) = 0; + virtual bool prepareForLaunch(AuthSessionPtr account, QString & launchScript) = 0; /// do any necessary cleanups after the instance finishes. also runs before /// 'prepareForLaunch' diff --git a/logic/LegacyInstance.cpp b/logic/LegacyInstance.cpp index d06b8827..6648e059 100644 --- a/logic/LegacyInstance.cpp +++ b/logic/LegacyInstance.cpp @@ -50,16 +50,13 @@ std::shared_ptr<Task> LegacyInstance::doUpdate() return std::shared_ptr<Task>(new LegacyUpdate(this, this)); } -MinecraftProcess *LegacyInstance::prepareForLaunch(AuthSessionPtr account) +bool LegacyInstance::prepareForLaunch(AuthSessionPtr account, QString & launchScript) { - MinecraftProcess *proc = new MinecraftProcess(this); - QIcon icon = MMC->icons()->getIcon(iconKey()); auto pixmap = icon.pixmap(128, 128); pixmap.save(PathCombine(minecraftRoot(), "icon.png"), "PNG"); // create the launch script - QString launchScript; { // window size QString windowParams; @@ -79,12 +76,7 @@ MinecraftProcess *LegacyInstance::prepareForLaunch(AuthSessionPtr account) launchScript += "lwjgl " + lwjgl + "\n"; launchScript += "launcher legacy\n"; } - proc->setLaunchScript(launchScript); - - // set the process work path - proc->setWorkdir(minecraftRoot()); - - return proc; + return true; } void LegacyInstance::cleanupAfterRun() diff --git a/logic/LegacyInstance.h b/logic/LegacyInstance.h index badaf7e3..aa80968e 100644 --- a/logic/LegacyInstance.h +++ b/logic/LegacyInstance.h @@ -79,7 +79,7 @@ public: virtual void setShouldUpdate(bool val) override; virtual std::shared_ptr<Task> doUpdate() override; - virtual MinecraftProcess *prepareForLaunch(AuthSessionPtr account) override; + virtual bool prepareForLaunch(AuthSessionPtr account, QString & launchScript) override; virtual void cleanupAfterRun() override; virtual QDialog *createModEditDialog(QWidget *parent) override; diff --git a/logic/MinecraftProcess.cpp b/logic/MinecraftProcess.cpp index e43e5830..b268a4cc 100644 --- a/logic/MinecraftProcess.cpp +++ b/logic/MinecraftProcess.cpp @@ -34,7 +34,7 @@ #define IBUS "@im=ibus" // constructor -MinecraftProcess::MinecraftProcess(BaseInstance *inst) : m_instance(inst) +MinecraftProcess::MinecraftProcess(InstancePtr inst) : m_instance(inst) { connect(this, SIGNAL(finished(int, QProcess::ExitStatus)), SLOT(finish(int, QProcess::ExitStatus))); diff --git a/logic/MinecraftProcess.h b/logic/MinecraftProcess.h index d47a6cd2..b61ef380 100644 --- a/logic/MinecraftProcess.h +++ b/logic/MinecraftProcess.h @@ -52,8 +52,13 @@ public: * @brief MinecraftProcess constructor * @param inst the Instance pointer to launch */ - MinecraftProcess(BaseInstance *inst); + MinecraftProcess(InstancePtr inst); + virtual ~MinecraftProcess() + { + + }; + /** * @brief start the launcher part with the provided launch script */ @@ -69,7 +74,7 @@ public: */ void abort(); - BaseInstance *instance() + InstancePtr instance() { return m_instance; } @@ -97,22 +102,22 @@ signals: /** * @brief emitted when Minecraft immediately fails to run */ - void launch_failed(BaseInstance *); + void launch_failed(InstancePtr); /** * @brief emitted when the PreLaunchCommand fails */ - void prelaunch_failed(BaseInstance *, int code, QProcess::ExitStatus status); + void prelaunch_failed(InstancePtr, int code, QProcess::ExitStatus status); /** * @brief emitted when the PostLaunchCommand fails */ - void postlaunch_failed(BaseInstance *, int code, QProcess::ExitStatus status); + void postlaunch_failed(InstancePtr, int code, QProcess::ExitStatus status); /** * @brief emitted when mc has finished and the PostLaunchCommand was run */ - void ended(BaseInstance *, int code, QProcess::ExitStatus status); + void ended(InstancePtr, int code, QProcess::ExitStatus status); /** * @brief emitted when we want to log something @@ -122,7 +127,7 @@ signals: void log(QString text, MessageLevel::Enum level = MessageLevel::MultiMC); protected: - BaseInstance *m_instance = nullptr; + InstancePtr m_instance; QString m_err_leftover; QString m_out_leftover; QProcess m_prepostlaunchprocess; diff --git a/logic/OneSixInstance.cpp b/logic/OneSixInstance.cpp index 24d54446..6f3018cb 100644 --- a/logic/OneSixInstance.cpp +++ b/logic/OneSixInstance.cpp @@ -189,7 +189,7 @@ QStringList OneSixInstance::processMinecraftArgs(AuthSessionPtr session) return parts; } -MinecraftProcess *OneSixInstance::prepareForLaunch(AuthSessionPtr session) +bool OneSixInstance::prepareForLaunch(AuthSessionPtr account, QString &launchScript) { I_D(OneSixInstance); @@ -200,7 +200,6 @@ MinecraftProcess *OneSixInstance::prepareForLaunch(AuthSessionPtr session) auto version = d->version; if (!version) return nullptr; - QString launchScript; { auto libs = version->getActiveNormalLibs(); for (auto lib : libs) @@ -212,7 +211,7 @@ MinecraftProcess *OneSixInstance::prepareForLaunch(AuthSessionPtr session) } launchScript += "mainClass " + version->mainClass + "\n"; - for (auto param : processMinecraftArgs(session)) + for (auto param : processMinecraftArgs(account)) { launchScript += "param " + param + "\n"; } @@ -240,13 +239,7 @@ MinecraftProcess *OneSixInstance::prepareForLaunch(AuthSessionPtr session) } launchScript += "natives " + natives_dir.absolutePath() + "\n"; launchScript += "launcher onesix\n"; - - // create the process and set its parameters - MinecraftProcess *proc = new MinecraftProcess(this); - proc->setWorkdir(minecraftRoot()); - proc->setLaunchScript(launchScript); - // proc->setNativeFolder(natives_dir.absolutePath()); - return proc; + return true; } void OneSixInstance::cleanupAfterRun() diff --git a/logic/OneSixInstance.h b/logic/OneSixInstance.h index 4e9d62a1..13a392c2 100644 --- a/logic/OneSixInstance.h +++ b/logic/OneSixInstance.h @@ -40,7 +40,7 @@ public: virtual QString instanceConfigFolder() const override; virtual std::shared_ptr<Task> doUpdate() override; - virtual MinecraftProcess *prepareForLaunch(AuthSessionPtr session) override; + virtual bool prepareForLaunch(AuthSessionPtr account, QString & launchScript) override; virtual void cleanupAfterRun() override; diff --git a/logic/status/StatusChecker.cpp b/logic/status/StatusChecker.cpp index 66f800ae..17053837 100644 --- a/logic/status/StatusChecker.cpp +++ b/logic/status/StatusChecker.cpp @@ -27,6 +27,12 @@ StatusChecker::StatusChecker() } +void StatusChecker::timerEvent(QTimerEvent *e) +{ + QObject::timerEvent(e); + reloadStatus(); +} + void StatusChecker::reloadStatus() { if (isLoadingStatus()) @@ -42,13 +48,14 @@ void StatusChecker::reloadStatus() QObject::connect(job, &NetJob::succeeded, this, &StatusChecker::statusDownloadFinished); QObject::connect(job, &NetJob::failed, this, &StatusChecker::statusDownloadFailed); m_statusNetJob.reset(job); + emit statusLoading(true); job->start(); } void StatusChecker::statusDownloadFinished() { QLOG_DEBUG() << "Finished loading status JSON."; - + m_statusEntries.clear(); QByteArray data; { ByteArrayDownloadPtr dl = std::dynamic_pointer_cast<ByteArrayDownload>(m_statusNetJob->first()); @@ -121,17 +128,27 @@ QString StatusChecker::getLastLoadErrorMsg() const void StatusChecker::succeed() { + if(m_prevEntries != m_statusEntries) + { + emit statusChanged(m_statusEntries); + m_prevEntries = m_statusEntries; + } m_lastLoadError = ""; QLOG_DEBUG() << "Status loading succeeded."; m_statusNetJob.reset(); - emit statusLoaded(); + emit statusLoading(false); } void StatusChecker::fail(const QString& errorMsg) { + if(m_prevEntries != m_statusEntries) + { + emit statusChanged(m_statusEntries); + m_prevEntries = m_statusEntries; + } m_lastLoadError = errorMsg; QLOG_DEBUG() << "Failed to load status:" << errorMsg; m_statusNetJob.reset(); - emit statusLoadingFailed(errorMsg); + emit statusLoading(false); } diff --git a/logic/status/StatusChecker.h b/logic/status/StatusChecker.h index 1cb01836..df0dd06d 100644 --- a/logic/status/StatusChecker.h +++ b/logic/status/StatusChecker.h @@ -29,26 +29,27 @@ public: QString getLastLoadErrorMsg() const; - bool isStatusLoaded() const; - bool isLoadingStatus() const; QMap<QString, QString> getStatusEntries() const; void Q_SLOT reloadStatus(); +protected: + virtual void timerEvent(QTimerEvent *); + signals: - void statusLoaded(); - void statusLoadingFailed(QString errorMsg); + void statusLoading(bool loading); + void statusChanged(QMap<QString, QString> newStatus); protected slots: void statusDownloadFinished(); void statusDownloadFailed(); protected: + QMap<QString, QString> m_prevEntries; QMap<QString, QString> m_statusEntries; NetJobPtr m_statusNetJob; - bool m_loadedStatus; QString m_lastLoadError; void Q_SLOT succeed(); |