More rework to switch to std::filesystem::path over cstrings

This commit is contained in:
Georg Hagen
2025-02-09 20:26:36 +01:00
parent 23ba703471
commit d2c86ede73
5 changed files with 40 additions and 8 deletions

View File

@@ -7,6 +7,7 @@
#include "ArchiveConfiguration.hpp" #include "ArchiveConfiguration.hpp"
#include "Base/Utils.hpp" #include "Base/Utils.hpp"
#include <archive.h> #include <archive.h>
#include <filesystem>
namespace OpenVulkano namespace OpenVulkano
{ {
@@ -34,9 +35,9 @@ namespace OpenVulkano
return std::string(tName); return std::string(tName);
} }
ArchiveConfiguration ArchiveConfiguration::FromFileName(const char* fileName) ArchiveConfiguration ArchiveConfiguration::FromFileName(std::filesystem::path fileName)
{ {
std::string_view fName = fileName; std::string_view fName = fileName.string();
ArchiveConfiguration ac; ArchiveConfiguration ac;
if (auto type = ArchiveType::FromExtension(fName)) if (auto type = ArchiveType::FromExtension(fName))
{ {
@@ -77,4 +78,4 @@ namespace OpenVulkano
{ {
return COMP_MAP[static_cast<int>(compression)]; return COMP_MAP[static_cast<int>(compression)];
} }
} }

View File

@@ -6,6 +6,8 @@
#pragma once #pragma once
#include <filesystem>
#include "ArchiveType.hpp" #include "ArchiveType.hpp"
#include <string> #include <string>
@@ -25,7 +27,7 @@ namespace OpenVulkano
: type(archiveType), compression(compressionType), compressionLevel(level) : type(archiveType), compression(compressionType), compressionLevel(level)
{} {}
[[nodiscard]] static ArchiveConfiguration FromFileName(const char* fileName); [[nodiscard]] static ArchiveConfiguration FromFileName(std::filesystem::path fileName);
[[nodiscard]] std::string GetFileExtension() const; [[nodiscard]] std::string GetFileExtension() const;

View File

@@ -35,6 +35,29 @@ namespace OpenVulkano
ChkErr(archive_write_open_filename(m_archive, fileName)); ChkErr(archive_write_open_filename(m_archive, fileName));
} }
ArchiveWriter::ArchiveWriter(const std::filesystem::path& fileName, ArchiveConfiguration archiveConfiguration, const std::shared_ptr<spdlog::logger>& logger, const char* password)
: ArchiveBase(archive_write_new(), archive_entry_new(), logger)
, m_archiveConfig(archiveConfiguration)
, m_shouldCompress(&SimpleFileTypeShouldCompressChecker)
{ //TODO error handling
ChkErr(archive_write_set_format(m_archive, archiveConfiguration.GetLibArchiveArchiveType()));
if (archiveConfiguration.type == ArchiveType::TAR)
{
ChkErr(archive_write_add_filter(m_archive, archiveConfiguration.GetLibArchiveCompressionType()));
}
if (archiveConfiguration.compression != CompressionType::NONE &&
archiveConfiguration.compressionLevel > 0)
{
std::string level = "compression-level=" + std::to_string(archiveConfiguration.compressionLevel);
ChkErr(archive_write_set_options(m_archive, level.c_str()));
}
if (password) ChkErr(archive_write_set_passphrase(m_archive, password));
if constexpr (std::is_same_v<std::filesystem::path::value_type, char>)
ChkErr(archive_write_open_filename(m_archive, (const char*)fileName.c_str()));
else
ChkErr(archive_write_open_filename_w(m_archive, (const wchar_t*)fileName.c_str()));
}
ArchiveWriter::~ArchiveWriter() ArchiveWriter::~ArchiveWriter()
{ {
if (m_asBuffer) { m_asBuffer->Close(); m_asBuffer = nullptr; } if (m_asBuffer) { m_asBuffer->Close(); m_asBuffer = nullptr; }

View File

@@ -32,6 +32,12 @@ namespace OpenVulkano
ArchiveWriter(const char* fileName, ArchiveConfiguration archiveConfiguration, const std::shared_ptr<spdlog::logger>& logger = nullptr, const char* password = nullptr); ArchiveWriter(const char* fileName, ArchiveConfiguration archiveConfiguration, const std::shared_ptr<spdlog::logger>& logger = nullptr, const char* password = nullptr);
ArchiveWriter(const std::filesystem::path& fileName, const std::shared_ptr<spdlog::logger>& logger = nullptr, const char* password = nullptr)
: ArchiveWriter(fileName, ArchiveConfiguration::FromFileName(fileName), logger, password)
{}
ArchiveWriter(const std::filesystem::path& fileName, ArchiveConfiguration archiveConfiguration, const std::shared_ptr<spdlog::logger>& logger = nullptr, const char* password = nullptr);
~ArchiveWriter() override; ~ArchiveWriter() override;
[[nodiscard]] size_t GetTotalWrittenBytes() const { return m_bytesWritten; } [[nodiscard]] size_t GetTotalWrittenBytes() const { return m_bytesWritten; }

View File

@@ -30,7 +30,7 @@ namespace
void makeDummyArchive() void makeDummyArchive()
{ {
ArchiveWriter writer(dummyArchivePath().c_str()); ArchiveWriter writer(dummyArchivePath());
FileDescription desc; FileDescription desc;
desc.path = "stream1.txt"; desc.path = "stream1.txt";
@@ -70,7 +70,7 @@ TEST_CASE("Dummy archive creation, default constructor", "[ArchiveReader]")
TEST_CASE("Open Archive from File", "[ArchiveReader]") TEST_CASE("Open Archive from File", "[ArchiveReader]")
{ {
{ {
std::string testArchive = dummyArchivePath(); auto testArchive = dummyArchivePath();
ArchiveReader reader; ArchiveReader reader;
bool opened = reader.Open(testArchive); bool opened = reader.Open(testArchive);
REQUIRE(opened == true); REQUIRE(opened == true);
@@ -112,7 +112,7 @@ TEST_CASE("Open Archive from Directory with Pattern", "[ArchiveReader]")
TEST_CASE("ExtractNext and Skip Functions", "[ArchiveReader]") TEST_CASE("ExtractNext and Skip Functions", "[ArchiveReader]")
{ {
std::string testArchive = dummyArchivePath(); auto testArchive = dummyArchivePath();
ArchiveReader reader(testArchive); ArchiveReader reader(testArchive);
size_t extractedFiles = reader.ExtractRemaining(dummyArchiveDir()); size_t extractedFiles = reader.ExtractRemaining(dummyArchiveDir());
@@ -127,7 +127,7 @@ TEST_CASE("ExtractNext and Skip Functions", "[ArchiveReader]")
TEST_CASE("Get Next File Operations", "[ArchiveReader]") TEST_CASE("Get Next File Operations", "[ArchiveReader]")
{ {
std::string testArchive = dummyArchivePath(); auto testArchive = dummyArchivePath();
ArchiveReader reader(testArchive); ArchiveReader reader(testArchive);