| #include "rive/importers/file_asset_importer.hpp" | |
| #include "rive/assets/file_asset_contents.hpp" | |
| #include "rive/assets/file_asset.hpp" | |
| #include "rive/file_asset_loader.hpp" | |
| #include "rive/span.hpp" | |
| #include <cstdint> | |
| using namespace rive; | |
| FileAssetImporter::FileAssetImporter( | |
| FileAsset* fileAsset, | |
| rcp<FileAssetLoader> assetLoader, | |
| Factory* factory) | |
| : m_fileAsset(fileAsset) | |
| , m_fileAssetLoader(std::move(assetLoader)) | |
| , m_factory(factory) | |
| {} | |
| // if file asset contents are found when importing a rive file, store those for | |
| // when we resolve the importer later | |
| void FileAssetImporter::onFileAssetContents( | |
| std::unique_ptr<FileAssetContents> contents) | |
| { | |
| // we should only ever be called once | |
| assert(!m_content); | |
| m_content = std::move(contents); | |
| } | |
| StatusCode FileAssetImporter::resolve() | |
| { | |
| Span<const uint8_t> bytes; | |
| if (m_content != nullptr) | |
| { | |
| bytes = m_content->bytes(); | |
| } | |
| // If we have a file asset loader, lets give it the opportunity to claim | |
| // responsibility for loading the asset | |
| if (m_fileAssetLoader != nullptr && | |
| m_fileAssetLoader->loadContents(*m_fileAsset, bytes, m_factory)) | |
| { | |
| return StatusCode::Ok; | |
| } | |
| // If we do not, but we have found in band contents, load those | |
| else if (bytes.size() > 0) | |
| { | |
| m_fileAsset->decode(m_content->bytes(), m_factory); | |
| } | |
| // Note that it's ok for an asset to not resolve (or to resolve async). | |
| return StatusCode::Ok; | |
| } |