FIRE-20370: Restrict retry attempts to 10

meow-7.2.2
Ansariel 2016-11-22 01:28:22 +01:00
parent 5d6a01a84b
commit 23c679e93f
1 changed files with 71 additions and 19 deletions

View File

@ -63,6 +63,9 @@ static LLDefaultChildRegistry::Register<LLFavoritesBarCtrl> r("favorites_bar");
const S32 DROP_DOWN_MENU_WIDTH = 250;
const S32 DROP_DOWN_MENU_TOP_PAD = 13;
// <FS:Ansariel> FIRE-20370: Viewer sends multiple map block requests when hovering over favorites bar button
const S32 MAX_LANDMARK_REQUEST_RETRIES = 10;
/**
* Helper for LLFavoriteLandmarkButton and LLFavoriteLandmarkMenuItem.
* Performing requests for SLURL for given Landmark ID
@ -81,7 +84,11 @@ public:
mPosX(0),
mPosY(0),
mPosZ(0),
mIsLoading(false), // <FS:Ansariel> FIRE-20370: Viewer sends multiple map block requests when hovering over favorites bar button
// <FS:Ansariel> FIRE-20370: Viewer sends multiple map block requests when hovering over favorites bar button
mIsLoading(false),
mIsFailed(false),
mRetries(0),
// </FS:Ansariel>
mLoaded(false)
{
mHandle.bind(this);
@ -95,7 +102,7 @@ public:
{
// <FS:Ansariel> FIRE-20370: Viewer sends multiple map block requests when hovering over favorites bar button
//if(!mLoaded)
if (!mLoaded && !mIsLoading)
if (!mLoaded && !mIsLoading && !mIsFailed)
// </FS:Ansariel>
requestNameAndPos();
@ -106,7 +113,7 @@ public:
{
// <FS:Ansariel> FIRE-20370: Viewer sends multiple map block requests when hovering over favorites bar button
//if (!mLoaded)
if (!mLoaded && !mIsLoading)
if (!mLoaded && !mIsLoading && !mIsFailed)
// </FS:Ansariel>
requestNameAndPos();
return mPosX;
@ -116,7 +123,7 @@ public:
{
// <FS:Ansariel> FIRE-20370: Viewer sends multiple map block requests when hovering over favorites bar button
//if (!mLoaded)
if (!mLoaded && !mIsLoading)
if (!mLoaded && !mIsLoading && !mIsFailed)
// </FS:Ansariel>
requestNameAndPos();
return mPosY;
@ -126,7 +133,7 @@ public:
{
// <FS:Ansariel> FIRE-20370: Viewer sends multiple map block requests when hovering over favorites bar button
//if (!mLoaded)
if (!mLoaded && !mIsLoading)
if (!mLoaded && !mIsLoading && !mIsFailed)
// </FS:Ansariel>
requestNameAndPos();
return mPosZ;
@ -138,10 +145,24 @@ public:
return mLoaded;
}
bool isFailed() const
{
return mIsFailed;
}
/*virtual */ BOOL tick()
{
requestNameAndPos();
return FALSE;
mRetries++;
if (mRetries <= MAX_LANDMARK_REQUEST_RETRIES)
{
requestNameAndPos();
return FALSE;
}
else
{
mIsFailed = true;
return TRUE;
}
}
// </FS:Ansariel>
@ -164,6 +185,13 @@ private:
LLLandmarkActions::getRegionNameAndCoordsFromPosGlobal(g_pos,
boost::bind(&LLLandmarkInfoGetter::landmarkNameCallback, static_cast<LLHandle<LLLandmarkInfoGetter> >(mHandle), _1, _2, _3, _4));
}
// <FS:Ansariel> FIRE-20370: Viewer sends multiple map block requests when hovering over favorites bar button
else
{
mIsFailed = true;
mEventTimer.stop();
}
// </FS:Ansariel>
}
static void landmarkNameCallback(LLHandle<LLLandmarkInfoGetter> handle, const std::string& name, S32 x, S32 y, S32 z)
@ -178,6 +206,7 @@ private:
getter->mLoaded = true;
// <FS:Ansariel> FIRE-20370: Viewer sends multiple map block requests when hovering over favorites bar button
getter->mIsLoading = false;
getter->mIsFailed = false;
getter->mEventTimer.stop();
// </FS:Ansariel>
}
@ -189,7 +218,11 @@ private:
S32 mPosY;
S32 mPosZ;
bool mLoaded;
bool mIsLoading; // <FS:Ansariel> FIRE-20370: Viewer sends multiple map block requests when hovering over favorites bar button
// <FS:Ansariel> FIRE-20370: Viewer sends multiple map block requests when hovering over favorites bar button
bool mIsLoading;
bool mIsFailed;
S32 mRetries;
// </FS:Ansariel>
LLRootHandle<LLLandmarkInfoGetter> mHandle;
};
@ -221,19 +254,31 @@ public:
// LLToolTipMgr::instance().show(params);
//}
std::string extra_message = region_name;
if (mLandmarkInfoGetter.isLoaded())
if (!mLandmarkInfoGetter.isFailed())
{
extra_message = llformat("%s (%d, %d, %d)", region_name.c_str(),
mLandmarkInfoGetter.getPosX(), mLandmarkInfoGetter.getPosY(), mLandmarkInfoGetter.getPosZ());
std::string extra_message = region_name;
if (mLandmarkInfoGetter.isLoaded())
{
extra_message = llformat("%s (%d, %d, %d)", region_name.c_str(),
mLandmarkInfoGetter.getPosX(), mLandmarkInfoGetter.getPosY(), mLandmarkInfoGetter.getPosZ());
}
LLToolTip::Params params;
params.message = llformat("%s\n%s", getLabelSelected().c_str(), extra_message.c_str());
params.max_width = 1000;
params.sticky_rect = calcScreenRect();
LLToolTipMgr::instance().show(params);
}
else
{
LLToolTip::Params params;
params.message = getLabelSelected();
params.max_width = 1000;
params.sticky_rect = calcScreenRect();
LLToolTip::Params params;
params.message = llformat("%s\n%s", getLabelSelected().c_str(), extra_message.c_str());
params.max_width = 1000;
params.sticky_rect = calcScreenRect();
LLToolTipMgr::instance().show(params);
LLToolTipMgr::instance().show(params);
}
// </FS:Ansariel>
return TRUE;
@ -298,10 +343,17 @@ public:
LLToolTipMgr::instance().show(params);
}
// <FS:Ansariel> FIRE-20370: Viewer sends multiple map block requests when hovering over favorites bar button
else if (mLandmarkInfoGetter.isFailed())
{
LLToolTip::Params params;
params.message = getLabel();
params.sticky_rect = calcScreenRect();
LLToolTipMgr::instance().show(params);
}
else
{
LLToolTip::Params params;
params.message = llformat("%s\n%s (%d, %d)", getLabel().c_str(), region_name.c_str());
params.message = llformat("%s\n%s", getLabel().c_str(), region_name.c_str());
params.sticky_rect = calcScreenRect();
LLToolTipMgr::instance().show(params);
}