From 7024acac06885f9d9e24125afef04231aebdd113 Mon Sep 17 00:00:00 2001 From: flow Date: Thu, 28 Jul 2022 22:34:24 -0300 Subject: [PATCH] feat: add override helper functions These help us keep track of relevant metadata information about overrides, so that we know what they are when we update a pack. Signed-off-by: flow --- launcher/CMakeLists.txt | 2 + .../modplatform/helpers/OverrideUtils.cpp | 59 +++++++++++++++++++ launcher/modplatform/helpers/OverrideUtils.h | 20 +++++++ 3 files changed, 81 insertions(+) create mode 100644 launcher/modplatform/helpers/OverrideUtils.cpp create mode 100644 launcher/modplatform/helpers/OverrideUtils.h diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt index 7bd92fac9..2ff700ad1 100644 --- a/launcher/CMakeLists.txt +++ b/launcher/CMakeLists.txt @@ -461,6 +461,8 @@ set(API_SOURCES modplatform/helpers/NetworkModAPI.cpp modplatform/helpers/HashUtils.h modplatform/helpers/HashUtils.cpp + modplatform/helpers/OverrideUtils.h + modplatform/helpers/OverrideUtils.cpp ) set(FTB_SOURCES diff --git a/launcher/modplatform/helpers/OverrideUtils.cpp b/launcher/modplatform/helpers/OverrideUtils.cpp new file mode 100644 index 000000000..3496a2863 --- /dev/null +++ b/launcher/modplatform/helpers/OverrideUtils.cpp @@ -0,0 +1,59 @@ +#include "OverrideUtils.h" + +#include + +#include "FileSystem.h" + +namespace Override { + +void createOverrides(QString name, QString parent_folder, QString override_path) +{ + QString file_path(FS::PathCombine(parent_folder, name + ".txt")); + if (QFile::exists(file_path)) + QFile::remove(file_path); + + FS::ensureFilePathExists(file_path); + + QFile file(file_path); + file.open(QFile::WriteOnly); + + QDirIterator override_iterator(override_path, QDirIterator::Subdirectories); + while (override_iterator.hasNext()) { + auto override_file_path = override_iterator.next(); + QFileInfo info(override_file_path); + if (info.isFile()) { + // Absolute path with temp directory -> relative path + override_file_path = override_file_path.split(name).last().remove(0, 1); + + file.write(override_file_path.toUtf8()); + file.write("\n"); + } + } + + file.close(); +} + +QStringList readOverrides(QString name, QString parent_folder) +{ + QString file_path(FS::PathCombine(parent_folder, name + ".txt")); + + QFile file(file_path); + if (!file.exists()) + return {}; + + QStringList previous_overrides; + + file.open(QFile::ReadOnly); + + QString entry; + do { + entry = file.readLine(); + previous_overrides.append(entry.trimmed()); + } while (!entry.isEmpty()); + + file.close(); + + return previous_overrides; +} + +} // namespace Override diff --git a/launcher/modplatform/helpers/OverrideUtils.h b/launcher/modplatform/helpers/OverrideUtils.h new file mode 100644 index 000000000..73f059d6d --- /dev/null +++ b/launcher/modplatform/helpers/OverrideUtils.h @@ -0,0 +1,20 @@ +#pragma once + +#include + +namespace Override { + +/** This creates a file in `parent_folder` that holds information about which + * overrides are in `override_path`. + * + * If there's already an existing such file, it will be ovewritten. + */ +void createOverrides(QString name, QString parent_folder, QString override_path); + +/** This reads an existing overrides archive, returning a list of overrides. + * + * If there's no such file in `parent_folder`, it will return an empty list. + */ +QStringList readOverrides(QString name, QString parent_folder); + +} // namespace Override