Pull merge from lindenlab/viewer-release
commit
026db0511f
1
.hgtags
1
.hgtags
|
|
@ -500,3 +500,4 @@ d3d0101e980ec95043e0af9b7903045d3bc447e4 3.7.24-release
|
|||
9978a8c3a2ffce4a5e1c186256581c2ac139c9dc 3.7.25-release
|
||||
000e9dda4162cbf0a83ba88558b19473654a09a9 3.7.26-release
|
||||
afd8d4756e8eda3c8f760625d1c17a2ad40ad6c8 3.7.27-release
|
||||
566874eb5ab26c003ef7fb0e22ce40c5fa0013f4 3.7.28-release
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
3.7.28
|
||||
3.7.29
|
||||
|
|
|
|||
|
|
@ -14725,17 +14725,6 @@
|
|||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>UseHTTPInventory</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Allow use of http inventory transfers instead of UDP</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>ClickToWalk</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -367,7 +367,8 @@ void LLFloaterPay::payViaObject(money_callback callback, LLSafeHandle<LLObjectSe
|
|||
LLSelectNode* node = selection->getFirstRootNode();
|
||||
if (!node)
|
||||
{
|
||||
//FIXME: notify user object no longer exists
|
||||
// object no longer exists
|
||||
LLNotificationsUtil::add("PayObjectFailed");
|
||||
floater->closeFloater();
|
||||
return;
|
||||
}
|
||||
|
|
@ -491,12 +492,22 @@ void LLFloaterPay::onGive(void* data)
|
|||
}
|
||||
if (amount > PAY_AMOUNT_NOTIFICATION && gStatusBar && gStatusBar->getBalance() > amount)
|
||||
{
|
||||
LLUUID payee_id;
|
||||
BOOL is_group;
|
||||
LLUUID payee_id = LLUUID::null;
|
||||
BOOL is_group = false;
|
||||
if (floater->mObjectSelection.notNull())
|
||||
{
|
||||
LLSelectNode* node = floater->mObjectSelection->getFirstRootNode();
|
||||
node->mPermissions->getOwnership(payee_id, is_group);
|
||||
if (node)
|
||||
{
|
||||
node->mPermissions->getOwnership(payee_id, is_group);
|
||||
}
|
||||
else
|
||||
{
|
||||
// object no longer exists
|
||||
LLNotificationsUtil::add("PayObjectFailed");
|
||||
floater->closeFloater();
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -562,6 +573,10 @@ void LLFloaterPay::give(S32 amount)
|
|||
msg->sendReliable( region->getHost() );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LLNotificationsUtil::add("PayObjectFailed");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -181,8 +181,6 @@ private:
|
|||
};
|
||||
|
||||
|
||||
const S32 MAX_FETCH_RETRIES = 10;
|
||||
|
||||
const char * const LOG_INV("Inventory");
|
||||
|
||||
} // end of namespace anonymous
|
||||
|
|
@ -199,10 +197,7 @@ LLInventoryModelBackgroundFetch::LLInventoryModelBackgroundFetch():
|
|||
mAllFoldersFetched(FALSE),
|
||||
mRecursiveInventoryFetchStarted(FALSE),
|
||||
mRecursiveLibraryFetchStarted(FALSE),
|
||||
mNumFetchRetries(0),
|
||||
mMinTimeBetweenFetches(0.3f),
|
||||
mMaxTimeBetweenFetches(10.f),
|
||||
mTimelyFetchPending(FALSE)
|
||||
mMinTimeBetweenFetches(0.3f)
|
||||
{}
|
||||
|
||||
LLInventoryModelBackgroundFetch::~LLInventoryModelBackgroundFetch()
|
||||
|
|
@ -351,164 +346,7 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()
|
|||
if (mBackgroundFetchActive && gAgent.getRegion() && gAgent.getRegion()->capabilitiesReceived())
|
||||
{
|
||||
// If we'll be using the capability, we'll be sending batches and the background thing isn't as important.
|
||||
if (gSavedSettings.getBOOL("UseHTTPInventory"))
|
||||
{
|
||||
bulkFetch();
|
||||
return;
|
||||
}
|
||||
|
||||
#if 1
|
||||
//--------------------------------------------------------------------------------
|
||||
// DEPRECATED OLD CODE
|
||||
//
|
||||
|
||||
// No more categories to fetch, stop fetch process.
|
||||
if (mFetchQueue.empty())
|
||||
{
|
||||
setAllFoldersFetched();
|
||||
return;
|
||||
}
|
||||
|
||||
F32 fast_fetch_time = lerp(mMinTimeBetweenFetches, mMaxTimeBetweenFetches, 0.1f);
|
||||
F32 slow_fetch_time = lerp(mMinTimeBetweenFetches, mMaxTimeBetweenFetches, 0.5f);
|
||||
if (mTimelyFetchPending && mFetchTimer.getElapsedTimeF32() > slow_fetch_time)
|
||||
{
|
||||
// Double timeouts on failure.
|
||||
mMinTimeBetweenFetches = llmin(mMinTimeBetweenFetches * 2.f, 10.f);
|
||||
mMaxTimeBetweenFetches = llmin(mMaxTimeBetweenFetches * 2.f, 120.f);
|
||||
LL_DEBUGS(LOG_INV) << "Inventory fetch times grown to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << LL_ENDL;
|
||||
// fetch is no longer considered "timely" although we will wait for full time-out.
|
||||
mTimelyFetchPending = FALSE;
|
||||
}
|
||||
|
||||
while(1)
|
||||
{
|
||||
if (mFetchQueue.empty())
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if (gDisconnected)
|
||||
{
|
||||
// Just bail if we are disconnected.
|
||||
break;
|
||||
}
|
||||
|
||||
const FetchQueueInfo info = mFetchQueue.front();
|
||||
|
||||
if (info.mIsCategory)
|
||||
{
|
||||
|
||||
LLViewerInventoryCategory* cat = gInventory.getCategory(info.mUUID);
|
||||
|
||||
// Category has been deleted, remove from queue.
|
||||
if (!cat)
|
||||
{
|
||||
mFetchQueue.pop_front();
|
||||
continue;
|
||||
}
|
||||
|
||||
if (mFetchTimer.getElapsedTimeF32() > mMinTimeBetweenFetches &&
|
||||
LLViewerInventoryCategory::VERSION_UNKNOWN == cat->getVersion())
|
||||
{
|
||||
// Category exists but has no children yet, fetch the descendants
|
||||
// for now, just request every time and rely on retry timer to throttle.
|
||||
if (cat->fetch())
|
||||
{
|
||||
mFetchTimer.reset();
|
||||
mTimelyFetchPending = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
// The catagory also tracks if it has expired and here it says it hasn't
|
||||
// yet. Get out of here because nothing is going to happen until we
|
||||
// update the timers.
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Do I have all my children?
|
||||
else if (gInventory.isCategoryComplete(info.mUUID))
|
||||
{
|
||||
// Finished with this category, remove from queue.
|
||||
mFetchQueue.pop_front();
|
||||
|
||||
// Add all children to queue.
|
||||
LLInventoryModel::cat_array_t* categories;
|
||||
LLInventoryModel::item_array_t* items;
|
||||
gInventory.getDirectDescendentsOf(cat->getUUID(), categories, items);
|
||||
for (LLInventoryModel::cat_array_t::const_iterator it = categories->begin();
|
||||
it != categories->end();
|
||||
++it)
|
||||
{
|
||||
mFetchQueue.push_back(FetchQueueInfo((*it)->getUUID(),info.mRecursive));
|
||||
}
|
||||
|
||||
// We received a response in less than the fast time.
|
||||
if (mTimelyFetchPending && mFetchTimer.getElapsedTimeF32() < fast_fetch_time)
|
||||
{
|
||||
// Shrink timeouts based on success.
|
||||
mMinTimeBetweenFetches = llmax(mMinTimeBetweenFetches * 0.8f, 0.3f);
|
||||
mMaxTimeBetweenFetches = llmax(mMaxTimeBetweenFetches * 0.8f, 10.f);
|
||||
LL_DEBUGS(LOG_INV) << "Inventory fetch times shrunk to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << LL_ENDL;
|
||||
}
|
||||
|
||||
mTimelyFetchPending = FALSE;
|
||||
continue;
|
||||
}
|
||||
else if (mFetchTimer.getElapsedTimeF32() > mMaxTimeBetweenFetches)
|
||||
{
|
||||
// Received first packet, but our num descendants does not match db's num descendants
|
||||
// so try again later.
|
||||
mFetchQueue.pop_front();
|
||||
|
||||
if (mNumFetchRetries++ < MAX_FETCH_RETRIES)
|
||||
{
|
||||
// push on back of queue
|
||||
mFetchQueue.push_back(info);
|
||||
}
|
||||
mTimelyFetchPending = FALSE;
|
||||
mFetchTimer.reset();
|
||||
break;
|
||||
}
|
||||
|
||||
// Not enough time has elapsed to do a new fetch
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
LLViewerInventoryItem* itemp = gInventory.getItem(info.mUUID);
|
||||
|
||||
mFetchQueue.pop_front();
|
||||
if (!itemp)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (mFetchTimer.getElapsedTimeF32() > mMinTimeBetweenFetches)
|
||||
{
|
||||
itemp->fetchFromServer();
|
||||
mFetchTimer.reset();
|
||||
mTimelyFetchPending = TRUE;
|
||||
}
|
||||
else if (itemp->mIsComplete)
|
||||
{
|
||||
mTimelyFetchPending = FALSE;
|
||||
}
|
||||
else if (mFetchTimer.getElapsedTimeF32() > mMaxTimeBetweenFetches)
|
||||
{
|
||||
mFetchQueue.push_back(info);
|
||||
mFetchTimer.reset();
|
||||
mTimelyFetchPending = FALSE;
|
||||
}
|
||||
// Not enough time has elapsed to do a new fetch
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// DEPRECATED OLD CODE
|
||||
//--------------------------------------------------------------------------------
|
||||
#endif
|
||||
bulkFetch();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -87,12 +87,9 @@ private:
|
|||
BOOL mBackgroundFetchActive;
|
||||
bool mFolderFetchActive;
|
||||
S32 mFetchCount;
|
||||
BOOL mTimelyFetchPending;
|
||||
S32 mNumFetchRetries;
|
||||
|
||||
LLFrameTimer mFetchTimer;
|
||||
F32 mMinTimeBetweenFetches;
|
||||
F32 mMaxTimeBetweenFetches;
|
||||
|
||||
struct FetchQueueInfo
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2726,15 +2726,12 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
|
|||
capabilityNames.append("FlickrConnect");
|
||||
capabilityNames.append("TwitterConnect");
|
||||
|
||||
if (gSavedSettings.getBOOL("UseHTTPInventory"))
|
||||
{
|
||||
capabilityNames.append("FetchLib2");
|
||||
capabilityNames.append("FetchLibDescendents2");
|
||||
capabilityNames.append("FetchInventory2");
|
||||
capabilityNames.append("FetchInventoryDescendents2");
|
||||
capabilityNames.append("IncrementCOFVersion");
|
||||
AISCommand::getCapabilityNames(capabilityNames);
|
||||
}
|
||||
capabilityNames.append("FetchLib2");
|
||||
capabilityNames.append("FetchLibDescendents2");
|
||||
capabilityNames.append("FetchInventory2");
|
||||
capabilityNames.append("FetchInventoryDescendents2");
|
||||
capabilityNames.append("IncrementCOFVersion");
|
||||
AISCommand::getCapabilityNames(capabilityNames);
|
||||
|
||||
capabilityNames.append("GetDisplayNames");
|
||||
capabilityNames.append("GetMesh");
|
||||
|
|
|
|||
|
|
@ -3597,16 +3597,6 @@
|
|||
function="ToggleControl"
|
||||
parameter="ImagePipelineUseHTTP" />
|
||||
</menu_item_check>
|
||||
<menu_item_check
|
||||
label="HTTP Inventory"
|
||||
name="HTTP Inventory">
|
||||
<menu_item_check.on_check
|
||||
function="CheckControl"
|
||||
parameter="UseHTTPInventory" />
|
||||
<menu_item_check.on_click
|
||||
function="ToggleControl"
|
||||
parameter="UseHTTPInventory" />
|
||||
</menu_item_check>
|
||||
<menu_item_call
|
||||
label="Compress Images"
|
||||
name="Compress Images">
|
||||
|
|
|
|||
|
|
@ -5500,6 +5500,17 @@ Warning: The 'Pay object' click action has been set, but it will only
|
|||
yestext="Pay"/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="PayObjectFailed"
|
||||
type="alertmodal">
|
||||
Payment failed: object was not found.
|
||||
<tag>fail</tag>
|
||||
<usetemplate
|
||||
name="okbutton"
|
||||
yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="OpenObjectCannotCopy"
|
||||
|
|
|
|||
Loading…
Reference in New Issue