diff options
author | Petr Mrázek <peterix@gmail.com> | 2013-10-10 01:47:48 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2013-10-10 01:47:48 +0200 |
commit | 73f8bc5c92cb4a9b7ce507309001c6b206b5c8eb (patch) | |
tree | da0b7c09fcd105a4144387e4261ad3aabc910862 | |
parent | eaf0cbeafc5ff70bd2bb0d66b5f5980a71f824c5 (diff) | |
download | MultiMC-73f8bc5c92cb4a9b7ce507309001c6b206b5c8eb.tar MultiMC-73f8bc5c92cb4a9b7ce507309001c6b206b5c8eb.tar.gz MultiMC-73f8bc5c92cb4a9b7ce507309001c6b206b5c8eb.tar.lz MultiMC-73f8bc5c92cb4a9b7ce507309001c6b206b5c8eb.tar.xz MultiMC-73f8bc5c92cb4a9b7ce507309001c6b206b5c8eb.zip |
Version changing removes any existing version json.
-rw-r--r-- | gui/MCModInfoFrame.ui | 14 | ||||
-rw-r--r-- | gui/mainwindow.cpp | 9 | ||||
-rw-r--r-- | logic/BaseInstance.h | 98 | ||||
-rw-r--r-- | logic/LegacyInstance.h | 52 | ||||
-rw-r--r-- | logic/LegacyUpdate.cpp | 4 | ||||
-rw-r--r-- | logic/OneSixInstance.cpp | 11 | ||||
-rw-r--r-- | logic/OneSixInstance.h | 39 |
7 files changed, 124 insertions, 103 deletions
diff --git a/gui/MCModInfoFrame.ui b/gui/MCModInfoFrame.ui index b24251ae..60e0a65c 100644 --- a/gui/MCModInfoFrame.ui +++ b/gui/MCModInfoFrame.ui @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>527</width> - <height>68</height> + <height>113</height> </rect> </property> <property name="sizePolicy"> @@ -28,12 +28,6 @@ <layout class="QVBoxLayout" name="verticalLayout_2"> <item> <widget class="QLabel" name="label_ModText"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> <property name="text"> <string>Select a mod to view title and authors...</string> </property> @@ -53,12 +47,6 @@ </item> <item> <widget class="QLabel" name="label_ModDescription"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> <property name="text"> <string>Select a mod to view description...</string> </property> diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index 5784b85a..c726591d 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -606,6 +606,15 @@ void MainWindow::on_actionChangeInstMCVersion_triggered() vselect.setFilter(1, "OneSix"); if (vselect.exec() && vselect.selectedVersion()) { + if (m_selectedInstance->versionIsCustom()) + { + auto result = QMessageBox::warning( + this, tr("Are you sure?"), + tr("This will remove any library/version customization you did previously. " + "This includes things like Forge install and similar."), QMessageBox::Ok, QMessageBox::Abort); + if(result != QMessageBox::Ok) + return; + } m_selectedInstance->setIntendedVersionId(vselect.selectedVersion()->descriptor()); } } diff --git a/logic/BaseInstance.h b/logic/BaseInstance.h index e360d3ae..b083c24a 100644 --- a/logic/BaseInstance.h +++ b/logic/BaseInstance.h @@ -3,7 +3,7 @@ * 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 @@ -33,9 +33,9 @@ class BaseInstancePrivate; /*! * \brief Base class for instances. - * This class implements many functions that are common between instances and + * This class implements many functions that are common between instances and * provides a standard interface for all instances. - * + * * To create a new instance type, create a new class inheriting from this class * and implement the pure virtual functions. */ @@ -44,66 +44,72 @@ class BaseInstance : public QObject Q_OBJECT protected: /// no-touchy! - BaseInstance(BaseInstancePrivate * d, const QString &rootDir, SettingsObject * settings, QObject *parent = 0); + BaseInstance(BaseInstancePrivate *d, const QString &rootDir, SettingsObject *settings, + QObject *parent = 0); + public: /// virtual destructor to make sure the destruction is COMPLETE virtual ~BaseInstance() {}; - - /// nuke thoroughly - deletes the instance contents, notifies the list/model which is responsible of cleaning up the husk + + /// nuke thoroughly - deletes the instance contents, notifies the list/model which is + /// responsible of cleaning up the husk void nuke(); - - /// The instance's ID. The ID SHALL be determined by MMC internally. The ID IS guaranteed to be unique. + + /// The instance's ID. The ID SHALL be determined by MMC internally. The ID IS guaranteed to + /// be unique. QString id() const; - + /// get the type of this instance QString instanceType() const; - + /// Path to the instance's root directory. QString instanceRoot() const; - + /// Path to the instance's minecraft directory. QString minecraftRoot() const; - + QString name() const; void setName(QString val); - + QString iconKey() const; void setIconKey(QString val); - + QString notes() const; void setNotes(QString val); - + QString group() const; void setGroupInitial(QString val); void setGroupPost(QString val); - - + virtual QString intendedVersionId() const = 0; virtual bool setIntendedVersionId(QString version) = 0; - + + virtual bool versionIsCustom() = 0; + /*! * The instance's current version. - * This value represents the instance's current version. If this value is + * This value represents the instance's current version. If this value is * different from the intendedVersion, the instance should be updated. * \warning Don't change this value unless you know what you're doing. */ virtual QString currentVersionId() const = 0; - //virtual void setCurrentVersionId(QString val) = 0; - + // virtual void setCurrentVersionId(QString val) = 0; + /*! * Whether or not Minecraft should be downloaded when the instance is launched. */ virtual bool shouldUpdate() const = 0; virtual void setShouldUpdate(bool val) = 0; - /// Get the curent base jar of this instance. By default, it's the versions/$version/$version.jar + /// Get the curent base jar of this instance. By default, it's the + /// versions/$version/$version.jar QString baseJar() const; /// the default base jar of this instance virtual QString defaultBaseJar() const = 0; /// the default custom base jar of this instance virtual QString defaultCustomBaseJar() const = 0; - + /*! * Whether or not custom base jar is used */ @@ -114,7 +120,7 @@ public: */ QString customBaseJar() const; void setCustomBaseJar(QString val); - + /** * Gets the time that the instance was last launched. * Stored in milliseconds since epoch. @@ -122,53 +128,54 @@ public: qint64 lastLaunch() const; /// Sets the last launched time to 'val' milliseconds since epoch void setLastLaunch(qint64 val = QDateTime::currentMSecsSinceEpoch()); - + /*! - * \brief Gets the instance list that this instance is a part of. - * Returns NULL if this instance is not in a list + * \brief Gets the instance list that this instance is a part of. + * Returns NULL if this instance is not in a list * (the parent is not an InstanceList). - * \return A pointer to the InstanceList containing this instance. + * \return A pointer to the InstanceList containing this instance. */ InstanceList *instList() const; - + /*! * \brief Gets a pointer to this instance's version list. * \return A pointer to the available version list for this instance. */ virtual std::shared_ptr<BaseVersionList> versionList() const; - + /*! * \brief Gets this instance's settings object. * This settings object stores instance-specific settings. * \return A pointer to this instance's settings object. */ virtual SettingsObject &settings() const; - + /// returns a valid update task if update is needed, NULL otherwise - virtual BaseUpdate* doUpdate() = 0; - + virtual BaseUpdate *doUpdate() = 0; + /// returns a valid minecraft process, ready for launch - virtual MinecraftProcess* prepareForLaunch(LoginResponse response) = 0; - - /// do any necessary cleanups after the instance finishes. also runs before 'prepareForLaunch' + virtual MinecraftProcess *prepareForLaunch(LoginResponse response) = 0; + + /// do any necessary cleanups after the instance finishes. also runs before + /// 'prepareForLaunch' virtual void cleanupAfterRun() = 0; - + /// create a mod edit dialog for the instance - virtual QDialog * createModEditDialog ( QWidget* parent ) = 0; - + virtual QDialog *createModEditDialog(QWidget *parent) = 0; + /// is a particular action enabled with this instance selected? virtual bool menuActionEnabled(QString action_name) const = 0; - + virtual QString getStatusbarDescription() = 0; - + /// FIXME: this really should be elsewhere... virtual QString instanceConfigFolder() const = 0; - + signals: /*! * \brief Signal emitted when properties relevant to the instance view change */ - void propertiesChanged(BaseInstance * inst); + void propertiesChanged(BaseInstance *inst); /*! * \brief Signal emitted when groups are affected in any way */ @@ -176,12 +183,11 @@ signals: /*! * \brief The instance just got nuked. Hurray! */ - void nuked(BaseInstance * inst); - + void nuked(BaseInstance *inst); + protected: std::shared_ptr<BaseInstancePrivate> inst_d; }; // pointer for lazy people typedef std::shared_ptr<BaseInstance> InstancePtr; - diff --git a/logic/LegacyInstance.h b/logic/LegacyInstance.h index d7438cca..8bf334f6 100644 --- a/logic/LegacyInstance.h +++ b/logic/LegacyInstance.h @@ -9,21 +9,22 @@ class LegacyInstance : public BaseInstance { Q_OBJECT public: - - explicit LegacyInstance(const QString &rootDir, SettingsObject * settings, QObject *parent = 0); - + + explicit LegacyInstance(const QString &rootDir, SettingsObject *settings, + QObject *parent = 0); + /// Path to the instance's minecraft.jar QString runnableJar() const; - + //! Path to the instance's modlist file. QString modListFile() const; - + ////// Mod Lists ////// std::shared_ptr<ModList> jarModList(); std::shared_ptr<ModList> coreModList(); std::shared_ptr<ModList> loaderModList(); std::shared_ptr<ModList> texturePackList(); - + ////// Directories ////// QString savesDir() const; QString texturePacksDir() const; @@ -33,40 +34,47 @@ public: QString coreModsDir() const; QString resourceDir() const; virtual QString instanceConfigFolder() const; - + /*! * Whether or not the instance's minecraft.jar needs to be rebuilt. - * If this is true, when the instance launches, its jar mods will be + * If this is true, when the instance launches, its jar mods will be * re-added to a fresh minecraft.jar file. */ bool shouldRebuild() const; void setShouldRebuild(bool val); - + virtual QString currentVersionId() const; virtual void setCurrentVersionId(QString val); - + //! The version of LWJGL that this instance uses. QString lwjglVersion() const; /// st the version of LWJGL libs this instance will use void setLWJGLVersion(QString val); - + virtual QString intendedVersionId() const; - virtual bool setIntendedVersionId ( QString version ); - + virtual bool setIntendedVersionId(QString version); + // the `version' of Legacy instances is defined by the launcher code. + // in contrast with OneSix, where `version' is described in a json file + virtual bool versionIsCustom() override + { + return false; + }; + virtual bool shouldUpdate() const; virtual void setShouldUpdate(bool val); - virtual BaseUpdate* doUpdate(); - - virtual MinecraftProcess* prepareForLaunch(LoginResponse response); + virtual BaseUpdate *doUpdate(); + + virtual MinecraftProcess *prepareForLaunch(LoginResponse response); virtual void cleanupAfterRun(); - virtual QDialog * createModEditDialog ( QWidget* parent ); - + virtual QDialog *createModEditDialog(QWidget *parent); + virtual QString defaultBaseJar() const; virtual QString defaultCustomBaseJar() const; - - bool menuActionEnabled ( QString action_name ) const; + + bool menuActionEnabled(QString action_name) const; virtual QString getStatusbarDescription(); - -protected slots: + +protected +slots: virtual void jarModsChanged(); };
\ No newline at end of file diff --git a/logic/LegacyUpdate.cpp b/logic/LegacyUpdate.cpp index 5f5a2e52..66b4bf8a 100644 --- a/logic/LegacyUpdate.cpp +++ b/logic/LegacyUpdate.cpp @@ -57,7 +57,7 @@ void LegacyUpdate::lwjglStart() auto worker = MMC->qnam(); QNetworkRequest req(realUrl); req.setRawHeader("Host", hostname.toLatin1()); - req.setHeader(QNetworkRequest::UserAgentHeader, "Wget/1.14 (linux-gnu)"); + req.setHeader(QNetworkRequest::UserAgentHeader, "MultiMC/5.0 (Cached)"); QNetworkReply *rep = worker->get(req); m_reply = std::shared_ptr<QNetworkReply>(rep); @@ -100,7 +100,7 @@ void LegacyUpdate::lwjglFinished(QNetworkReply *reply) QString hostname = realUrl.host(); QNetworkRequest req(redirectedTo); req.setRawHeader("Host", hostname.toLatin1()); - req.setHeader(QNetworkRequest::UserAgentHeader, "Wget/1.14 (linux-gnu)"); + req.setHeader(QNetworkRequest::UserAgentHeader, "MultiMC/5.0 (Cached)"); QNetworkReply *rep = worker->get(req); connect(rep, SIGNAL(downloadProgress(qint64, qint64)), SIGNAL(progress(qint64, qint64))); diff --git a/logic/OneSixInstance.cpp b/logic/OneSixInstance.cpp index ad3f9f58..1b7b5bb4 100644 --- a/logic/OneSixInstance.cpp +++ b/logic/OneSixInstance.cpp @@ -192,6 +192,11 @@ bool OneSixInstance::setIntendedVersionId(QString version) { settings().set("IntendedVersion", version); setShouldUpdate(true); + auto pathCustom = PathCombine(instanceRoot(), "custom.json"); + auto pathOrig = PathCombine(instanceRoot(), "version.json"); + QFile::remove(pathCustom); + QFile::remove(pathOrig); + reloadFullVersion(); return true; } @@ -271,7 +276,11 @@ bool OneSixInstance::reloadFullVersion() d->version = version; return true; } - return false; + else + { + d->version.reset(); + return false; + } } std::shared_ptr<OneSixVersion> OneSixInstance::getFullVersion() diff --git a/logic/OneSixInstance.h b/logic/OneSixInstance.h index 8f5c22e6..d2276afc 100644 --- a/logic/OneSixInstance.h +++ b/logic/OneSixInstance.h @@ -10,33 +10,33 @@ class OneSixInstance : public BaseInstance { Q_OBJECT public: - explicit OneSixInstance(const QString &rootDir, SettingsObject * settings, QObject *parent = 0); - - + explicit OneSixInstance(const QString &rootDir, SettingsObject *settings, + QObject *parent = 0); + ////// Mod Lists ////// std::shared_ptr<ModList> loaderModList(); std::shared_ptr<ModList> resourcePackList(); - + ////// Directories ////// QString resourcePacksDir() const; QString loaderModsDir() const; virtual QString instanceConfigFolder() const; - - virtual BaseUpdate* doUpdate(); - virtual MinecraftProcess* prepareForLaunch ( LoginResponse response ); + + virtual BaseUpdate *doUpdate(); + virtual MinecraftProcess *prepareForLaunch(LoginResponse response); virtual void cleanupAfterRun(); - + virtual QString intendedVersionId() const; - virtual bool setIntendedVersionId ( QString version ); - + virtual bool setIntendedVersionId(QString version); + virtual QString currentVersionId() const; // virtual void setCurrentVersionId ( QString val ) {}; - + virtual bool shouldUpdate() const; virtual void setShouldUpdate(bool val); - - virtual QDialog * createModEditDialog ( QWidget* parent ); - + + virtual QDialog *createModEditDialog(QWidget *parent); + /// reload the full version json file. return true on success! bool reloadFullVersion(); /// get the current full version info @@ -46,13 +46,14 @@ public: /// customize the current base version bool customizeVersion(); /// is the current version original, or custom? - bool versionIsCustom(); - + virtual bool versionIsCustom() override; + virtual QString defaultBaseJar() const; virtual QString defaultCustomBaseJar() const; - - virtual bool menuActionEnabled ( QString action_name ) const; + + virtual bool menuActionEnabled(QString action_name) const; virtual QString getStatusbarDescription(); + private: - QStringList processMinecraftArgs( LoginResponse response ); + QStringList processMinecraftArgs(LoginResponse response); };
\ No newline at end of file |