void ZipArchiveTests::testListFileInfoNonRecursive() { ZipArchive arch(testPath, "Zip"); arch.load(); FileInfoListPtr vec = arch.listFileInfo(false); CPPUNIT_ASSERT_EQUAL((size_t)2, vec->size()); FileInfo& fi1 = vec->at(0); CPPUNIT_ASSERT_EQUAL(String("rootfile.txt"), fi1.filename); CPPUNIT_ASSERT_EQUAL(String("rootfile.txt"), fi1.basename); CPPUNIT_ASSERT_EQUAL(StringUtil::BLANK, fi1.path); CPPUNIT_ASSERT_EQUAL((size_t)40, fi1.compressedSize); CPPUNIT_ASSERT_EQUAL((size_t)130, fi1.uncompressedSize); FileInfo& fi2 = vec->at(1); CPPUNIT_ASSERT_EQUAL(String("rootfile2.txt"), fi2.filename); CPPUNIT_ASSERT_EQUAL(String("rootfile2.txt"), fi2.basename); CPPUNIT_ASSERT_EQUAL(StringUtil::BLANK, fi2.path); CPPUNIT_ASSERT_EQUAL((size_t)45, fi2.compressedSize); CPPUNIT_ASSERT_EQUAL((size_t)156, fi2.uncompressedSize); }
void ZipArchiveTests::testFindFileInfoRecursive() { ZipArchive arch(testPath, "Zip"); arch.load(); FileInfoListPtr vec = arch.findFileInfo("*.material", true); CPPUNIT_ASSERT_EQUAL((size_t)4, vec->size()); FileInfo& fi3 = vec->at(0); CPPUNIT_ASSERT_EQUAL(String("level1/materials/scripts/file.material"), fi3.filename); CPPUNIT_ASSERT_EQUAL(String("file.material"), fi3.basename); CPPUNIT_ASSERT_EQUAL(String("level1/materials/scripts/"), fi3.path); CPPUNIT_ASSERT_EQUAL((size_t)0, fi3.compressedSize); CPPUNIT_ASSERT_EQUAL((size_t)0, fi3.uncompressedSize); FileInfo& fi4 = vec->at(1); CPPUNIT_ASSERT_EQUAL(String("level1/materials/scripts/file2.material"), fi4.filename); CPPUNIT_ASSERT_EQUAL(String("file2.material"), fi4.basename); CPPUNIT_ASSERT_EQUAL(String("level1/materials/scripts/"), fi4.path); CPPUNIT_ASSERT_EQUAL((size_t)0, fi4.compressedSize); CPPUNIT_ASSERT_EQUAL((size_t)0, fi4.uncompressedSize); FileInfo& fi5 = vec->at(2); CPPUNIT_ASSERT_EQUAL(String("level2/materials/scripts/file3.material"), fi5.filename); CPPUNIT_ASSERT_EQUAL(String("file3.material"), fi5.basename); CPPUNIT_ASSERT_EQUAL(String("level2/materials/scripts/"), fi5.path); CPPUNIT_ASSERT_EQUAL((size_t)0, fi5.compressedSize); CPPUNIT_ASSERT_EQUAL((size_t)0, fi5.uncompressedSize); FileInfo& fi6 = vec->at(3); CPPUNIT_ASSERT_EQUAL(String("level2/materials/scripts/file4.material"), fi6.filename); CPPUNIT_ASSERT_EQUAL(String("file4.material"), fi6.basename); CPPUNIT_ASSERT_EQUAL(String("level2/materials/scripts/"), fi6.path); CPPUNIT_ASSERT_EQUAL((size_t)0, fi6.compressedSize); CPPUNIT_ASSERT_EQUAL((size_t)0, fi6.uncompressedSize); }
//----------------------------------------------------------------------- DataStreamPtr ZipArchive::open(const String& filename, bool readOnly) const { // zziplib is not threadsafe OGRE_LOCK_AUTO_MUTEX; String lookUpFileName = filename; #if OGRE_RESOURCEMANAGER_STRICT const int flags = 0; #else const int flags = ZZIP_CASELESS; #endif // Format not used here (always binary) ZZIP_FILE* zzipFile = zzip_file_open(mZzipDir, lookUpFileName.c_str(), ZZIP_ONLYZIP | flags); #if !OGRE_RESOURCEMANAGER_STRICT if (!zzipFile) // Try if we find the file { String basename, path; StringUtil::splitFilename(lookUpFileName, basename, path); const FileInfoListPtr fileNfo = findFileInfo(basename, true); if (fileNfo->size() == 1) // If there are more files with the same do not open anyone { Ogre::FileInfo info = fileNfo->at(0); lookUpFileName = info.path + info.basename; zzipFile = zzip_file_open(mZzipDir, lookUpFileName.c_str(), ZZIP_ONLYZIP | flags); // When an error happens here we will catch it below } } #endif if (!zzipFile) { int zerr = zzip_error(mZzipDir); String zzDesc = getZzipErrorDescription((zzip_error_t)zerr); OGRE_EXCEPT(Exception::ERR_FILE_NOT_FOUND, mName+ " Cannot open file: " + lookUpFileName + " - "+zzDesc, "ZipArchive::open"); } // Get uncompressed size too ZZIP_STAT zstat; zzip_dir_stat(mZzipDir, lookUpFileName.c_str(), &zstat, flags); // Construct & return stream return DataStreamPtr(OGRE_NEW ZipDataStream(lookUpFileName, zzipFile, static_cast<size_t>(zstat.st_size))); }
Ogre::String GUIManager::getRandomWallpaperImage() { FileInfoListPtr files = Ogre::ResourceGroupManager::getSingleton().findResourceFileInfo("Wallpapers", "*.jpg", false); if(files.isNull() || files->empty()) { return ""; } srand ( time(NULL) ); int num = 0; for(int i = 0; i<Ogre::Math::RangeRandom(0, 10); i++) num = Ogre::Math::RangeRandom(0, files->size()); return files->at(num).filename; }
void ZipArchiveTests::testListFileInfoRecursive() { ZipArchive arch(testPath, "Zip"); arch.load(); FileInfoListPtr vec = arch.listFileInfo(true); CPPUNIT_ASSERT_EQUAL((size_t)6, vec->size()); FileInfo& fi3 = vec->at(0); CPPUNIT_ASSERT_EQUAL(String("level1/materials/scripts/file.material"), fi3.filename); CPPUNIT_ASSERT_EQUAL(String("file.material"), fi3.basename); CPPUNIT_ASSERT_EQUAL(String("level1/materials/scripts/"), fi3.path); CPPUNIT_ASSERT_EQUAL((size_t)0, fi3.compressedSize); CPPUNIT_ASSERT_EQUAL((size_t)0, fi3.uncompressedSize); FileInfo& fi4 = vec->at(1); CPPUNIT_ASSERT_EQUAL(String("level1/materials/scripts/file2.material"), fi4.filename); CPPUNIT_ASSERT_EQUAL(String("file2.material"), fi4.basename); CPPUNIT_ASSERT_EQUAL(String("level1/materials/scripts/"), fi4.path); CPPUNIT_ASSERT_EQUAL((size_t)0, fi4.compressedSize); CPPUNIT_ASSERT_EQUAL((size_t)0, fi4.uncompressedSize); FileInfo& fi5 = vec->at(2); CPPUNIT_ASSERT_EQUAL(String("level2/materials/scripts/file3.material"), fi5.filename); CPPUNIT_ASSERT_EQUAL(String("file3.material"), fi5.basename); CPPUNIT_ASSERT_EQUAL(String("level2/materials/scripts/"), fi5.path); CPPUNIT_ASSERT_EQUAL((size_t)0, fi5.compressedSize); CPPUNIT_ASSERT_EQUAL((size_t)0, fi5.uncompressedSize); FileInfo& fi6 = vec->at(3); CPPUNIT_ASSERT_EQUAL(String("level2/materials/scripts/file4.material"), fi6.filename); CPPUNIT_ASSERT_EQUAL(String("file4.material"), fi6.basename); CPPUNIT_ASSERT_EQUAL(String("level2/materials/scripts/"), fi6.path); CPPUNIT_ASSERT_EQUAL((size_t)0, fi6.compressedSize); CPPUNIT_ASSERT_EQUAL((size_t)0, fi6.uncompressedSize); FileInfo& fi1 = vec->at(4); CPPUNIT_ASSERT_EQUAL(String("rootfile.txt"), fi1.filename); CPPUNIT_ASSERT_EQUAL(String("rootfile.txt"), fi1.basename); CPPUNIT_ASSERT_EQUAL(StringUtil::BLANK, fi1.path); CPPUNIT_ASSERT_EQUAL((size_t)40, fi1.compressedSize); CPPUNIT_ASSERT_EQUAL((size_t)130, fi1.uncompressedSize); FileInfo& fi2 = vec->at(5); CPPUNIT_ASSERT_EQUAL(String("rootfile2.txt"), fi2.filename); CPPUNIT_ASSERT_EQUAL(String("rootfile2.txt"), fi2.basename); CPPUNIT_ASSERT_EQUAL(StringUtil::BLANK, fi2.path); CPPUNIT_ASSERT_EQUAL((size_t)45, fi2.compressedSize); CPPUNIT_ASSERT_EQUAL((size_t)156, fi2.uncompressedSize); }