Version changing removes any existing version json.
This commit is contained in:
		@@ -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;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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();
 | 
			
		||||
};
 | 
			
		||||
@@ -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)));
 | 
			
		||||
 
 | 
			
		||||
@@ -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()
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
};
 | 
			
		||||
		Reference in New Issue
	
	Block a user