| 494 | } |
| 495 | |
| 496 | void ResourceManager::loadModuleAsyncInner(const StringBox& bundleName, |
| 497 | FlatSet<StringBox>& processedModules, |
| 498 | ResourceManagerLoadModuleType loadType, |
| 499 | Function<void(Result<Void>)> onComplete) { |
| 500 | if (processedModules.find(bundleName) != processedModules.end()) { |
| 501 | onComplete(Void()); |
| 502 | return; |
| 503 | } |
| 504 | processedModules.insert(bundleName); |
| 505 | |
| 506 | auto bundle = getBundle(bundleName); |
| 507 | if (!bundle->hasRemoteArchive()) { |
| 508 | onComplete(Void()); |
| 509 | return; |
| 510 | } |
| 511 | |
| 512 | auto manifest = _remoteModuleManager->getRegisteredManifest(bundleName); |
| 513 | if (manifest == nullptr) { |
| 514 | onComplete(Void()); |
| 515 | return; |
| 516 | } |
| 517 | |
| 518 | auto task = Valdi::makeShared<RemoteModulePrefetchTask>(); |
| 519 | |
| 520 | for (const auto& dependency : manifest->pb.dependencies()) { |
| 521 | task->enter(); |
| 522 | loadModuleAsyncInner(StringCache::getGlobal().makeString(dependency), |
| 523 | processedModules, |
| 524 | loadType, |
| 525 | [=](auto result) { task->leave(result); }); |
| 526 | } |
| 527 | |
| 528 | auto includeSources = loadType == ResourceManagerLoadModuleType::Sources || |
| 529 | loadType == ResourceManagerLoadModuleType::SourcesAndAssets; |
| 530 | auto includeAssets = loadType == ResourceManagerLoadModuleType::Assets || |
| 531 | loadType == ResourceManagerLoadModuleType::SourcesAndAssets; |
| 532 | |
| 533 | if (includeSources) { |
| 534 | task->enter(); |
| 535 | _remoteModuleManager->loadModule(bundleName, [=](auto result) { |
| 536 | if (result) { |
| 537 | bundle->setLoadedArchiveIfNeeded(result.value()); |
| 538 | } |
| 539 | task->leave(result); |
| 540 | }); |
| 541 | } |
| 542 | |
| 543 | if (includeAssets) { |
| 544 | task->enter(); |
| 545 | _remoteModuleManager->loadResources(bundleName, [=](auto result) { task->leave(result); }); |
| 546 | } |
| 547 | |
| 548 | task->notify(std::move(onComplete)); |
| 549 | } |
| 550 | |
| 551 | void ResourceManager::addListener(Valdi::IResourceManagerListener* listener) { |
| 552 | std::lock_guard<Mutex> guard(_mutex); |
no test coverage detected