For EXT-6809 - search static VFS for all asset types

meow-7.2.2
Brad Payne (Vir Linden) 2010-04-16 17:13:11 -04:00
parent 142f867d38
commit 3b8ce1d18a
2 changed files with 46 additions and 25 deletions

View File

@ -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;

View File

@ -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