diff options
author | flow <flowlnlnln@gmail.com> | 2022-08-29 09:15:06 -0300 |
---|---|---|
committer | flow <flowlnlnln@gmail.com> | 2022-09-03 13:37:22 -0300 |
commit | 9b984cedaca78153bc865a3eac5def4535b4d664 (patch) | |
tree | c6b17be06cd46656fa350793bf499a0908930dc0 /launcher/minecraft/mod/tasks | |
parent | dd9e30b24ab20c6e559618f435b141383e0d0fcd (diff) | |
download | PrismLauncher-9b984cedaca78153bc865a3eac5def4535b4d664.tar.gz PrismLauncher-9b984cedaca78153bc865a3eac5def4535b4d664.tar.bz2 PrismLauncher-9b984cedaca78153bc865a3eac5def4535b4d664.zip |
feat: add image from pack.png to resource packs
Signed-off-by: flow <flowlnlnln@gmail.com>
Diffstat (limited to 'launcher/minecraft/mod/tasks')
-rw-r--r-- | launcher/minecraft/mod/tasks/LocalResourcePackParseTask.cpp | 44 | ||||
-rw-r--r-- | launcher/minecraft/mod/tasks/LocalResourcePackParseTask.h | 1 |
2 files changed, 42 insertions, 3 deletions
diff --git a/launcher/minecraft/mod/tasks/LocalResourcePackParseTask.cpp b/launcher/minecraft/mod/tasks/LocalResourcePackParseTask.cpp index 0fc7a87e..b13e5775 100644 --- a/launcher/minecraft/mod/tasks/LocalResourcePackParseTask.cpp +++ b/launcher/minecraft/mod/tasks/LocalResourcePackParseTask.cpp @@ -54,6 +54,16 @@ void LocalResourcePackParseTask::processMCMeta(QByteArray&& raw_data) } } +void LocalResourcePackParseTask::processPackPNG(QByteArray&& raw_data) +{ + auto img = QImage::fromData(raw_data); + if (!img.isNull()) { + m_resource_pack.setImage(img); + } else { + qWarning() << "Failed to parse pack.png."; + } +} + void LocalResourcePackParseTask::processAsFolder() { QFileInfo mcmeta_file_info(FS::PathCombine(m_resource_pack.fileinfo().filePath(), "pack.mcmeta")); @@ -63,10 +73,23 @@ void LocalResourcePackParseTask::processAsFolder() return; auto data = mcmeta_file.readAll(); - if (data.isEmpty() || data.isNull()) - return; processMCMeta(std::move(data)); + + mcmeta_file.close(); + } + + QFileInfo image_file_info(FS::PathCombine(m_resource_pack.fileinfo().filePath(), "pack.png")); + if (image_file_info.isFile()) { + QFile mcmeta_file(image_file_info.filePath()); + if (!mcmeta_file.open(QIODevice::ReadOnly)) + return; + + auto data = mcmeta_file.readAll(); + + processPackPNG(std::move(data)); + + mcmeta_file.close(); } } @@ -90,6 +113,21 @@ void LocalResourcePackParseTask::processAsZip() processMCMeta(std::move(data)); file.close(); - zip.close(); } + + if (zip.setCurrentFile("pack.png")) { + if (!file.open(QIODevice::ReadOnly)) { + qCritical() << "Failed to open file in zip."; + zip.close(); + return; + } + + auto data = file.readAll(); + + processPackPNG(std::move(data)); + + file.close(); + } + + zip.close(); } diff --git a/launcher/minecraft/mod/tasks/LocalResourcePackParseTask.h b/launcher/minecraft/mod/tasks/LocalResourcePackParseTask.h index 7660d233..86ea033d 100644 --- a/launcher/minecraft/mod/tasks/LocalResourcePackParseTask.h +++ b/launcher/minecraft/mod/tasks/LocalResourcePackParseTask.h @@ -21,6 +21,7 @@ class LocalResourcePackParseTask : public Task { private: void processMCMeta(QByteArray&& raw_data); + void processPackPNG(QByteArray&& raw_data); void processAsFolder(); void processAsZip(); |