Change naming from Derp -> OneSix until the new instance type supports legacy

This commit is contained in:
Jan Dalheimer 2014-01-24 18:12:02 +01:00
parent 156bc8f276
commit 7d5787025a
35 changed files with 375 additions and 821 deletions

View file

@ -13,228 +13,60 @@
* limitations under the License.
*/
#include "logic/DerpVersion.h"
#include "logic/DerpLibrary.h"
#include "logic/DerpRule.h"
#include "OneSixVersion.h"
#include "logger/QsLog.h"
#include <QDebug>
std::shared_ptr<DerpVersion> fromJsonV4(QJsonObject root,
std::shared_ptr<DerpVersion> fullVersion)
#include "OneSixVersionBuilder.h"
OneSixVersion::OneSixVersion(OneSixInstance *instance, QObject *parent)
: QAbstractListModel(parent), m_instance(instance)
{
fullVersion->id = root.value("id").toString();
fullVersion->mainClass = root.value("mainClass").toString();
auto procArgsValue = root.value("processArguments");
if (procArgsValue.isString())
{
fullVersion->processArguments = procArgsValue.toString();
QString toCompare = fullVersion->processArguments.toLower();
if (toCompare == "legacy")
{
fullVersion->minecraftArguments = " ${auth_player_name} ${auth_session}";
}
else if (toCompare == "username_session")
{
fullVersion->minecraftArguments =
"--username ${auth_player_name} --session ${auth_session}";
}
else if (toCompare == "username_session_version")
{
fullVersion->minecraftArguments = "--username ${auth_player_name} "
"--session ${auth_session} "
"--version ${profile_name}";
}
}
auto minecraftArgsValue = root.value("minecraftArguments");
if (minecraftArgsValue.isString())
{
fullVersion->minecraftArguments = minecraftArgsValue.toString();
}
auto minecraftTypeValue = root.value("type");
if (minecraftTypeValue.isString())
{
fullVersion->type = minecraftTypeValue.toString();
}
fullVersion->releaseTime = root.value("releaseTime").toString();
fullVersion->time = root.value("time").toString();
auto assetsID = root.value("assets");
if (assetsID.isString())
{
fullVersion->assets = assetsID.toString();
}
else
{
fullVersion->assets = "legacy";
}
QLOG_DEBUG() << "Assets version:" << fullVersion->assets;
// Iterate through the list, if it's a list.
auto librariesValue = root.value("libraries");
if (!librariesValue.isArray())
return fullVersion;
QJsonArray libList = root.value("libraries").toArray();
for (auto libVal : libList)
{
if (!libVal.isObject())
{
continue;
}
QJsonObject libObj = libVal.toObject();
// Library name
auto nameVal = libObj.value("name");
if (!nameVal.isString())
continue;
std::shared_ptr<DerpLibrary> library(new DerpLibrary(nameVal.toString()));
auto urlVal = libObj.value("url");
if (urlVal.isString())
{
library->setBaseUrl(urlVal.toString());
}
auto hintVal = libObj.value("MMC-hint");
if (hintVal.isString())
{
library->setHint(hintVal.toString());
}
auto urlAbsVal = libObj.value("MMC-absoluteUrl");
auto urlAbsuVal = libObj.value("MMC-absulute_url"); // compatibility
if (urlAbsVal.isString())
{
library->setAbsoluteUrl(urlAbsVal.toString());
}
else if (urlAbsuVal.isString())
{
library->setAbsoluteUrl(urlAbsuVal.toString());
}
// Extract excludes (if any)
auto extractVal = libObj.value("extract");
if (extractVal.isObject())
{
QStringList excludes;
auto extractObj = extractVal.toObject();
auto excludesVal = extractObj.value("exclude");
if (excludesVal.isArray())
{
auto excludesList = excludesVal.toArray();
for (auto excludeVal : excludesList)
{
if (excludeVal.isString())
excludes.append(excludeVal.toString());
}
library->extract_excludes = excludes;
}
}
auto nativesVal = libObj.value("natives");
if (nativesVal.isObject())
{
library->setIsNative();
auto nativesObj = nativesVal.toObject();
auto iter = nativesObj.begin();
while (iter != nativesObj.end())
{
auto osType = OpSys_fromString(iter.key());
if (osType == Os_Other)
continue;
if (!iter.value().isString())
continue;
library->addNative(osType, iter.value().toString());
iter++;
}
}
library->setRules(rulesFromJsonV4(libObj));
library->finalize();
fullVersion->libraries.append(library);
}
return fullVersion;
clear();
}
std::shared_ptr<DerpVersion> DerpVersion::fromJson(QJsonObject root)
bool OneSixVersion::reload(QWidget *widgetParent)
{
std::shared_ptr<DerpVersion> readVersion(new DerpVersion());
int launcher_ver = readVersion->minimumLauncherVersion =
root.value("minimumLauncherVersion").toDouble();
// ADD MORE HERE :D
if (launcher_ver > 0 && launcher_ver <= 13)
return fromJsonV4(root, readVersion);
else
{
return std::shared_ptr<DerpVersion>();
}
return OneSixVersionBuilder::build(this, m_instance, widgetParent);
}
std::shared_ptr<DerpVersion> DerpVersion::fromFile(QString filepath)
void OneSixVersion::clear()
{
QFile file(filepath);
if (!file.open(QIODevice::ReadOnly))
{
return std::shared_ptr<DerpVersion>();
}
auto data = file.readAll();
QJsonParseError jsonError;
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &jsonError);
if (jsonError.error != QJsonParseError::NoError)
{
return std::shared_ptr<DerpVersion>();
}
if (!jsonDoc.isObject())
{
return std::shared_ptr<DerpVersion>();
}
QJsonObject root = jsonDoc.object();
auto version = fromJson(root);
if (version)
version->original_file = filepath;
return version;
id.clear();
time.clear();
releaseTime.clear();
type.clear();
assets.clear();
processArguments.clear();
minecraftArguments.clear();
minimumLauncherVersion = 0xDEADBEAF;
mainClass.clear();
libraries.clear();
}
bool DerpVersion::toOriginalFile()
void OneSixVersion::dump() const
{
if (original_file.isEmpty())
return false;
QSaveFile file(original_file);
if (!file.open(QIODevice::WriteOnly))
qDebug().nospace() << "OneSixVersion("
<< "\n\tid=" << id
<< "\n\ttime=" << time
<< "\n\treleaseTime=" << releaseTime
<< "\n\ttype=" << type
<< "\n\tassets=" << assets
<< "\n\tprocessArguments=" << processArguments
<< "\n\tminecraftArguments=" << minecraftArguments
<< "\n\tminimumLauncherVersion=" << minimumLauncherVersion
<< "\n\tmainClass=" << mainClass
<< "\n\tlibraries=";
for (auto lib : libraries)
{
return false;
qDebug().nospace() << "\n\t\t" << lib.get();
}
// serialize base attributes (those we care about anyway)
QJsonObject root;
root.insert("minecraftArguments", minecraftArguments);
root.insert("mainClass", mainClass);
root.insert("minimumLauncherVersion", minimumLauncherVersion);
root.insert("time", time);
root.insert("id", id);
root.insert("type", type);
// screw processArguments
root.insert("releaseTime", releaseTime);
QJsonArray libarray;
for (const auto &lib : libraries)
{
libarray.append(lib->toJson());
}
if (libarray.count())
root.insert("libraries", libarray);
QJsonDocument doc(root);
file.write(doc.toJson());
return file.commit();
qDebug().nospace() << "\n)";
}
QList<std::shared_ptr<DerpLibrary>> DerpVersion::getActiveNormalLibs()
QList<std::shared_ptr<OneSixLibrary> > OneSixVersion::getActiveNormalLibs()
{
QList<std::shared_ptr<DerpLibrary>> output;
QList<std::shared_ptr<OneSixLibrary> > output;
for (auto lib : libraries)
{
if (lib->isActive() && !lib->isNative())
@ -245,9 +77,9 @@ QList<std::shared_ptr<DerpLibrary>> DerpVersion::getActiveNormalLibs()
return output;
}
QList<std::shared_ptr<DerpLibrary>> DerpVersion::getActiveNativeLibs()
QList<std::shared_ptr<OneSixLibrary> > OneSixVersion::getActiveNativeLibs()
{
QList<std::shared_ptr<DerpLibrary>> output;
QList<std::shared_ptr<OneSixLibrary> > output;
for (auto lib : libraries)
{
if (lib->isActive() && lib->isNative())
@ -258,17 +90,17 @@ QList<std::shared_ptr<DerpLibrary>> DerpVersion::getActiveNativeLibs()
return output;
}
void DerpVersion::externalUpdateStart()
std::shared_ptr<OneSixVersion> OneSixVersion::fromJson(const QJsonObject &obj)
{
beginResetModel();
std::shared_ptr<OneSixVersion> version(new OneSixVersion(0));
if (OneSixVersionBuilder::read(version.get(), obj))
{
return version;
}
return 0;
}
void DerpVersion::externalUpdateFinish()
{
endResetModel();
}
QVariant DerpVersion::data(const QModelIndex &index, int role) const
QVariant OneSixVersion::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
@ -296,7 +128,7 @@ QVariant DerpVersion::data(const QModelIndex &index, int role) const
return QVariant();
}
Qt::ItemFlags DerpVersion::flags(const QModelIndex &index) const
Qt::ItemFlags OneSixVersion::flags(const QModelIndex &index) const
{
if (!index.isValid())
return Qt::NoItemFlags;
@ -312,7 +144,7 @@ Qt::ItemFlags DerpVersion::flags(const QModelIndex &index) const
// return QAbstractListModel::flags(index);
}
QVariant DerpVersion::headerData(int section, Qt::Orientation orientation, int role) const
QVariant OneSixVersion::headerData(int section, Qt::Orientation orientation, int role) const
{
if (role != Qt::DisplayRole || orientation != Qt::Horizontal)
return QVariant();
@ -329,12 +161,34 @@ QVariant DerpVersion::headerData(int section, Qt::Orientation orientation, int r
}
}
int DerpVersion::rowCount(const QModelIndex &parent) const
int OneSixVersion::rowCount(const QModelIndex &parent) const
{
return libraries.size();
}
int DerpVersion::columnCount(const QModelIndex &parent) const
int OneSixVersion::columnCount(const QModelIndex &parent) const
{
return 3;
}
QDebug operator<<(QDebug &dbg, const OneSixVersion *version)
{
version->dump();
return dbg.maybeSpace();
}
QDebug operator<<(QDebug &dbg, const OneSixLibrary *library)
{
dbg.nospace() << "OneSixLibrary("
<< "\n\t\t\trawName=" << library->rawName()
<< "\n\t\t\tname=" << library->name()
<< "\n\t\t\tversion=" << library->version()
<< "\n\t\t\ttype=" << library->type()
<< "\n\t\t\tisActive=" << library->isActive()
<< "\n\t\t\tisNative=" << library->isNative()
<< "\n\t\t\tdownloadUrl=" << library->downloadUrl()
<< "\n\t\t\tstoragePath=" << library->storagePath()
<< "\n\t\t\tabsolutePath=" << library->absoluteUrl()
<< "\n\t\t\thint=" << library->hint();
dbg.nospace() << "\n\t\t)";
return dbg.maybeSpace();
}