Files
UnrealEngineUWP/Engine/Source/Runtime/RuntimeAssetCache/Private/RuntimeAssetCacheFilesystemBackend.cpp
Mikolaj Sieluzycki 82ab54fb1c Runtime asset cache tweaks.
- Moved example texture builder from QAGame tests to RuntimeAssetCache module for reference/documentation purposes.
- Changed bucket preloading code to use only cache key as file name (without bucket name).

[CL 2605476 by Mikolaj Sieluzycki in Main branch]
2015-06-30 07:21:59 -04:00

76 lines
2.4 KiB
C++

// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "RuntimeAssetCachePrivatePCH.h"
#include "RuntimeAssetCacheFilesystemBackend.h"
#include "RuntimeAssetCacheEntryMetadata.h"
#include "RuntimeAssetCacheBucket.h"
FArchive* FRuntimeAssetCacheFilesystemBackend::CreateReadArchive(FName Bucket, const TCHAR* CacheKey)
{
return IFileManager::Get().CreateFileReader(CacheKey);
}
FArchive* FRuntimeAssetCacheFilesystemBackend::CreateWriteArchive(FName Bucket, const TCHAR* CacheKey)
{
return IFileManager::Get().CreateFileWriter(CacheKey);
}
FRuntimeAssetCacheFilesystemBackend::FRuntimeAssetCacheFilesystemBackend()
{
GConfig->GetString(TEXT("RuntimeAssetCache"), TEXT("PathToRAC"), PathToRAC, GEngineIni);
PathToRAC = FPaths::GameSavedDir() / PathToRAC;
}
bool FRuntimeAssetCacheFilesystemBackend::RemoveCacheEntry(const FName Bucket, const TCHAR* CacheKey)
{
return IFileManager::Get().Delete(CacheKey);
}
bool FRuntimeAssetCacheFilesystemBackend::ClearCache()
{
return IFileManager::Get().DeleteDirectory(*PathToRAC, false, true);
}
bool FRuntimeAssetCacheFilesystemBackend::ClearCache(FName Bucket)
{
return IFileManager::Get().DeleteDirectory(*FPaths::Combine(*PathToRAC, *Bucket.ToString()), false, true);
}
FRuntimeAssetCacheBucket* FRuntimeAssetCacheFilesystemBackend::PreLoadBucket(FName BucketName, int32 BucketSize)
{
FString Path = FPaths::Combine(*PathToRAC, *BucketName.ToString());
FRuntimeAssetCacheBucket* Result = new FRuntimeAssetCacheBucket(BucketSize);
class FRuntimeAssetCacheFilesystemBackendDirectoryVisitor : public IPlatformFile::FDirectoryVisitor
{
public:
FRuntimeAssetCacheFilesystemBackendDirectoryVisitor(FRuntimeAssetCacheBucket* InBucket, FName InBucketName, FRuntimeAssetCacheFilesystemBackend* InBackend)
: Bucket(InBucket)
, BucketName(InBucketName)
, Backend(InBackend)
{ }
virtual bool Visit(const TCHAR* FilenameOrDirectory, bool bIsDirectory)
{
if (bIsDirectory)
{
return true;
}
FArchive* Ar = Backend->CreateReadArchive(BucketName, FilenameOrDirectory);
FCacheEntryMetadata* Metadata = Backend->PreloadMetadata(Ar);
Bucket->AddMetadataEntry(*FPaths::GetBaseFilename(FilenameOrDirectory), Metadata, true);
delete Ar;
return true;
}
private:
FRuntimeAssetCacheBucket* Bucket;
FName BucketName;
FRuntimeAssetCacheFilesystemBackend* Backend;
} Visitor(Result, BucketName, this);
IFileManager::Get().IterateDirectory(*Path, Visitor);
return Result;
}