summaryrefslogtreecommitdiffstats
path: root/MultiMC.h
diff options
context:
space:
mode:
Diffstat (limited to 'MultiMC.h')
-rw-r--r--MultiMC.h214
1 files changed, 214 insertions, 0 deletions
diff --git a/MultiMC.h b/MultiMC.h
new file mode 100644
index 00000000..638a442f
--- /dev/null
+++ b/MultiMC.h
@@ -0,0 +1,214 @@
+#pragma once
+
+#include "config.h"
+#include <QApplication>
+#include "MultiMCVersion.h"
+#include <memory>
+#include "logger/QsLog.h"
+#include "logger/QsLogDest.h"
+#include <QFlag>
+
+class MinecraftVersionList;
+class LWJGLVersionList;
+class HttpMetaCache;
+class SettingsObject;
+class InstanceList;
+class MojangAccountList;
+class IconList;
+class QNetworkAccessManager;
+class ForgeVersionList;
+class JavaVersionList;
+class UpdateChecker;
+class NotificationChecker;
+class NewsChecker;
+class StatusChecker;
+
+#if defined(MMC)
+#undef MMC
+#endif
+#define MMC (static_cast<MultiMC *>(QCoreApplication::instance()))
+
+// FIXME: possibly move elsewhere
+enum InstSortMode
+{
+ // Sort alphabetically by name.
+ Sort_Name,
+ // Sort by which instance was launched most recently.
+ Sort_LastLaunch
+};
+
+enum UpdateFlag
+{
+ None = 0x0,
+ RestartOnFinish = 0x1,
+ DryRun = 0x2,
+ OnExit = 0x4
+};
+Q_DECLARE_FLAGS(UpdateFlags, UpdateFlag);
+Q_DECLARE_OPERATORS_FOR_FLAGS(UpdateFlags);
+
+class MultiMC : public QApplication
+{
+ Q_OBJECT
+public:
+ enum Status
+ {
+ Failed,
+ Succeeded,
+ Initialized
+ };
+
+public:
+ MultiMC(int &argc, char **argv, bool root_override = false);
+ virtual ~MultiMC();
+
+ std::shared_ptr<SettingsObject> settings()
+ {
+ return m_settings;
+ }
+
+ std::shared_ptr<InstanceList> instances()
+ {
+ return m_instances;
+ }
+
+ std::shared_ptr<MojangAccountList> accounts()
+ {
+ return m_accounts;
+ }
+
+ std::shared_ptr<IconList> icons();
+
+ Status status()
+ {
+ return m_status;
+ }
+
+ MultiMCVersion version()
+ {
+ return m_version;
+ }
+
+ std::shared_ptr<QNetworkAccessManager> qnam()
+ {
+ return m_qnam;
+ }
+
+ std::shared_ptr<HttpMetaCache> metacache()
+ {
+ return m_metacache;
+ }
+
+ std::shared_ptr<UpdateChecker> updateChecker()
+ {
+ return m_updateChecker;
+ }
+
+ std::shared_ptr<NotificationChecker> notificationChecker()
+ {
+ return m_notificationChecker;
+ }
+
+ std::shared_ptr<NewsChecker> newsChecker()
+ {
+ return m_newsChecker;
+ }
+
+ std::shared_ptr<StatusChecker> statusChecker()
+ {
+ return m_statusChecker;
+ }
+
+ std::shared_ptr<LWJGLVersionList> lwjgllist();
+
+ std::shared_ptr<ForgeVersionList> forgelist();
+
+ std::shared_ptr<MinecraftVersionList> minecraftlist();
+
+ std::shared_ptr<JavaVersionList> javalist();
+
+ void installUpdates(const QString updateFilesDir, UpdateFlags flags = None);
+
+ /*!
+ * Updates the application proxy settings from the settings object.
+ */
+ void updateProxySettings();
+
+ /*!
+ * Opens a json file using either a system default editor, or, if note empty, the editor
+ * specified in the settings
+ */
+ bool openJsonEditor(const QString &filename);
+
+ /// this is the root of the 'installation'. Used for automatic updates
+ const QString &root()
+ {
+ return rootPath;
+ }
+ /// this is the where the binary files reside
+ const QString &bin()
+ {
+ return binPath;
+ }
+ /// this is the work/data path. All user data is here.
+ const QString &data()
+ {
+ return dataPath;
+ }
+ /**
+ * this is the original work path before it was changed by the adjustment mechanism
+ */
+ const QString &origcwd()
+ {
+ return origcwdPath;
+ }
+
+private slots:
+ /**
+ * Do all the things that should be done before we exit
+ */
+ void onExit();
+
+private:
+ void initLogger();
+
+ void initGlobalSettings();
+
+ void initHttpMetaCache();
+
+ void initTranslations();
+
+private:
+ friend class UpdateCheckerTest;
+ friend class DownloadUpdateTaskTest;
+
+ std::shared_ptr<QTranslator> m_qt_translator;
+ std::shared_ptr<QTranslator> m_mmc_translator;
+ std::shared_ptr<SettingsObject> m_settings;
+ std::shared_ptr<InstanceList> m_instances;
+ std::shared_ptr<UpdateChecker> m_updateChecker;
+ std::shared_ptr<NotificationChecker> m_notificationChecker;
+ std::shared_ptr<NewsChecker> m_newsChecker;
+ std::shared_ptr<StatusChecker> m_statusChecker;
+ std::shared_ptr<MojangAccountList> m_accounts;
+ std::shared_ptr<IconList> m_icons;
+ std::shared_ptr<QNetworkAccessManager> m_qnam;
+ std::shared_ptr<HttpMetaCache> m_metacache;
+ std::shared_ptr<LWJGLVersionList> m_lwjgllist;
+ std::shared_ptr<ForgeVersionList> m_forgelist;
+ std::shared_ptr<MinecraftVersionList> m_minecraftlist;
+ std::shared_ptr<JavaVersionList> m_javalist;
+ QsLogging::DestinationPtr m_fileDestination;
+ QsLogging::DestinationPtr m_debugDestination;
+
+ QString m_updateOnExitPath;
+ UpdateFlags m_updateOnExitFlags = None;
+
+ QString rootPath;
+ QString binPath;
+ QString dataPath;
+ QString origcwdPath;
+
+ Status m_status = MultiMC::Failed;
+ MultiMCVersion m_version;
+};