Version changing removes any existing version json.

This commit is contained in:
Petr Mrázek 2013-10-10 01:47:48 +02:00
parent eaf0cbeafc
commit 73f8bc5c92
7 changed files with 124 additions and 103 deletions

View File

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>527</width> <width>527</width>
<height>68</height> <height>113</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
@ -28,12 +28,6 @@
<layout class="QVBoxLayout" name="verticalLayout_2"> <layout class="QVBoxLayout" name="verticalLayout_2">
<item> <item>
<widget class="QLabel" name="label_ModText"> <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"> <property name="text">
<string>Select a mod to view title and authors...</string> <string>Select a mod to view title and authors...</string>
</property> </property>
@ -53,12 +47,6 @@
</item> </item>
<item> <item>
<widget class="QLabel" name="label_ModDescription"> <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"> <property name="text">
<string>Select a mod to view description...</string> <string>Select a mod to view description...</string>
</property> </property>

View File

@ -606,6 +606,15 @@ void MainWindow::on_actionChangeInstMCVersion_triggered()
vselect.setFilter(1, "OneSix"); vselect.setFilter(1, "OneSix");
if (vselect.exec() && vselect.selectedVersion()) 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()); m_selectedInstance->setIntendedVersionId(vselect.selectedVersion()->descriptor());
} }
} }

View File

@ -3,7 +3,7 @@
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
@ -33,9 +33,9 @@ class BaseInstancePrivate;
/*! /*!
* \brief Base class for instances. * \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. * provides a standard interface for all instances.
* *
* To create a new instance type, create a new class inheriting from this class * To create a new instance type, create a new class inheriting from this class
* and implement the pure virtual functions. * and implement the pure virtual functions.
*/ */
@ -44,66 +44,72 @@ class BaseInstance : public QObject
Q_OBJECT Q_OBJECT
protected: protected:
/// no-touchy! /// 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: public:
/// virtual destructor to make sure the destruction is COMPLETE /// virtual destructor to make sure the destruction is COMPLETE
virtual ~BaseInstance() {}; 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(); 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; QString id() const;
/// get the type of this instance /// get the type of this instance
QString instanceType() const; QString instanceType() const;
/// Path to the instance's root directory. /// Path to the instance's root directory.
QString instanceRoot() const; QString instanceRoot() const;
/// Path to the instance's minecraft directory. /// Path to the instance's minecraft directory.
QString minecraftRoot() const; QString minecraftRoot() const;
QString name() const; QString name() const;
void setName(QString val); void setName(QString val);
QString iconKey() const; QString iconKey() const;
void setIconKey(QString val); void setIconKey(QString val);
QString notes() const; QString notes() const;
void setNotes(QString val); void setNotes(QString val);
QString group() const; QString group() const;
void setGroupInitial(QString val); void setGroupInitial(QString val);
void setGroupPost(QString val); void setGroupPost(QString val);
virtual QString intendedVersionId() const = 0; virtual QString intendedVersionId() const = 0;
virtual bool setIntendedVersionId(QString version) = 0; virtual bool setIntendedVersionId(QString version) = 0;
virtual bool versionIsCustom() = 0;
/*! /*!
* The instance's current version. * 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. * different from the intendedVersion, the instance should be updated.
* \warning Don't change this value unless you know what you're doing. * \warning Don't change this value unless you know what you're doing.
*/ */
virtual QString currentVersionId() const = 0; 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. * Whether or not Minecraft should be downloaded when the instance is launched.
*/ */
virtual bool shouldUpdate() const = 0; virtual bool shouldUpdate() const = 0;
virtual void setShouldUpdate(bool val) = 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; QString baseJar() const;
/// the default base jar of this instance /// the default base jar of this instance
virtual QString defaultBaseJar() const = 0; virtual QString defaultBaseJar() const = 0;
/// the default custom base jar of this instance /// the default custom base jar of this instance
virtual QString defaultCustomBaseJar() const = 0; virtual QString defaultCustomBaseJar() const = 0;
/*! /*!
* Whether or not custom base jar is used * Whether or not custom base jar is used
*/ */
@ -114,7 +120,7 @@ public:
*/ */
QString customBaseJar() const; QString customBaseJar() const;
void setCustomBaseJar(QString val); void setCustomBaseJar(QString val);
/** /**
* Gets the time that the instance was last launched. * Gets the time that the instance was last launched.
* Stored in milliseconds since epoch. * Stored in milliseconds since epoch.
@ -122,53 +128,54 @@ public:
qint64 lastLaunch() const; qint64 lastLaunch() const;
/// Sets the last launched time to 'val' milliseconds since epoch /// Sets the last launched time to 'val' milliseconds since epoch
void setLastLaunch(qint64 val = QDateTime::currentMSecsSinceEpoch()); void setLastLaunch(qint64 val = QDateTime::currentMSecsSinceEpoch());
/*! /*!
* \brief Gets the instance list that this instance is a part of. * \brief Gets the instance list that this instance is a part of.
* Returns NULL if this instance is not in a list * Returns NULL if this instance is not in a list
* (the parent is not an InstanceList). * (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; InstanceList *instList() const;
/*! /*!
* \brief Gets a pointer to this instance's version list. * \brief Gets a pointer to this instance's version list.
* \return A pointer to the available version list for this instance. * \return A pointer to the available version list for this instance.
*/ */
virtual std::shared_ptr<BaseVersionList> versionList() const; virtual std::shared_ptr<BaseVersionList> versionList() const;
/*! /*!
* \brief Gets this instance's settings object. * \brief Gets this instance's settings object.
* This settings object stores instance-specific settings. * This settings object stores instance-specific settings.
* \return A pointer to this instance's settings object. * \return A pointer to this instance's settings object.
*/ */
virtual SettingsObject &settings() const; virtual SettingsObject &settings() const;
/// returns a valid update task if update is needed, NULL otherwise /// 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 /// returns a valid minecraft process, ready for launch
virtual MinecraftProcess* prepareForLaunch(LoginResponse response) = 0; virtual MinecraftProcess *prepareForLaunch(LoginResponse response) = 0;
/// do any necessary cleanups after the instance finishes. also runs before 'prepareForLaunch' /// do any necessary cleanups after the instance finishes. also runs before
/// 'prepareForLaunch'
virtual void cleanupAfterRun() = 0; virtual void cleanupAfterRun() = 0;
/// create a mod edit dialog for the instance /// 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? /// is a particular action enabled with this instance selected?
virtual bool menuActionEnabled(QString action_name) const = 0; virtual bool menuActionEnabled(QString action_name) const = 0;
virtual QString getStatusbarDescription() = 0; virtual QString getStatusbarDescription() = 0;
/// FIXME: this really should be elsewhere... /// FIXME: this really should be elsewhere...
virtual QString instanceConfigFolder() const = 0; virtual QString instanceConfigFolder() const = 0;
signals: signals:
/*! /*!
* \brief Signal emitted when properties relevant to the instance view change * \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 * \brief Signal emitted when groups are affected in any way
*/ */
@ -176,12 +183,11 @@ signals:
/*! /*!
* \brief The instance just got nuked. Hurray! * \brief The instance just got nuked. Hurray!
*/ */
void nuked(BaseInstance * inst); void nuked(BaseInstance *inst);
protected: protected:
std::shared_ptr<BaseInstancePrivate> inst_d; std::shared_ptr<BaseInstancePrivate> inst_d;
}; };
// pointer for lazy people // pointer for lazy people
typedef std::shared_ptr<BaseInstance> InstancePtr; typedef std::shared_ptr<BaseInstance> InstancePtr;

View File

@ -9,21 +9,22 @@ class LegacyInstance : public BaseInstance
{ {
Q_OBJECT Q_OBJECT
public: 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 /// Path to the instance's minecraft.jar
QString runnableJar() const; QString runnableJar() const;
//! Path to the instance's modlist file. //! Path to the instance's modlist file.
QString modListFile() const; QString modListFile() const;
////// Mod Lists ////// ////// Mod Lists //////
std::shared_ptr<ModList> jarModList(); std::shared_ptr<ModList> jarModList();
std::shared_ptr<ModList> coreModList(); std::shared_ptr<ModList> coreModList();
std::shared_ptr<ModList> loaderModList(); std::shared_ptr<ModList> loaderModList();
std::shared_ptr<ModList> texturePackList(); std::shared_ptr<ModList> texturePackList();
////// Directories ////// ////// Directories //////
QString savesDir() const; QString savesDir() const;
QString texturePacksDir() const; QString texturePacksDir() const;
@ -33,40 +34,47 @@ public:
QString coreModsDir() const; QString coreModsDir() const;
QString resourceDir() const; QString resourceDir() const;
virtual QString instanceConfigFolder() const; virtual QString instanceConfigFolder() const;
/*! /*!
* Whether or not the instance's minecraft.jar needs to be rebuilt. * 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. * re-added to a fresh minecraft.jar file.
*/ */
bool shouldRebuild() const; bool shouldRebuild() const;
void setShouldRebuild(bool val); void setShouldRebuild(bool val);
virtual QString currentVersionId() const; virtual QString currentVersionId() const;
virtual void setCurrentVersionId(QString val); virtual void setCurrentVersionId(QString val);
//! The version of LWJGL that this instance uses. //! The version of LWJGL that this instance uses.
QString lwjglVersion() const; QString lwjglVersion() const;
/// st the version of LWJGL libs this instance will use /// st the version of LWJGL libs this instance will use
void setLWJGLVersion(QString val); void setLWJGLVersion(QString val);
virtual QString intendedVersionId() const; 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 bool shouldUpdate() const;
virtual void setShouldUpdate(bool val); virtual void setShouldUpdate(bool val);
virtual BaseUpdate* doUpdate(); virtual BaseUpdate *doUpdate();
virtual MinecraftProcess* prepareForLaunch(LoginResponse response); virtual MinecraftProcess *prepareForLaunch(LoginResponse response);
virtual void cleanupAfterRun(); virtual void cleanupAfterRun();
virtual QDialog * createModEditDialog ( QWidget* parent ); virtual QDialog *createModEditDialog(QWidget *parent);
virtual QString defaultBaseJar() const; virtual QString defaultBaseJar() const;
virtual QString defaultCustomBaseJar() const; virtual QString defaultCustomBaseJar() const;
bool menuActionEnabled ( QString action_name ) const; bool menuActionEnabled(QString action_name) const;
virtual QString getStatusbarDescription(); virtual QString getStatusbarDescription();
protected slots: protected
slots:
virtual void jarModsChanged(); virtual void jarModsChanged();
}; };

View File

@ -57,7 +57,7 @@ void LegacyUpdate::lwjglStart()
auto worker = MMC->qnam(); auto worker = MMC->qnam();
QNetworkRequest req(realUrl); QNetworkRequest req(realUrl);
req.setRawHeader("Host", hostname.toLatin1()); 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); QNetworkReply *rep = worker->get(req);
m_reply = std::shared_ptr<QNetworkReply>(rep); m_reply = std::shared_ptr<QNetworkReply>(rep);
@ -100,7 +100,7 @@ void LegacyUpdate::lwjglFinished(QNetworkReply *reply)
QString hostname = realUrl.host(); QString hostname = realUrl.host();
QNetworkRequest req(redirectedTo); QNetworkRequest req(redirectedTo);
req.setRawHeader("Host", hostname.toLatin1()); 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); QNetworkReply *rep = worker->get(req);
connect(rep, SIGNAL(downloadProgress(qint64, qint64)), connect(rep, SIGNAL(downloadProgress(qint64, qint64)),
SIGNAL(progress(qint64, qint64))); SIGNAL(progress(qint64, qint64)));

View File

@ -192,6 +192,11 @@ bool OneSixInstance::setIntendedVersionId(QString version)
{ {
settings().set("IntendedVersion", version); settings().set("IntendedVersion", version);
setShouldUpdate(true); setShouldUpdate(true);
auto pathCustom = PathCombine(instanceRoot(), "custom.json");
auto pathOrig = PathCombine(instanceRoot(), "version.json");
QFile::remove(pathCustom);
QFile::remove(pathOrig);
reloadFullVersion();
return true; return true;
} }
@ -271,7 +276,11 @@ bool OneSixInstance::reloadFullVersion()
d->version = version; d->version = version;
return true; return true;
} }
return false; else
{
d->version.reset();
return false;
}
} }
std::shared_ptr<OneSixVersion> OneSixInstance::getFullVersion() std::shared_ptr<OneSixVersion> OneSixInstance::getFullVersion()

View File

@ -10,33 +10,33 @@ class OneSixInstance : public BaseInstance
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit OneSixInstance(const QString &rootDir, SettingsObject * settings, QObject *parent = 0); explicit OneSixInstance(const QString &rootDir, SettingsObject *settings,
QObject *parent = 0);
////// Mod Lists ////// ////// Mod Lists //////
std::shared_ptr<ModList> loaderModList(); std::shared_ptr<ModList> loaderModList();
std::shared_ptr<ModList> resourcePackList(); std::shared_ptr<ModList> resourcePackList();
////// Directories ////// ////// Directories //////
QString resourcePacksDir() const; QString resourcePacksDir() const;
QString loaderModsDir() const; QString loaderModsDir() const;
virtual QString instanceConfigFolder() const; virtual QString instanceConfigFolder() const;
virtual BaseUpdate* doUpdate(); virtual BaseUpdate *doUpdate();
virtual MinecraftProcess* prepareForLaunch ( LoginResponse response ); virtual MinecraftProcess *prepareForLaunch(LoginResponse response);
virtual void cleanupAfterRun(); virtual void cleanupAfterRun();
virtual QString intendedVersionId() const; virtual QString intendedVersionId() const;
virtual bool setIntendedVersionId ( QString version ); virtual bool setIntendedVersionId(QString version);
virtual QString currentVersionId() const; virtual QString currentVersionId() const;
// virtual void setCurrentVersionId ( QString val ) {}; // virtual void setCurrentVersionId ( QString val ) {};
virtual bool shouldUpdate() const; virtual bool shouldUpdate() const;
virtual void setShouldUpdate(bool val); 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! /// reload the full version json file. return true on success!
bool reloadFullVersion(); bool reloadFullVersion();
/// get the current full version info /// get the current full version info
@ -46,13 +46,14 @@ public:
/// customize the current base version /// customize the current base version
bool customizeVersion(); bool customizeVersion();
/// is the current version original, or custom? /// is the current version original, or custom?
bool versionIsCustom(); virtual bool versionIsCustom() override;
virtual QString defaultBaseJar() const; virtual QString defaultBaseJar() const;
virtual QString defaultCustomBaseJar() const; virtual QString defaultCustomBaseJar() const;
virtual bool menuActionEnabled ( QString action_name ) const; virtual bool menuActionEnabled(QString action_name) const;
virtual QString getStatusbarDescription(); virtual QString getStatusbarDescription();
private: private:
QStringList processMinecraftArgs( LoginResponse response ); QStringList processMinecraftArgs(LoginResponse response);
}; };