From e48da78c29e51840da24c33b4fb39dbb7723afec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Mon, 27 Dec 2021 17:24:24 +0100 Subject: [PATCH] WIP junk --- launcher/Application.cpp | 10 +++ launcher/Application.h | 2 + launcher/java/RuntimeManager.cpp | 2 + launcher/java/RuntimeManager.h | 104 +++++++++++++++++++++++++++++++ 4 files changed, 118 insertions(+) create mode 100644 launcher/java/RuntimeManager.cpp create mode 100644 launcher/java/RuntimeManager.h diff --git a/launcher/Application.cpp b/launcher/Application.cpp index 9c965829..7a4cb5a8 100644 --- a/launcher/Application.cpp +++ b/launcher/Application.cpp @@ -840,6 +840,16 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv) qDebug() << "<> Accounts loaded."; } + // and java runtimes + { + m_runtimes.reset(new RuntimeManager(this)); + qDebug() << "Initializing runtimes..."; + m_runtimes->setListFilePath("runtimes.json", true); + m_runtimes->loadLocal(); + m_runtimes->fillQueue(); + qDebug() << "<> Runtimes loading."; + } + // init the http meta cache { m_metacache.reset(new HttpMetaCache("metacache")); diff --git a/launcher/Application.h b/launcher/Application.h index 1b2a2b60..ccd11348 100644 --- a/launcher/Application.h +++ b/launcher/Application.h @@ -24,6 +24,7 @@ class HttpMetaCache; class SettingsObject; class InstanceList; class AccountList; +class RuntimeManager; class IconList; class QNetworkAccessManager; class JavaInstallList; @@ -185,6 +186,7 @@ private: shared_qobject_ptr m_updateChecker; shared_qobject_ptr m_accounts; + shared_qobject_ptr m_runtimes; shared_qobject_ptr m_metacache; shared_qobject_ptr m_metadataIndex; diff --git a/launcher/java/RuntimeManager.cpp b/launcher/java/RuntimeManager.cpp new file mode 100644 index 00000000..0e4a23e4 --- /dev/null +++ b/launcher/java/RuntimeManager.cpp @@ -0,0 +1,2 @@ +#include "RuntimeManager.h" + diff --git a/launcher/java/RuntimeManager.h b/launcher/java/RuntimeManager.h new file mode 100644 index 00000000..24291d27 --- /dev/null +++ b/launcher/java/RuntimeManager.h @@ -0,0 +1,104 @@ +/* Copyright 2013-2021 MultiMC Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include +#include +#include + +/*! + * List of available Mojang accounts. + * This should be loaded in the background by MultiMC on startup. + */ +class RuntimeManager : public QObject +{ + Q_OBJECT +public: + explicit RuntimeManager(QObject *parent = 0); + virtual ~RuntimeManager() noexcept; + + const RuntimePtr at(int i) const; + int count() const; + + void addRuntime(const RuntimePtr runtime); + void removeRuntime(QString runtimeId); + + // requesting a refresh pushes it to the front of the queue + void requestRefresh(QString runtimeId); + // queuing a refresh will let it go to the back of the queue (unless it's somewhere inside the queue already) + void queueRefresh(QString runtimeId); + + /*! + * Sets the path to load/save the list file from/to. + * If autosave is true, this list will automatically save to the given path whenever it changes. + * THIS FUNCTION DOES NOT LOAD THE LIST. If you set autosave, be sure to call loadList() immediately + * after calling this function to ensure an autosaved change doesn't overwrite the list you intended + * to load. + */ + void setListFilePath(QString path, bool autosave = false); + + bool loadLocal(); + bool saveLocal(); + bool isActive() const; + +protected: + void beginActivity(); + void endActivity(); + +private: + const char* m_name; + uint32_t m_activityCount = 0; +signals: + void listChanged(); + void listActivityChanged(); + void defaultAccountChanged(); + void activityChanged(bool active); + +public slots: + void runtimeChanged(); + void runtimeActivityChanged(bool active); + void fillQueue(); + +private slots: + void tryNext(); + + void taskSucceeded(); + void taskFailed(QString reason); + +protected: + QList m_refreshQueue; + QTimer *m_refreshTimer; + QTimer *m_nextTimer; + shared_qobject_ptr m_currentTask; + + /*! + * Called whenever the list changes. + * This emits the listChanged() signal and autosaves the list (if autosave is enabled). + */ + void onListChanged(); + + QList m_data; + + //! Path to the account list file. Empty string if there isn't one. + QString m_listFilePath; + + /*! + * If true, the account list will automatically save to the account list path when it changes. + * Ignored if m_listFilePath is blank. + */ + bool m_autosave = false; +}; +