summaryrefslogtreecommitdiff
path: root/src/shared
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2020-02-01 05:21:34 -0500
committerisanae <14251494+isanae@users.noreply.github.com>2020-02-04 03:33:22 -0500
commit34bc2191e6ebb1458438180bd75a5cd2cd7e4f7b (patch)
tree2321ec91c241dcfea50c9debb78e8c7cca35a666 /src/shared
parent85a9f810a0ecbf10facc8b8b070eda6f13a65d6b (diff)
don't get meta for fields that are not used
show compressed file size if available remember file sizes for files in archives
Diffstat (limited to 'src/shared')
-rw-r--r--src/shared/directoryentry.cpp21
-rw-r--r--src/shared/directoryentry.h22
2 files changed, 38 insertions, 5 deletions
diff --git a/src/shared/directoryentry.cpp b/src/shared/directoryentry.cpp
index 4181098c..92b6c2bf 100644
--- a/src/shared/directoryentry.cpp
+++ b/src/shared/directoryentry.cpp
@@ -167,13 +167,15 @@ private:
FileEntry::FileEntry() :
m_Index(UINT_MAX), m_Name(), m_Origin(-1), m_Parent(nullptr),
+ m_FileSize(NoFileSize), m_CompressedFileSize(NoFileSize),
m_LastAccessed(time(nullptr))
{
}
FileEntry::FileEntry(Index index, const std::wstring &name, DirectoryEntry *parent) :
- m_Index(index), m_Name(name), m_Origin(-1), m_Archive(L"", -1),
- m_Parent(parent), m_LastAccessed(time(nullptr))
+ m_Index(index), m_Name(name), m_Origin(-1), m_Archive(L"", -1), m_Parent(parent),
+ m_FileSize(NoFileSize), m_CompressedFileSize(NoFileSize),
+ m_LastAccessed(time(nullptr))
{
}
@@ -1020,7 +1022,7 @@ void DirectoryEntry::removeFiles(const std::set<FileEntry::Index> &indices)
removeFilesFromList(indices);
}
-void DirectoryEntry::insert(
+FileEntry::Ptr DirectoryEntry::insert(
const std::wstring &fileName, FilesOrigin &origin, FILETIME fileTime,
const std::wstring &archive, int order)
{
@@ -1036,6 +1038,8 @@ void DirectoryEntry::insert(
file->addOrigin(origin.getID(), fileTime, archive, order);
origin.addFile(file->getIndex());
+
+ return file;
}
void DirectoryEntry::addFiles(FilesOrigin &origin, wchar_t *buffer, int bufferOffset)
@@ -1085,7 +1089,16 @@ void DirectoryEntry::addFiles(
// add files
for (unsigned int fileIdx = 0; fileIdx < archiveFolder->getNumFiles(); ++fileIdx) {
BSA::File::Ptr file = archiveFolder->getFile(fileIdx);
- insert(ToWString(file->getName(), true), origin, fileTime, archiveName, order);
+
+ auto f = insert(ToWString(file->getName(), true), origin, fileTime, archiveName, order);
+
+ if (f) {
+ if (file->getUncompressedFileSize() > 0) {
+ f->setFileSize(file->getFileSize(), file->getUncompressedFileSize());
+ } else {
+ f->setFileSize(file->getFileSize(), FileEntry::NoFileSize);
+ }
+ }
}
// recurse into subdirectories
diff --git a/src/shared/directoryentry.h b/src/shared/directoryentry.h
index 6102c88f..7e45493d 100644
--- a/src/shared/directoryentry.h
+++ b/src/shared/directoryentry.h
@@ -61,6 +61,9 @@ class FileRegister;
class FileEntry
{
public:
+ static constexpr uint64_t NoFileSize =
+ std::numeric_limits<uint64_t>::max();
+
typedef unsigned int Index;
typedef boost::shared_ptr<FileEntry> Ptr;
@@ -150,6 +153,22 @@ public:
return m_FileTime;
}
+ void setFileSize(uint64_t size, uint64_t compressedSize)
+ {
+ m_FileSize = size;
+ m_CompressedFileSize = compressedSize;
+ }
+
+ uint64_t getFileSize() const
+ {
+ return m_FileSize;
+ }
+
+ uint64_t getCompressedFileSize() const
+ {
+ return m_CompressedFileSize;
+ }
+
private:
Index m_Index;
std::wstring m_Name;
@@ -158,6 +177,7 @@ private:
AlternativesVector m_Alternatives;
DirectoryEntry *m_Parent;
mutable FILETIME m_FileTime;
+ uint64_t m_FileSize, m_CompressedFileSize;
time_t m_LastAccessed;
@@ -480,7 +500,7 @@ private:
DirectoryEntry(const DirectoryEntry &reference);
- void insert(
+ FileEntry::Ptr insert(
const std::wstring &fileName, FilesOrigin &origin, FILETIME fileTime,
const std::wstring &archive, int order);