mirror of https://github.com/OpenMW/openmw.git
Use the right archive type to load bsa according to their type
parent
974799c011
commit
d30deef4b5
@ -1,120 +0,0 @@
|
|||||||
#include "bsaarchive.hpp"
|
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
namespace VFS
|
|
||||||
{
|
|
||||||
|
|
||||||
BsaArchive::BsaArchive(const std::filesystem::path& filename)
|
|
||||||
{
|
|
||||||
mFile = std::make_unique<Bsa::BSAFile>();
|
|
||||||
mFile->open(filename);
|
|
||||||
|
|
||||||
const Bsa::BSAFile::FileList& filelist = mFile->getList();
|
|
||||||
for (Bsa::BSAFile::FileList::const_iterator it = filelist.begin(); it != filelist.end(); ++it)
|
|
||||||
{
|
|
||||||
mResources.emplace_back(&*it, mFile.get());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
BsaArchive::BsaArchive() {}
|
|
||||||
|
|
||||||
BsaArchive::~BsaArchive() {}
|
|
||||||
|
|
||||||
void BsaArchive::listResources(std::map<std::string, File*>& out, char (*normalize_function)(char))
|
|
||||||
{
|
|
||||||
for (std::vector<BsaArchiveFile>::iterator it = mResources.begin(); it != mResources.end(); ++it)
|
|
||||||
{
|
|
||||||
std::string ent = it->mInfo->name();
|
|
||||||
std::transform(ent.begin(), ent.end(), ent.begin(), normalize_function);
|
|
||||||
|
|
||||||
out[ent] = &*it;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool BsaArchive::contains(const std::string& file, char (*normalize_function)(char)) const
|
|
||||||
{
|
|
||||||
for (const auto& it : mResources)
|
|
||||||
{
|
|
||||||
std::string ent = it.mInfo->name();
|
|
||||||
std::transform(ent.begin(), ent.end(), ent.begin(), normalize_function);
|
|
||||||
if (file == ent)
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string BsaArchive::getDescription() const
|
|
||||||
{
|
|
||||||
return std::string{ "BSA: " } + mFile->getFilename();
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
BsaArchiveFile::BsaArchiveFile(const Bsa::BSAFile::FileStruct* info, Bsa::BSAFile* bsa)
|
|
||||||
: mInfo(info)
|
|
||||||
, mFile(bsa)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
Files::IStreamPtr BsaArchiveFile::open()
|
|
||||||
{
|
|
||||||
return mFile->getFile(mInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
CompressedBsaArchive::CompressedBsaArchive(const std::filesystem::path& filename)
|
|
||||||
: Archive()
|
|
||||||
{
|
|
||||||
mCompressedFile = std::make_unique<Bsa::CompressedBSAFile>();
|
|
||||||
mCompressedFile->open(filename);
|
|
||||||
|
|
||||||
const Bsa::BSAFile::FileList& filelist = mCompressedFile->getList();
|
|
||||||
for (Bsa::BSAFile::FileList::const_iterator it = filelist.begin(); it != filelist.end(); ++it)
|
|
||||||
{
|
|
||||||
mCompressedResources.emplace_back(&*it, mCompressedFile.get());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CompressedBsaArchive::listResources(std::map<std::string, File*>& out, char (*normalize_function)(char))
|
|
||||||
{
|
|
||||||
for (std::vector<CompressedBsaArchiveFile>::iterator it = mCompressedResources.begin();
|
|
||||||
it != mCompressedResources.end(); ++it)
|
|
||||||
{
|
|
||||||
std::string ent = it->mInfo->name();
|
|
||||||
std::transform(ent.begin(), ent.end(), ent.begin(), normalize_function);
|
|
||||||
|
|
||||||
out[ent] = &*it;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CompressedBsaArchive::contains(const std::string& file, char (*normalize_function)(char)) const
|
|
||||||
{
|
|
||||||
for (const auto& it : mCompressedResources)
|
|
||||||
{
|
|
||||||
std::string ent = it.mInfo->name();
|
|
||||||
std::transform(ent.begin(), ent.end(), ent.begin(), normalize_function);
|
|
||||||
if (file == ent)
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string CompressedBsaArchive::getDescription() const
|
|
||||||
{
|
|
||||||
return std::string{ "BSA: " } + mCompressedFile->getFilename();
|
|
||||||
}
|
|
||||||
|
|
||||||
CompressedBsaArchiveFile::CompressedBsaArchiveFile(
|
|
||||||
const Bsa::BSAFile::FileStruct* info, Bsa::CompressedBSAFile* bsa)
|
|
||||||
: mInfo(info)
|
|
||||||
, mCompressedFile(bsa)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
Files::IStreamPtr CompressedBsaArchiveFile::open()
|
|
||||||
{
|
|
||||||
return mCompressedFile->getFile(mInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue