diff options
author | Sky <git@bunnies.cc> | 2013-12-08 06:12:53 +0000 |
---|---|---|
committer | Sky <git@bunnies.cc> | 2013-12-08 06:12:53 +0000 |
commit | 2fe27fd0daca14644a2a71456cd60c9a38befbdf (patch) | |
tree | 929b9b5b369367895f2afcb74216aa9cf840ffb4 /logic/assets/AssetsUtils.cpp | |
parent | 6d438b2ef3ca320d89eb5830024d02610ef8f6d6 (diff) | |
download | MultiMC-2fe27fd0daca14644a2a71456cd60c9a38befbdf.tar MultiMC-2fe27fd0daca14644a2a71456cd60c9a38befbdf.tar.gz MultiMC-2fe27fd0daca14644a2a71456cd60c9a38befbdf.tar.lz MultiMC-2fe27fd0daca14644a2a71456cd60c9a38befbdf.tar.xz MultiMC-2fe27fd0daca14644a2a71456cd60c9a38befbdf.zip |
More work on new assets system. Works given a properly constructed assets folder, no downloading yet
Diffstat (limited to 'logic/assets/AssetsUtils.cpp')
-rw-r--r-- | logic/assets/AssetsUtils.cpp | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/logic/assets/AssetsUtils.cpp b/logic/assets/AssetsUtils.cpp index 3589161a..8d7d6f46 100644 --- a/logic/assets/AssetsUtils.cpp +++ b/logic/assets/AssetsUtils.cpp @@ -16,6 +16,9 @@ #include <QDir> #include <QDirIterator> #include <QCryptographicHash> +#include <QJsonParseError> +#include <QJsonDocument> +#include <QJsonObject> #include "AssetsUtils.h" #include "MultiMC.h" @@ -112,4 +115,110 @@ void migrateOldAssets() } } } + +/* + * Returns true on success, with index populated + * index is undefined otherwise + */ +bool loadAssetsIndexJson(QString path, AssetsIndex *index) +{ +/* +{ + "objects": { + "icons/icon_16x16.png": { + "hash": "bdf48ef6b5d0d23bbb02e17d04865216179f510a", + "size": 3665 + }, + ... + } + } +} +*/ + + QFile file(path); + + // Try to open the file and fail if we can't. + // TODO: We should probably report this error to the user. + if (!file.open(QIODevice::ReadOnly)) + { + QLOG_ERROR() << "Failed to read assets index file" << path; + return false; + } + + // Read the file and close it. + QByteArray jsonData = file.readAll(); + file.close(); + + QJsonParseError parseError; + QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData, &parseError); + + // Fail if the JSON is invalid. + if (parseError.error != QJsonParseError::NoError) + { + QLOG_ERROR() << "Failed to parse assets index file:" << parseError.errorString() << "at offset " << QString::number(parseError.offset); + return false; + } + + // Make sure the root is an object. + if (!jsonDoc.isObject()) + { + QLOG_ERROR() << "Invalid assets index JSON: Root should be an array."; + return false; + } + + QJsonObject root = jsonDoc.object(); + + QJsonValue isVirtual = root.value("virtual"); + if(!isVirtual.isUndefined()) + { + index->isVirtual = isVirtual.toBool(false); + } + + QJsonValue objects = root.value("objects"); + QVariantMap map = objects.toVariant().toMap(); + + for(QVariantMap::const_iterator iter = map.begin(); iter != map.end(); ++iter) { + //QLOG_DEBUG() << iter.key(); + + QVariant variant = iter.value(); + QVariantMap nested_objects = variant.toMap(); + + AssetObject object; + + for(QVariantMap::const_iterator nested_iter = nested_objects.begin(); nested_iter != nested_objects.end(); ++nested_iter) { + //QLOG_DEBUG() << nested_iter.key() << nested_iter.value().toString(); + QString key = nested_iter.key(); + QVariant value = nested_iter.value(); + + if(key == "hash") + { + object.hash = value.toString(); + } + else if(key == "size") + { + object.size = value.toDouble(); + } + } + + index->objects->insert(iter.key(), object); + } + + return true; + /*for (QJsonValue accountVal : objects) + { + QJsonObject accountObj = accountVal.toObject(); + MojangAccountPtr account = MojangAccount::loadFromJson(accountObj); + if (account.get() != nullptr) + { + connect(account.get(), SIGNAL(changed()), SLOT(accountChanged())); + m_accounts.append(account); + } + else + { + QLOG_WARN() << "Failed to load an account."; + } + }*/ + + //return false; +} } |