| 574 | } |
| 575 | |
| 576 | void AssetsManager::doUpdateAssetConsumer(AssetsManagerTransaction& transaction, |
| 577 | const AssetKey& assetKey, |
| 578 | const Ref<ManagedAsset>& managedAsset, |
| 579 | const Ref<AssetConsumer>& consumerToUpdate) { |
| 580 | if (consumerToUpdate->getObserver() == nullptr) { |
| 581 | removeAssetConsumer(transaction, managedAsset, consumerToUpdate); |
| 582 | return; |
| 583 | } |
| 584 | |
| 585 | switch (consumerToUpdate->getState()) { |
| 586 | case AssetConsumerStateInitial: { |
| 587 | if (managedAsset->getState() == AssetStateFailedRetryable || |
| 588 | managedAsset->getState() == AssetStateFailedPermanently) { |
| 589 | consumerToUpdate->setState(AssetConsumerStateFailed); |
| 590 | consumerToUpdate->setLoadedAsset(managedAsset->getResolvedAssetLocation().error()); |
| 591 | scheduleAssetUpdate(transaction, assetKey); |
| 592 | } else { |
| 593 | loadAssetForConsumerAtResolvedLocation(transaction, |
| 594 | assetKey, |
| 595 | managedAsset, |
| 596 | consumerToUpdate, |
| 597 | managedAsset->getResolvedAssetLocation().value()); |
| 598 | } |
| 599 | } break; |
| 600 | case AssetConsumerStateLoading: { |
| 601 | SC_ASSERT(consumerToUpdate->getObserver() == nullptr); |
| 602 | removeAssetConsumer(transaction, managedAsset, consumerToUpdate); |
| 603 | } break; |
| 604 | case AssetConsumerStateFailed: { |
| 605 | notifyAssetConsumer(transaction, |
| 606 | assetKey, |
| 607 | managedAsset, |
| 608 | consumerToUpdate, |
| 609 | nullptr, |
| 610 | consumerToUpdate->getLoadedAsset().error()); |
| 611 | } break; |
| 612 | case AssetConsumerStateLoaded: { |
| 613 | notifyAssetConsumer(transaction, |
| 614 | assetKey, |
| 615 | managedAsset, |
| 616 | consumerToUpdate, |
| 617 | consumerToUpdate->getLoadedAsset().value(), |
| 618 | std::nullopt); |
| 619 | } break; |
| 620 | case AssetConsumerStateRemoved: |
| 621 | break; |
| 622 | } |
| 623 | } |
| 624 | |
| 625 | void AssetsManager::notifyAssetConsumer(AssetsManagerTransaction& transaction, |
| 626 | const AssetKey& assetKey, |
nothing calls this directly
no test coverage detected