mirror of
https://github.com/redstrate/Novus.git
synced 2025-04-24 21:07:46 +00:00
Now the hashes are collected in a central database (location to be improved) similar to FFXIV Explorer. This database needs to be generated once and doesn't have to be regen every time Sagasu is opened like before. This indexer currently is a separate program. Also adds a feature to extract files from the file tree window.
51 lines
No EOL
1.4 KiB
C++
51 lines
No EOL
1.4 KiB
C++
// SPDX-FileCopyrightText: 2023 Joshua Goins <josh@redstrate.com>
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
#pragma once
|
|
|
|
#include "hashdatabase.h"
|
|
#include <QAbstractItemModel>
|
|
#include <QFutureWatcher>
|
|
|
|
struct GameData;
|
|
|
|
enum class TreeType { Root, Folder, File };
|
|
|
|
struct TreeInformation {
|
|
TreeType type;
|
|
TreeInformation *parent = nullptr;
|
|
QString name;
|
|
int row = 0;
|
|
uint32_t hash = 0;
|
|
|
|
std::vector<TreeInformation *> children;
|
|
};
|
|
|
|
class FileTreeModel : public QAbstractItemModel
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
explicit FileTreeModel(GameData *data);
|
|
|
|
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
|
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
|
|
|
|
QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const override;
|
|
QModelIndex parent(const QModelIndex &child) const override;
|
|
|
|
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
|
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
|
|
|
|
private:
|
|
GameData *gameData = nullptr;
|
|
TreeInformation *rootItem = nullptr;
|
|
|
|
void addKnownFolder(QString string);
|
|
void addFile(TreeInformation *parentItem, uint32_t filenameHash, QString name);
|
|
void addFolder(TreeInformation *parentItem, uint32_t filenameHash);
|
|
|
|
QHash<uint32_t, TreeInformation *> knownDirHashes;
|
|
|
|
HashDatabase m_database;
|
|
}; |