diff options
author | Petr Mrázek <peterix@gmail.com> | 2021-10-13 01:59:25 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2021-10-21 00:47:53 +0200 |
commit | 441ab7eedcb8fe120a7f934684ed5545cdd7a4b6 (patch) | |
tree | 5a1a93e871f5172b3f087e9eb04bf6918bd34ec7 /launcher/Launcher.h | |
parent | 6a4130c9149deb029b496c81e3b874ad834c54b7 (diff) | |
download | PrismLauncher-441ab7eedcb8fe120a7f934684ed5545cdd7a4b6.tar.gz PrismLauncher-441ab7eedcb8fe120a7f934684ed5545cdd7a4b6.tar.bz2 PrismLauncher-441ab7eedcb8fe120a7f934684ed5545cdd7a4b6.zip |
NOISSUE debranding for real, initial work
This is probably very broken on macOS and Windows and will need a lot of work to complete fully.
Diffstat (limited to 'launcher/Launcher.h')
-rw-r--r-- | launcher/Launcher.h | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/launcher/Launcher.h b/launcher/Launcher.h new file mode 100644 index 00000000..468f8a68 --- /dev/null +++ b/launcher/Launcher.h @@ -0,0 +1,235 @@ +#pragma once + +#include <QApplication> +#include <memory> +#include <QDebug> +#include <QFlag> +#include <QIcon> +#include <QDateTime> +#include <QUrl> +#include <updater/GoUpdate.h> + +#include <BaseInstance.h> + +#include "minecraft/launch/MinecraftServerTarget.h" + +class LaunchController; +class LocalPeer; +class InstanceWindow; +class MainWindow; +class SetupWizard; +class FolderInstanceProvider; +class GenericPageProvider; +class QFile; +class HttpMetaCache; +class SettingsObject; +class InstanceList; +class AccountList; +class IconList; +class QNetworkAccessManager; +class JavaInstallList; +class UpdateChecker; +class BaseProfilerFactory; +class BaseDetachedToolFactory; +class TranslationsModel; +class ITheme; +class MCEditTool; +class GAnalytics; + +#if defined(LAUNCHER) +#undef LAUNCHER +#endif +#define LAUNCHER (static_cast<Launcher *>(QCoreApplication::instance())) + +class Launcher : public QApplication +{ + // friends for the purpose of limiting access to deprecated stuff + Q_OBJECT +public: + enum Status + { + StartingUp, + Failed, + Succeeded, + Initialized + }; + +public: + Launcher(int &argc, char **argv); + virtual ~Launcher(); + + GAnalytics *analytics() const + { + return m_analytics; + } + + std::shared_ptr<SettingsObject> settings() const + { + return m_settings; + } + + qint64 timeSinceStart() const + { + return startTime.msecsTo(QDateTime::currentDateTime()); + } + + QIcon getThemedIcon(const QString& name); + + void setIconTheme(const QString& name); + + std::vector<ITheme *> getValidApplicationThemes(); + + void setApplicationTheme(const QString& name, bool initial); + + // DownloadUpdateTask + std::shared_ptr<UpdateChecker> updateChecker() + { + return m_updateChecker; + } + + std::shared_ptr<TranslationsModel> translations(); + + std::shared_ptr<JavaInstallList> javalist(); + + std::shared_ptr<InstanceList> instances() const + { + return m_instances; + } + + FolderInstanceProvider * folderProvider() const + { + return m_instanceFolder; + } + + std::shared_ptr<IconList> icons() const + { + return m_icons; + } + + MCEditTool *mcedit() const + { + return m_mcedit.get(); + } + + std::shared_ptr<AccountList> accounts() const + { + return m_accounts; + } + + Status status() const + { + return m_status; + } + + const QMap<QString, std::shared_ptr<BaseProfilerFactory>> &profilers() const + { + return m_profilers; + } + + /// this is the root of the 'installation'. Used for automatic updates + const QString &root() + { + return m_rootPath; + } + + /*! + * Opens a json file using either a system default editor, or, if not empty, the editor + * specified in the settings + */ + bool openJsonEditor(const QString &filename); + + InstanceWindow *showInstanceWindow(InstancePtr instance, QString page = QString()); + MainWindow *showMainWindow(bool minimized = false); + + void updateIsRunning(bool running); + bool updatesAreAllowed(); + + void ShowGlobalSettings(class QWidget * parent, QString open_page = QString()); + +signals: + void updateAllowedChanged(bool status); + void globalSettingsAboutToOpen(); + void globalSettingsClosed(); + +public slots: + bool launch( + InstancePtr instance, + bool online = true, + BaseProfilerFactory *profiler = nullptr, + MinecraftServerTargetPtr serverToJoin = nullptr + ); + bool kill(InstancePtr instance); + +private slots: + void on_windowClose(); + void messageReceived(const QString & message); + void controllerSucceeded(); + void controllerFailed(const QString & error); + void analyticsSettingChanged(const Setting &setting, QVariant value); + void setupWizardFinished(int status); + +private: + bool createSetupWizard(); + void performMainStartupAction(); + + // sets the fatal error message and m_status to Failed. + void showFatalErrorMessage(const QString & title, const QString & content); + +private: + void addRunningInstance(); + void subRunningInstance(); + bool shouldExitNow() const; + +private: + QDateTime startTime; + + std::shared_ptr<SettingsObject> m_settings; + std::shared_ptr<InstanceList> m_instances; + FolderInstanceProvider * m_instanceFolder = nullptr; + std::shared_ptr<IconList> m_icons; + std::shared_ptr<UpdateChecker> m_updateChecker; + std::shared_ptr<AccountList> m_accounts; + std::shared_ptr<JavaInstallList> m_javalist; + std::shared_ptr<TranslationsModel> m_translations; + std::shared_ptr<GenericPageProvider> m_globalSettingsProvider; + std::map<QString, std::unique_ptr<ITheme>> m_themes; + std::unique_ptr<MCEditTool> m_mcedit; + + QMap<QString, std::shared_ptr<BaseProfilerFactory>> m_profilers; + + QString m_rootPath; + Status m_status = Launcher::StartingUp; + +#if defined Q_OS_WIN32 + // used on Windows to attach the standard IO streams + bool consoleAttached = false; +#endif + + // FIXME: attach to instances instead. + struct InstanceXtras + { + InstanceWindow * window = nullptr; + shared_qobject_ptr<LaunchController> controller; + }; + std::map<QString, InstanceXtras> m_instanceExtras; + + // main state variables + size_t m_openWindows = 0; + size_t m_runningInstances = 0; + bool m_updateRunning = false; + + // main window, if any + MainWindow * m_mainWindow = nullptr; + + // peer MultiMC instance connector - used to implement single instance MultiMC and signalling + LocalPeer * m_peerInstance = nullptr; + + GAnalytics * m_analytics = nullptr; + SetupWizard * m_setupWizard = nullptr; +public: + QString m_instanceIdToLaunch; + QString m_serverToJoin; + bool m_liveCheck = false; + QUrl m_zipToImport; + std::unique_ptr<QFile> logFile; +}; |