Files
UnrealEngine/Engine/Plugins/Editor/AssetSearch/Source/Private/FileInfoDatabase.h
2025-05-18 13:04:45 +08:00

102 lines
2.5 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Misc/DateTime.h"
#include "Misc/SecureHash.h"
class FSQLiteDatabase;
enum class ESQLiteDatabaseOpenMode : uint8;
class FFileInfoDatabaseStatements;
struct FAssetData;
struct FAssetFileInfo
{
FName PackageName;
FDateTime LastModified;
FMD5Hash Hash;
};
class FFileInfoDatabase
{
public:
FFileInfoDatabase();
~FFileInfoDatabase();
FFileInfoDatabase(const FFileInfoDatabase&) = delete;
FFileInfoDatabase& operator=(const FFileInfoDatabase&) = delete;
FFileInfoDatabase(FFileInfoDatabase&&) = default;
FFileInfoDatabase& operator=(FFileInfoDatabase&&) = default;
/**
* Is this a valid database? (ie, has been successfully opened).
*/
bool IsValid() const;
/**
* Open (or create) a database file.
*
* @param InSessionPath The root path to store all the data for this session under.
*
* @return True if the database was opened, false otherwise.
*/
bool Open(const FString& InSessionPath);
/**
* Open (or create) a database file.
*
* @param InSessionPath The root path to store all the data for this session under.
* @param InOpenMode How should the database be opened?
*
* @return True if the database was opened, false otherwise.
*/
bool Open(const FString& InSessionPath, const ESQLiteDatabaseOpenMode InOpenMode);
/**
* Close an open database file.
*
* @param InDeleteDatabase True if the session database and its associated data should be deleted after closing the database.
*/
bool Close(const bool InDeleteDatabase = false);
/**
* Get the filename of the currently open database, or an empty string.
* @note The returned filename will be an absolute pathname.
*/
FString GetFilename() const;
/**
* Get the last error reported by this database.
*/
FString GetLastError() const;
/**
* Update the file hash table.
*/
bool AddOrUpdateFileInfo(const FAssetData& InAssetData, FAssetFileInfo& OutFileInfo);
void AddOrUpdateFileInfos(const TArray<FAssetData>& InAssets);
void UpdateFileHash(const FAssetData& InAssetData, FAssetFileInfo& OutFileInfo);
TMap<FName, FAssetFileInfo> GetAllFileInfos();
bool bEnableIntegrityChecks = false;
private:
void LogLastError() const;
private:
/** Internal SQLite database */
TUniquePtr<FSQLiteDatabase> Database;
/** The database filename name we use */
FString DatabaseFileName;
/** Root path to store all session data under */
FString SessionPath;
/** Prepared statements for the currently open database */
TUniquePtr<FFileInfoDatabaseStatements> Statements;
};