summaryrefslogtreecommitdiff
path: root/src/filetreeitem.h
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/filetreeitem.h
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/filetreeitem.h')
-rw-r--r--src/filetreeitem.h59
1 files changed, 50 insertions, 9 deletions
diff --git a/src/filetreeitem.h b/src/filetreeitem.h
index fc27b0c0..c5418d43 100644
--- a/src/filetreeitem.h
+++ b/src/filetreeitem.h
@@ -19,13 +19,6 @@ public:
Conflicted = 0x04
};
- struct Meta
- {
- uint64_t size;
- QDateTime lastModified;
- QString type;
- };
-
Q_DECLARE_FLAGS(Flags, Flag);
@@ -136,7 +129,24 @@ public:
QFont font() const;
- const Meta& meta() const;
+ std::optional<uint64_t> fileSize() const;
+ std::optional<QDateTime> lastModified() const;
+ std::optional<QString> fileType() const;
+
+ std::optional<uint64_t> compressedFileSize() const
+ {
+ return m_compressedFileSize;
+ }
+
+ void setFileSize(uint64_t size)
+ {
+ m_fileSize.set(size);
+ }
+
+ void setCompressedFileSize(uint64_t compressedSize)
+ {
+ m_compressedFileSize = compressedSize;
+ }
const QString& realPath() const
{
@@ -210,6 +220,30 @@ public:
QString debugName() const;
private:
+ template <class T>
+ struct Cached
+ {
+ std::optional<T> value;
+ bool failed = false;
+
+ bool empty() const
+ {
+ return !failed && !value;
+ }
+
+ void set(T t)
+ {
+ value = std::move(t);
+ failed = false;
+ }
+
+ void fail()
+ {
+ value = {};
+ failed = true;
+ }
+ };
+
static constexpr std::size_t NoIndexGuess =
std::numeric_limits<std::size_t>::max();
@@ -218,17 +252,24 @@ private:
const int m_originID;
const QString m_virtualParentPath;
+ const std::wstring m_wsRealPath;
const QString m_realPath;
const Flags m_flags;
const std::wstring m_wsFile, m_wsLcFile;
const MOShared::DirectoryEntry::FileKey m_key;
const QString m_file;
const QString m_mod;
- mutable std::optional<Meta> m_meta;
+
+ mutable Cached<uint64_t> m_fileSize;
+ mutable Cached<QDateTime> m_lastModified;
+ mutable Cached<QString> m_fileType;
+ mutable std::optional<uint64_t> m_compressedFileSize;
bool m_loaded;
bool m_expanded;
Children m_children;
+
+ void getFileType() const;
};
#endif // MODORGANIZER_FILETREEITEM_INCLUDED