diff options
author | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2010-04-16 17:13:11 -0400 |
---|---|---|
committer | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2010-04-16 17:13:11 -0400 |
commit | 3b8ce1d18aafd7c0b4bc5eee4fb74054a7a1a819 (patch) | |
tree | 2847b75dc6e02471f1ba3bbc1265c874095b505b /indra | |
parent | 142f867d38060d3525dcab1cdd170836e1981ec1 (diff) |
For EXT-6809 - search static VFS for all asset types
Diffstat (limited to 'indra')
-rw-r--r-- | indra/llmessage/llassetstorage.cpp | 68 | ||||
-rw-r--r-- | indra/llmessage/llassetstorage.h | 3 |
2 files changed, 46 insertions, 25 deletions
diff --git a/indra/llmessage/llassetstorage.cpp b/indra/llmessage/llassetstorage.cpp index c3a786d59c..e65a488098 100644 --- a/indra/llmessage/llassetstorage.cpp +++ b/indra/llmessage/llassetstorage.cpp @@ -401,12 +401,41 @@ BOOL LLAssetStorage::hasLocalAsset(const LLUUID &uuid, const LLAssetType::EType return mStaticVFS->getExists(uuid, type) || mVFS->getExists(uuid, type); } +bool LLAssetStorage::findInVFSAndInvokeCallback(LLVFS *vfs, const LLUUID& uuid, LLAssetType::EType type, + LLGetAssetCallback callback, void *user_data) +{ + // Try in static VFS first. + BOOL exists = vfs->getExists(uuid, type); + if (exists) + { + LLVFile file(vfs, uuid, type); + U32 size = exists ? file.getSize() : 0; + if (size>0) + { + // we've already got the file + // theoretically, partial files w/o a pending request shouldn't happen + // unless there's a weird error + if (callback) + { + callback(vfs, uuid, type, user_data, LL_ERR_NOERR, LL_EXSTAT_VFS_CACHED); + return true; + } + } + else + { + llwarns << "Asset vfile " << uuid << ":" << type + << " found with bad size " << file.getSize() << ", ignoring" << llendl; + } + } + return false; +} + /////////////////////////////////////////////////////////////////////////// // GET routines /////////////////////////////////////////////////////////////////////////// // IW - uuid is passed by value to avoid side effects, please don't re-add & -void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, void (*callback)(LLVFS *vfs, const LLUUID&, LLAssetType::EType, void *, S32, LLExtStat), void *user_data, BOOL is_priority) +void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, LLGetAssetCallback callback, void *user_data, BOOL is_priority) { lldebugs << "LLAssetStorage::getAssetData() - " << uuid << "," << LLAssetType::lookup(type) << llendl; @@ -425,31 +454,9 @@ void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, vo return; } + if (findInVFSAndInvokeCallback(mStaticVFS,uuid,type,callback,user_data)) { - // Try in static VFS first. - BOOL exists = mStaticVFS->getExists(uuid, type); - //exists = false; - if (exists) - { - LLVFile file(mStaticVFS, uuid, type); - U32 size = exists ? file.getSize() : 0; - if (size>0) - { - // we've already got the file - // theoretically, partial files w/o a pending request shouldn't happen - // unless there's a weird error - if (callback) - { - callback(mStaticVFS, uuid, type, user_data, LL_ERR_NOERR, LL_EXSTAT_VFS_CACHED); - } - return; - } - else - { - llwarns << "Asset vfile " << uuid << ":" << type - << " found in static VFS with bad size " << file.getSize() << ", ignoring" << llendl; - } - } + return; } BOOL exists = mVFS->getExists(uuid, type); @@ -645,6 +652,11 @@ void LLAssetStorage::getEstateAsset(const LLHost &object_sim, const LLUUID &agen return; } + if (findInVFSAndInvokeCallback(mStaticVFS,asset_id,atype,callback,user_data)) + { + return; + } + BOOL exists = mVFS->getExists(asset_id, atype); LLVFile file(mVFS, asset_id, atype); U32 size = exists ? file.getSize() : 0; @@ -776,6 +788,12 @@ void LLAssetStorage::getInvItemAsset(const LLHost &object_sim, const LLUUID &age if(asset_id.notNull()) { + // Try static VFS first. + if (findInVFSAndInvokeCallback(mStaticVFS, asset_id, atype, callback, user_data)) + { + return; + } + exists = mVFS->getExists(asset_id, atype); LLVFile file(mVFS, asset_id, atype); size = exists ? file.getSize() : 0; diff --git a/indra/llmessage/llassetstorage.h b/indra/llmessage/llassetstorage.h index 979ce14ad0..39afa4b62c 100644 --- a/indra/llmessage/llassetstorage.h +++ b/indra/llmessage/llassetstorage.h @@ -258,6 +258,9 @@ public: virtual BOOL hasLocalAsset(const LLUUID &uuid, LLAssetType::EType type); + bool findInVFSAndInvokeCallback(LLVFS *vfs, const LLUUID& uuid, LLAssetType::EType type, + LLGetAssetCallback callback, void *user_data); + // public interface methods // note that your callback may get called BEFORE the function returns |