More rework to switch to std::filesystem::path over cstrings
This commit is contained in:
@@ -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)];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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; }
|
||||||
|
|||||||
@@ -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; }
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user