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)9CPsfArchive::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() const31const CPsfArchive::FileList& CPsfArchive::GetFiles() const 32 { 33 return m_files; 34 } 35 GetFileInfo(const char * path) const36const 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