void AssetsManagerEx::loadLocalManifest(const std::string& manifestUrl) { Manifest *cachedManifest = nullptr; // Find the cached manifest file if (_fileUtils->isFileExist(_cacheManifestPath)) { cachedManifest = new (std::nothrow) Manifest(); if (cachedManifest) { cachedManifest->parse(_cacheManifestPath); if (!cachedManifest->isLoaded()) { _fileUtils->removeFile(_cacheManifestPath); CC_SAFE_RELEASE(cachedManifest); cachedManifest = nullptr; } } } // Load local manifest in app package _localManifest->parse(_manifestUrl); if (_localManifest->isLoaded()) { // Compare with cached manifest to determine which one to use if (cachedManifest) { if (strcmp(_localManifest->getVersion().c_str(), cachedManifest->getVersion().c_str()) > 0) { // Recreate storage, to empty the content _fileUtils->removeDirectory(_storagePath); _fileUtils->createDirectory(_storagePath); CC_SAFE_RELEASE(cachedManifest); } else { CC_SAFE_RELEASE(_localManifest); _localManifest = cachedManifest; } } prepareLocalManifest(); } // Fail to load local manifest if (!_localManifest->isLoaded()) { CCLOG("AssetsManagerEx : No local manifest file found error.\n"); dispatchUpdateEvent(EventAssetsManagerEx::EventCode::ERROR_NO_LOCAL_MANIFEST); } }
void AssetsManagerEx::loadLocalManifest(const std::string& /*manifestUrl*/) { Manifest *cachedManifest = nullptr; // Find the cached manifest file if (_fileUtils->isFileExist(_cacheManifestPath)) { cachedManifest = new (std::nothrow) Manifest(); if (cachedManifest) { cachedManifest->parse(_cacheManifestPath); if (!cachedManifest->isLoaded()) { _fileUtils->removeFile(_cacheManifestPath); CC_SAFE_RELEASE(cachedManifest); cachedManifest = nullptr; } } } // Ensure no search path of cached manifest is used to load this manifest std::vector<std::string> searchPaths = _fileUtils->getSearchPaths(); if (cachedManifest) { std::vector<std::string> cacheSearchPaths = cachedManifest->getSearchPaths(); std::vector<std::string> trimmedPaths = searchPaths; for (auto path : cacheSearchPaths) { const auto pos = std::find(trimmedPaths.begin(), trimmedPaths.end(), path); if (pos != trimmedPaths.end()) { trimmedPaths.erase(pos); } } _fileUtils->setSearchPaths(trimmedPaths); } // Load local manifest in app package _localManifest->parse(_manifestUrl); if (cachedManifest) { // Restore search paths _fileUtils->setSearchPaths(searchPaths); } if (_localManifest->isLoaded()) { // Compare with cached manifest to determine which one to use if (cachedManifest) { bool localNewer = _localManifest->versionGreater(cachedManifest, _versionCompareHandle); if (localNewer) { // Recreate storage, to empty the content _fileUtils->removeDirectory(_storagePath); _fileUtils->createDirectory(_storagePath); CC_SAFE_RELEASE(cachedManifest); } else { CC_SAFE_RELEASE(_localManifest); _localManifest = cachedManifest; } } prepareLocalManifest(); } // Fail to load local manifest if (!_localManifest->isLoaded()) { CCLOG("AssetsManagerEx : No local manifest file found error.\n"); dispatchUpdateEvent(EventAssetsManagerEx::EventCode::ERROR_NO_LOCAL_MANIFEST); } }