1 #include "PsfArchive.h"
2 #ifdef RAR_SUPPORT
3 #include "PsfRarArchive.h"
4 #endif
5 #include "PsfZipArchive.h"
6 #include "stricmp.h"
7 #include "make_unique.h"
8 
CreateFromPath(const fs::path & filePath)9 CPsfArchive::PsfArchivePtr CPsfArchive::CreateFromPath(const fs::path& filePath)
10 {
11 	auto extension = filePath.extension().string();
12 	PsfArchivePtr result;
13 	if(!strcmp(extension.c_str(), ".zip"))
14 	{
15 		result = std::make_unique<CPsfZipArchive>();
16 	}
17 #ifdef RAR_SUPPORT
18 	else if(!strcmp(extension.c_str(), ".rar"))
19 	{
20 		result = std::make_unique<CPsfRarArchive>();
21 	}
22 #endif
23 	else
24 	{
25 		throw std::runtime_error("Unsupported archive type.");
26 	}
27 	result->Open(filePath);
28 	return result;
29 }
30 
GetFiles() const31 const CPsfArchive::FileList& CPsfArchive::GetFiles() const
32 {
33 	return m_files;
34 }
35 
GetFileInfo(const char * path) const36 const CPsfArchive::FILEINFO* CPsfArchive::GetFileInfo(const char* path) const
37 {
38 	for(const auto& fileInfo : m_files)
39 	{
40 		if(!stricmp(fileInfo.name.c_str(), path))
41 		{
42 			return &fileInfo;
43 		}
44 	}
45 	return nullptr;
46 }
47