summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorBrad Payne (Vir Linden) <vir@lindenlab.com>2010-04-16 17:13:11 -0400
committerBrad Payne (Vir Linden) <vir@lindenlab.com>2010-04-16 17:13:11 -0400
commit3b8ce1d18aafd7c0b4bc5eee4fb74054a7a1a819 (patch)
tree2847b75dc6e02471f1ba3bbc1265c874095b505b /indra
parent142f867d38060d3525dcab1cdd170836e1981ec1 (diff)
For EXT-6809 - search static VFS for all asset types
Diffstat (limited to 'indra')
-rw-r--r--indra/llmessage/llassetstorage.cpp68
-rw-r--r--indra/llmessage/llassetstorage.h3
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