*
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
#include "IPakFileContentProvider.h"
|
||||
|
||||
namespace LifeCore
|
||||
{
|
||||
static const String pakPathSplitter(_text("/"));
|
||||
|
||||
IPakFileContentProvider::IPakFileContentProvider(IDataStream* pakFile, const String& name)
|
||||
{
|
||||
IPakFolder* folder = new IPakFolder();
|
||||
// g_rootFolder = pakFile;
|
||||
folder->Provider = this;
|
||||
folder->Name = name;
|
||||
|
||||
folder->EntryName = _text("");
|
||||
|
||||
fileSystem = new IFileSystem(folder);
|
||||
|
||||
g_sourceFile.Open(pakFile);
|
||||
|
||||
fileSystem->GetRootFolder();
|
||||
BuildTree();
|
||||
}
|
||||
void IPakFileContentProvider::BuildTree()
|
||||
{
|
||||
//g_sourceFile.LocateEntry(0);
|
||||
int numFiles = g_sourceFile.filesCount();
|
||||
|
||||
for (int i = 0; i < numFiles; i++)
|
||||
{
|
||||
//g_sourceFile.LocateEntry(i);
|
||||
entry_info info = g_sourceFile.GetEntryInfo(i);
|
||||
|
||||
String p = GetPakPathWithoutFilename(info.fileName);
|
||||
|
||||
IPakFolder* folder;
|
||||
|
||||
if(this->fileSystem->GetFolder(p, (IFolder**)&folder) != SC_OK)
|
||||
{
|
||||
printf("Failed to get folder! IPakFileContentProvider::BuildTree\n");
|
||||
return;
|
||||
}
|
||||
|
||||
IPakFile* file = new IPakFile();
|
||||
file->FileName = GetFileName(info.fileName, pakPathSplitter);
|
||||
file->Provider = this;
|
||||
file->Size = info.fileSize;
|
||||
file->EntryName = info.fileName;
|
||||
folder->AddFile(file);
|
||||
|
||||
//g_sourceFile.CloseCurrentEntry();
|
||||
}
|
||||
|
||||
//print folder tree
|
||||
String tab(_text("\t"));
|
||||
int cnt = fileSystem->GetRootFolder()->folderCount;
|
||||
for(int i = 0; i < cnt; i++)
|
||||
{
|
||||
IFolder* fld = fileSystem->GetRootFolder()->GetFolder(i);
|
||||
PRINT(_text("%s\n"), fld->Name.c_str());
|
||||
PRINT(_text("Files count: %i\n"), fld->fileCount);
|
||||
}
|
||||
}
|
||||
|
||||
String IPakFileContentProvider::GetPakPathWithoutFilename(const String& path)
|
||||
{
|
||||
int offset = path.find_last_of(_text("/"));
|
||||
if(offset>=0)
|
||||
{
|
||||
return path.substr(0, offset);
|
||||
}
|
||||
else
|
||||
{
|
||||
return _text("/");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user