mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2026-01-12 11:41:50 +00:00
feat: report on unlinking progress
This commit is contained in:
@@ -4,25 +4,32 @@
|
||||
|
||||
template<class T> class AbstractAssetDumper : public IAssetDumper<T>
|
||||
{
|
||||
public:
|
||||
[[nodiscard]] size_t GetProgressTotalCount(const AssetPool<T>& pool) const override
|
||||
{
|
||||
return pool.m_asset_lookup.size();
|
||||
}
|
||||
|
||||
void DumpPool(AssetDumpingContext& context, const AssetPool<T>& pool) override
|
||||
{
|
||||
for (const auto* assetInfo : pool)
|
||||
{
|
||||
if (assetInfo->m_name[0] == ',' || !ShouldDump(*assetInfo))
|
||||
{
|
||||
context.IncrementProgress();
|
||||
continue;
|
||||
}
|
||||
|
||||
DumpAsset(context, *assetInfo);
|
||||
context.IncrementProgress();
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual bool ShouldDump(XAssetInfo<T>* asset)
|
||||
virtual bool ShouldDump(const XAssetInfo<T>& asset)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
virtual void DumpAsset(AssetDumpingContext& context, XAssetInfo<T>* asset) = 0;
|
||||
|
||||
public:
|
||||
void DumpPool(AssetDumpingContext& context, AssetPool<T>* pool) override
|
||||
{
|
||||
for (auto assetInfo : *pool)
|
||||
{
|
||||
if (assetInfo->m_name[0] == ',' || !ShouldDump(assetInfo))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
DumpAsset(context, assetInfo);
|
||||
}
|
||||
}
|
||||
virtual void DumpAsset(AssetDumpingContext& context, const XAssetInfo<T>& asset) = 0;
|
||||
};
|
||||
|
||||
@@ -1,18 +1,43 @@
|
||||
#include "AssetDumpingContext.h"
|
||||
|
||||
#include <filesystem>
|
||||
#include <format>
|
||||
#include <fstream>
|
||||
|
||||
AssetDumpingContext::AssetDumpingContext(const Zone& zone, const std::string& basePath, IOutputPath& outputPath, ISearchPath& objSearchPath)
|
||||
AssetDumpingContext::AssetDumpingContext(const Zone& zone,
|
||||
const std::string& basePath,
|
||||
IOutputPath& outputPath,
|
||||
ISearchPath& objSearchPath,
|
||||
std::optional<std::unique_ptr<ProgressCallback>> progressCallback)
|
||||
: m_zone(zone),
|
||||
m_base_path(basePath),
|
||||
m_output_path(outputPath),
|
||||
m_obj_search_path(objSearchPath)
|
||||
m_obj_search_path(objSearchPath),
|
||||
m_current_progress(0uz),
|
||||
m_total_progress(0uz)
|
||||
{
|
||||
if (progressCallback)
|
||||
m_progress_callback = *std::move(progressCallback);
|
||||
}
|
||||
|
||||
std::unique_ptr<std::ostream> AssetDumpingContext::OpenAssetFile(const std::string& fileName) const
|
||||
{
|
||||
return m_output_path.Open(fileName);
|
||||
}
|
||||
|
||||
void AssetDumpingContext::IncrementProgress()
|
||||
{
|
||||
if (m_progress_callback)
|
||||
{
|
||||
m_current_progress++;
|
||||
m_progress_callback->OnProgress(m_current_progress, m_total_progress);
|
||||
}
|
||||
}
|
||||
|
||||
void AssetDumpingContext::SetTotalProgress(const size_t value)
|
||||
{
|
||||
m_total_progress = value;
|
||||
}
|
||||
|
||||
bool AssetDumpingContext::ShouldTrackProgress() const
|
||||
{
|
||||
return static_cast<bool>(m_progress_callback);
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "Obj/Gdt/GdtStream.h"
|
||||
#include "SearchPath/IOutputPath.h"
|
||||
#include "SearchPath/ISearchPath.h"
|
||||
#include "Utils/ProgressCallback.h"
|
||||
#include "Zone/Zone.h"
|
||||
|
||||
#include <memory>
|
||||
@@ -14,10 +15,18 @@
|
||||
class AssetDumpingContext
|
||||
{
|
||||
public:
|
||||
AssetDumpingContext(const Zone& zone, const std::string& basePath, IOutputPath& outputPath, ISearchPath& objSearchPath);
|
||||
AssetDumpingContext(const Zone& zone,
|
||||
const std::string& basePath,
|
||||
IOutputPath& outputPath,
|
||||
ISearchPath& objSearchPath,
|
||||
std::optional<std::unique_ptr<ProgressCallback>> progressCallback);
|
||||
|
||||
[[nodiscard]] std::unique_ptr<std::ostream> OpenAssetFile(const std::string& fileName) const;
|
||||
|
||||
void IncrementProgress();
|
||||
void SetTotalProgress(size_t value);
|
||||
[[nodiscard]] bool ShouldTrackProgress() const;
|
||||
|
||||
template<typename T> T* GetZoneAssetDumperState()
|
||||
{
|
||||
static_assert(std::is_base_of_v<IZoneAssetDumperState, T>, "T must inherit IZoneAssetDumperState");
|
||||
@@ -42,4 +51,7 @@ public:
|
||||
|
||||
private:
|
||||
std::unordered_map<std::type_index, std::unique_ptr<IZoneAssetDumperState>> m_zone_asset_dumper_states;
|
||||
std::unique_ptr<ProgressCallback> m_progress_callback;
|
||||
size_t m_current_progress;
|
||||
size_t m_total_progress;
|
||||
};
|
||||
|
||||
@@ -13,5 +13,6 @@ public:
|
||||
IAssetDumper& operator=(const IAssetDumper& other) = default;
|
||||
IAssetDumper& operator=(IAssetDumper&& other) noexcept = default;
|
||||
|
||||
virtual void DumpPool(AssetDumpingContext& context, AssetPool<T>* pool) = 0;
|
||||
[[nodiscard]] virtual size_t GetProgressTotalCount(const AssetPool<T>& pool) const = 0;
|
||||
virtual void DumpPool(AssetDumpingContext& context, const AssetPool<T>& pool) = 0;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user