mirror of
https://github.com/FirestormViewer/phoenix-firestorm.git
synced 2026-08-14 00:48:30 +00:00
Merge branch 'release/2026.01' into develop
This commit is contained in:
+7
-7
@@ -2633,11 +2633,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>43c5f93517794aeade550e4266b959d1f0cfcb7f</string>
|
||||
<string>72ed1f6d469a8ffaffd69be39b7af186d7c3b1d7</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-webrtc-build/releases/download/m137.7151.04.20-universal/webrtc-m137.7151.04.20-universal.17630578914-darwin64-17630578914.tar.zst</string>
|
||||
<string>https://github.com/secondlife/3p-webrtc-build/releases/download/m137.7151.04.22/webrtc-m137.7151.04.22.21966754211-darwin64-21966754211.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
@@ -2647,11 +2647,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>efc5b176d878cfc16b8f82445d82ddb96815b6ab</string>
|
||||
<string>b4d0c836d99491841c3816ff93bb2655a2817bd3</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-webrtc-build/releases/download/m137.7151.04.20-universal/webrtc-m137.7151.04.20-universal.17630578914-linux64-17630578914.tar.zst</string>
|
||||
<string>https://github.com/secondlife/3p-webrtc-build/releases/download/m137.7151.04.22/webrtc-m137.7151.04.22.21966754211-linux64-21966754211.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
@@ -2661,11 +2661,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>1e36f100de32c7c71325497a672fb1659b3f206d</string>
|
||||
<string>ab2bddd77b1568b22b50ead13c1c33da94f4d59a</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-webrtc-build/releases/download/m137.7151.04.20-universal/webrtc-m137.7151.04.20-universal.17630578914-windows64-17630578914.tar.zst</string>
|
||||
<string>https://github.com/secondlife/3p-webrtc-build/releases/download/m137.7151.04.22/webrtc-m137.7151.04.22.21966754211-windows64-21966754211.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
@@ -2678,7 +2678,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
||||
<key>copyright</key>
|
||||
<string>Copyright (c) 2011, The WebRTC project authors. All rights reserved.</string>
|
||||
<key>version</key>
|
||||
<string>m137.7151.04.20-universal.17630578914</string>
|
||||
<string>m137.7151.04.22.21966754211</string>
|
||||
<key>name</key>
|
||||
<string>webrtc</string>
|
||||
<key>vcs_branch</key>
|
||||
|
||||
@@ -436,7 +436,7 @@ struct LLWindowWin32::LLWindowWin32Thread : public LL::ThreadPool
|
||||
{
|
||||
if (!mWindowTimeout)
|
||||
{
|
||||
mWindowTimeout = std::make_unique<LLWatchdogTimeout>("mainloop");
|
||||
mWindowTimeout = std::make_unique<LLWatchdogTimeout>("WindowThread");
|
||||
// supposed to be executed within run(),
|
||||
// so no point checking if thread is alive
|
||||
resumeTimeout("TimeoutInit");
|
||||
|
||||
@@ -652,7 +652,7 @@
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string>http://lecs-viewer-web-components.s3.amazonaws.com/v3.0/[GRID_LOWERCASE]/vawp/index.html</string>
|
||||
<string>https://lecs-viewer-web-components.s3.amazonaws.com/v3.0/[GRID_LOWERCASE]/vawp/index.html</string>
|
||||
</map>
|
||||
<!--AvatarBakedTextureUploadTimeout is in use by QA-->
|
||||
<key>AvatarBakedTextureUploadTimeout</key>
|
||||
@@ -2478,7 +2478,7 @@
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string>http://lecs-viewer-web-components.s3.amazonaws.com/v3.0/[GRID_LOWERCASE]/guide.html</string>
|
||||
<string>https://lecs-viewer-web-components.s3.amazonaws.com/v3.0/[GRID_LOWERCASE]/guide.html</string>
|
||||
</map>
|
||||
<key>DisableCameraConstraints</key>
|
||||
<map>
|
||||
@@ -2786,7 +2786,7 @@
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string>http://events.[GRID]/viewer/embed/event/[EVENT_ID]</string>
|
||||
<string>https://events.[GRID]/viewer/embed/event/[EVENT_ID]</string>
|
||||
</map>
|
||||
<key>MainWorkTime</key>
|
||||
<map>
|
||||
@@ -3443,7 +3443,7 @@
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string>http://viewer-help.secondlife.com/[LANGUAGE]/[CHANNEL]/[VERSION]/[TOPIC][DEBUG_MODE]</string>
|
||||
<string>https://viewer-help.secondlife.com/[LANGUAGE]/[CHANNEL]/[VERSION]/[TOPIC][DEBUG_MODE]</string>
|
||||
</map>
|
||||
<key>HowToHelpURL</key>
|
||||
<map>
|
||||
@@ -3454,7 +3454,7 @@
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string>http://lecs-viewer-web-components.s3.amazonaws.com/v3.0/[GRID_LOWERCASE]/howto/index.html</string>
|
||||
<string>https://lecs-viewer-web-components.s3.amazonaws.com/v3.0/[GRID_LOWERCASE]/howto/index.html</string>
|
||||
</map>
|
||||
<key>HomeSidePanelURL</key>
|
||||
<map>
|
||||
@@ -4070,7 +4070,7 @@
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string>http://wiki.secondlife.com/wiki/[LSL_STRING]</string>
|
||||
<string>https://wiki.secondlife.com/wiki/[LSL_STRING]</string>
|
||||
</map>
|
||||
<key>LSLFontSizeName</key>
|
||||
<map>
|
||||
@@ -4512,7 +4512,7 @@
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>30.0</real>
|
||||
<real>60.0</real>
|
||||
</map>
|
||||
<key>MapScale</key>
|
||||
<map>
|
||||
@@ -14743,7 +14743,7 @@
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string>http://common-flash-secondlife-com.s3.amazonaws.com/viewer/v2.6/agni/404.html</string>
|
||||
<string>https://common-flash-secondlife-com.s3.amazonaws.com/viewer/v2.6/agni/404.html</string>
|
||||
</map>
|
||||
<key>OpenIMOnVoice</key>
|
||||
<map>
|
||||
|
||||
@@ -1349,6 +1349,7 @@ bool LLAppViewer::frame()
|
||||
|
||||
bool LLAppViewer::doFrame()
|
||||
{
|
||||
resumeMainloopTimeout("Main:doFrameStart");
|
||||
#ifdef LL_DISCORD
|
||||
{
|
||||
LL_PROFILE_ZONE_NAMED("discord_callbacks");
|
||||
@@ -1643,17 +1644,20 @@ bool LLAppViewer::doFrame()
|
||||
|
||||
if (LLApp::isExiting())
|
||||
{
|
||||
pingMainloopTimeout("Main:qSnapshot");
|
||||
// Save snapshot for next time, if we made it through initialization
|
||||
if (STATE_STARTED == LLStartUp::getStartupState())
|
||||
{
|
||||
saveFinalSnapshot();
|
||||
}
|
||||
|
||||
pingMainloopTimeout("Main:TerminateVoice");
|
||||
if (LLVoiceClient::instanceExists())
|
||||
{
|
||||
LLVoiceClient::getInstance()->terminate();
|
||||
}
|
||||
|
||||
pingMainloopTimeout("Main:TerminatePump");
|
||||
delete gServicePump;
|
||||
gServicePump = NULL;
|
||||
|
||||
@@ -1662,6 +1666,11 @@ bool LLAppViewer::doFrame()
|
||||
LL_INFOS() << "Exiting main_loop" << LL_ENDL;
|
||||
}
|
||||
}LLPerfStats::StatsRecorder::endFrame();
|
||||
|
||||
// Not viewer's fault if something outside frame
|
||||
// pauses viewer (ex: macOS doesn't call oneFrame),
|
||||
// so stop tracking on exit.
|
||||
pauseMainloopTimeout();
|
||||
LL_PROFILER_FRAME_END;
|
||||
|
||||
return ! LLApp::isRunning();
|
||||
@@ -3205,7 +3214,6 @@ bool LLAppViewer::initWindow()
|
||||
app->createErrorMarker(LAST_EXEC_FROZE);
|
||||
}
|
||||
});
|
||||
gViewerWindow->getWindow()->initWatchdog();
|
||||
}
|
||||
|
||||
LLNotificationsUI::LLNotificationManager::getInstance();
|
||||
@@ -4185,6 +4193,7 @@ void LLAppViewer::requestQuit()
|
||||
return;
|
||||
}
|
||||
|
||||
pingMainloopTimeout("Main:qMetrics");
|
||||
// Try to send metrics back to the grid
|
||||
metricsSend(!gDisconnected);
|
||||
|
||||
@@ -4200,6 +4209,7 @@ void LLAppViewer::requestQuit()
|
||||
LLHUDManager::getInstance()->sendEffects();
|
||||
effectp->markDead() ;//remove it.
|
||||
|
||||
pingMainloopTimeout("Main:qFloaters");
|
||||
// Attempt to close all floaters that might be
|
||||
// editing things.
|
||||
if (gFloaterView)
|
||||
@@ -4208,6 +4218,7 @@ void LLAppViewer::requestQuit()
|
||||
gFloaterView->closeAllChildren(true);
|
||||
mClosingFloaters = true;
|
||||
}
|
||||
pingMainloopTimeout("Main:qStats");
|
||||
|
||||
// Send preferences once, when exiting
|
||||
bool include_preferences = true;
|
||||
@@ -4215,6 +4226,7 @@ void LLAppViewer::requestQuit()
|
||||
|
||||
gLogoutTimer.reset();
|
||||
mQuitRequested = true;
|
||||
pingMainloopTimeout("Main:LoggingOut");
|
||||
}
|
||||
|
||||
static bool finish_quit(const LLSD& notification, const LLSD& response)
|
||||
@@ -5514,6 +5526,7 @@ void LLAppViewer::outOfMemorySoftQuit()
|
||||
LLLFSThread::sLocal->pause();
|
||||
gLogoutTimer.reset();
|
||||
mQuitRequested = true;
|
||||
destroyMainloopTimeout();
|
||||
|
||||
LLError::LLUserWarningMsg::showOutOfMemory();
|
||||
}
|
||||
@@ -5930,10 +5943,16 @@ void LLAppViewer::pingMainloopTimeout(std::string_view state)
|
||||
|
||||
F32 LLAppViewer::getMainloopTimeoutSec() const
|
||||
{
|
||||
if (isQuitting() || mQuitRequested)
|
||||
{
|
||||
constexpr F32 QUITTING_SECONDS = 240.f;
|
||||
return QUITTING_SECONDS;
|
||||
}
|
||||
if (LLStartUp::getStartupState() == STATE_STARTED
|
||||
&& gAgent.getTeleportState() == LLAgent::TELEPORT_NONE)
|
||||
{
|
||||
static LLCachedControl<F32> mainloop_started(gSavedSettings, "MainloopTimeoutStarted", 30.f);
|
||||
// consider making this value match 'disconnected' timout.
|
||||
static LLCachedControl<F32> mainloop_started(gSavedSettings, "MainloopTimeoutStarted", 60.f);
|
||||
return mainloop_started();
|
||||
}
|
||||
else
|
||||
@@ -5947,6 +5966,11 @@ void LLAppViewer::handleLoginComplete()
|
||||
{
|
||||
gLoggedInTime.start();
|
||||
initMainloopTimeout("Mainloop Init");
|
||||
LLWindow* viewer_window = gViewerWindow->getWindow();
|
||||
if (viewer_window) // in case of a headless client
|
||||
{
|
||||
viewer_window->initWatchdog();
|
||||
}
|
||||
|
||||
// Store some data to DebugInfo in case of a freeze.
|
||||
gDebugInfo["ClientInfo"]["Name"] = LLVersionInfo::instance().getChannel();
|
||||
|
||||
@@ -495,7 +495,9 @@ bool LLFeatureManager::loadGPUClass()
|
||||
{
|
||||
mGPUClass = GPU_CLASS_2;
|
||||
}
|
||||
else if (gbps <= class1_gbps*4.f)
|
||||
else if ((gbps <= class1_gbps*4.f)
|
||||
// Cap silicon's GPUs at med+ as they have high throughput, low capability
|
||||
|| gGLManager.mIsApple)
|
||||
{
|
||||
mGPUClass = GPU_CLASS_3;
|
||||
}
|
||||
|
||||
@@ -1740,6 +1740,22 @@ void LLFloaterPreference::onChangeMaturity()
|
||||
|| sim_access == SIM_ACCESS_ADULT);
|
||||
|
||||
getChild<LLIconCtrl>("rating_icon_adult")->setVisible(sim_access == SIM_ACCESS_ADULT);
|
||||
|
||||
// Update Legacy Search maturity settings
|
||||
bool can_access_mature = gAgent.canAccessMature();
|
||||
bool can_access_adult = gAgent.canAccessAdult();
|
||||
if (!can_access_mature)
|
||||
{
|
||||
gSavedSettings.setBOOL("ShowMatureSims", false);
|
||||
gSavedSettings.setBOOL("ShowMatureLand", false);
|
||||
gSavedSettings.setBOOL("ShowMatureClassifieds", false);
|
||||
}
|
||||
if (!can_access_adult)
|
||||
{
|
||||
gSavedSettings.setBOOL("ShowAdultSims", false);
|
||||
gSavedSettings.setBOOL("ShowAdultLand", false);
|
||||
gSavedSettings.setBOOL("ShowAdultClassifieds", false);
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterPreference::onChangeComplexityMode(const LLSD& newvalue)
|
||||
|
||||
@@ -1860,7 +1860,14 @@ void LLItemBridge::performAction(LLInventoryModel* model, std::string action)
|
||||
{
|
||||
LLVector3d global_pos;
|
||||
landmark->getGlobalPos(global_pos);
|
||||
LLLandmarkActions::getSLURLfromPosGlobal(global_pos, ©_slurl_to_clipboard_callback_inv, true);
|
||||
if (!global_pos.isExactlyZero())
|
||||
{
|
||||
LLLandmarkActions::getSLURLfromPosGlobal(global_pos, ©_slurl_to_clipboard_callback_inv, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLNotificationsUtil::add("LandmarkLocationUnknown");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -338,14 +338,21 @@ void LLInventoryGalleryContextMenu::doToSelected(const LLSD& userdata)
|
||||
{
|
||||
LLVector3d global_pos;
|
||||
landmark->getGlobalPos(global_pos);
|
||||
boost::function<void(std::string& slurl)> copy_slurl_to_clipboard_cb = [](const std::string& slurl)
|
||||
if (!global_pos.isExactlyZero())
|
||||
{
|
||||
gViewerWindow->getWindow()->copyTextToClipboard(utf8str_to_wstring(slurl));
|
||||
LLSD args;
|
||||
args["SLURL"] = slurl;
|
||||
LLNotificationsUtil::add("CopySLURL", args);
|
||||
};
|
||||
LLLandmarkActions::getSLURLfromPosGlobal(global_pos, copy_slurl_to_clipboard_cb, true);
|
||||
boost::function<void(std::string& slurl)> copy_slurl_to_clipboard_cb = [](const std::string& slurl)
|
||||
{
|
||||
gViewerWindow->getWindow()->copyTextToClipboard(utf8str_to_wstring(slurl));
|
||||
LLSD args;
|
||||
args["SLURL"] = slurl;
|
||||
LLNotificationsUtil::add("CopySLURL", args);
|
||||
};
|
||||
LLLandmarkActions::getSLURLfromPosGlobal(global_pos, copy_slurl_to_clipboard_cb, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLNotificationsUtil::add("LandmarkLocationUnknown");
|
||||
}
|
||||
};
|
||||
LLLandmark* landmark = LLLandmarkActions::getLandmark(mUUIDs.front(), copy_slurl_cb);
|
||||
if (landmark)
|
||||
|
||||
@@ -80,6 +80,40 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class LLFetchFirstLandmarkByPos : public LLInventoryCollectFunctor
|
||||
{
|
||||
private:
|
||||
LLVector3d mPos;
|
||||
bool mFound = false;
|
||||
public:
|
||||
LLFetchFirstLandmarkByPos(const LLVector3d& pos) :
|
||||
mPos(pos), mFound(false)
|
||||
{
|
||||
}
|
||||
|
||||
/*virtual*/ bool operator()(LLInventoryCategory* cat, LLInventoryItem* item)
|
||||
{
|
||||
if (mFound || !item || item->getType() != LLAssetType::AT_LANDMARK)
|
||||
return false;
|
||||
|
||||
LLLandmark* landmark = gLandmarkList.getAsset(item->getAssetUUID());
|
||||
if (!landmark) // the landmark not been loaded yet
|
||||
return false;
|
||||
|
||||
LLVector3d landmark_global_pos;
|
||||
if (!landmark->getGlobalPos(landmark_global_pos))
|
||||
return false;
|
||||
//we have to round off each coordinates to compare positions properly
|
||||
mFound = ll_round(mPos.mdV[VX]) == ll_round(landmark_global_pos.mdV[VX])
|
||||
&& ll_round(mPos.mdV[VY]) == ll_round(landmark_global_pos.mdV[VY])
|
||||
&& ll_round(mPos.mdV[VZ]) == ll_round(landmark_global_pos.mdV[VZ]);
|
||||
return mFound;
|
||||
}
|
||||
|
||||
// only care about first found landmark, so stop when found
|
||||
/*virtual*/ bool exceedsLimit() { return mFound; }
|
||||
};
|
||||
|
||||
class LLFetchLandmarksByName : public LLInventoryCollectFunctor
|
||||
{
|
||||
private:
|
||||
@@ -155,6 +189,9 @@ public:
|
||||
mFounded = LLViewerParcelMgr::getInstance()->inAgentParcel(landmark_global_pos);
|
||||
return mFounded;
|
||||
}
|
||||
|
||||
// only care about first found landmark, so stop when found
|
||||
/*virtual*/ bool exceedsLimit() { return mFounded; }
|
||||
};
|
||||
|
||||
static void fetch_landmarks(LLInventoryModel::cat_array_t& cats,
|
||||
@@ -197,23 +234,61 @@ bool LLLandmarkActions::landmarkAlreadyExists()
|
||||
//static
|
||||
bool LLLandmarkActions::hasParcelLandmark()
|
||||
{
|
||||
static LLUUID sLastItemID;
|
||||
static S32 sLastFrame = -1;
|
||||
if (sLastItemID.notNull())
|
||||
{
|
||||
LLInventoryItem* item = gInventory.getItem(sLastItemID);
|
||||
if (item)
|
||||
{
|
||||
LLLandmark* landmark = gLandmarkList.getAsset(item->getAssetUUID());
|
||||
if (landmark)
|
||||
{
|
||||
LLVector3d landmark_global_pos;
|
||||
if (landmark->getGlobalPos(landmark_global_pos)
|
||||
&& LLViewerParcelMgr::getInstance()->inAgentParcel(landmark_global_pos))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Cached landmark does not match current parcel anymore,
|
||||
// repeat inventory search to find a replacement landmark
|
||||
// or to make sure there are none.
|
||||
sLastItemID.setNull();
|
||||
sLastFrame = -1;
|
||||
}
|
||||
|
||||
if (sLastFrame == LLFrameTimer::getFrameCount())
|
||||
{
|
||||
// Ideally this should also check parcel change and landmark additions,
|
||||
// not just frame change.
|
||||
// But should be sufficient to check only frame as this is used
|
||||
// after inventory and parcel operations.
|
||||
return false;
|
||||
}
|
||||
sLastFrame = LLFrameTimer::getFrameCount();
|
||||
|
||||
LLFirstAgentParcelLandmark get_first_agent_landmark;
|
||||
LLInventoryModel::cat_array_t cats;
|
||||
LLInventoryModel::item_array_t items;
|
||||
fetch_landmarks(cats, items, get_first_agent_landmark);
|
||||
return !items.empty();
|
||||
|
||||
if (!items.empty())
|
||||
{
|
||||
sLastItemID = items[0]->getUUID();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// *TODO: This could be made more efficient by only fetching the FIRST
|
||||
// landmark that meets the criteria
|
||||
LLViewerInventoryItem* LLLandmarkActions::findLandmarkForGlobalPos(const LLVector3d &pos)
|
||||
{
|
||||
// Determine whether there are landmarks pointing to the current parcel.
|
||||
// Will stop after first found landmark.
|
||||
LLInventoryModel::cat_array_t cats;
|
||||
LLInventoryModel::item_array_t items;
|
||||
LLFetchlLandmarkByPos is_current_pos_landmark(pos);
|
||||
fetch_landmarks(cats, items, is_current_pos_landmark);
|
||||
LLFetchFirstLandmarkByPos get_landmark_from_pos(pos);
|
||||
fetch_landmarks(cats, items, get_landmark_from_pos);
|
||||
|
||||
if(items.empty())
|
||||
{
|
||||
@@ -385,7 +460,14 @@ void LLLandmarkActions::copySLURLtoClipboard(const LLUUID& landmarkInventoryItem
|
||||
{
|
||||
LLVector3d global_pos;
|
||||
landmark->getGlobalPos(global_pos);
|
||||
LLLandmarkActions::getSLURLfromPosGlobal(global_pos,©_slurl_to_clipboard_callback,true);
|
||||
if (!global_pos.isExactlyZero())
|
||||
{
|
||||
LLLandmarkActions::getSLURLfromPosGlobal(global_pos, ©_slurl_to_clipboard_callback, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLNotificationsUtil::add("LandmarkLocationUnknown");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -805,6 +805,10 @@ void LLMuteList::processMuteListUpdate(LLMessageSystem* msg, void**)
|
||||
std::string unclean_filename;
|
||||
msg->getStringFast(_PREHASH_MuteData, _PREHASH_Filename, unclean_filename);
|
||||
std::string filename = LLDir::getScrubbedFileName(unclean_filename);
|
||||
if (filename.empty())
|
||||
{
|
||||
LL_WARNS() << "Received empty mute list filename." << LL_ENDL;
|
||||
}
|
||||
|
||||
LLMuteList* mute_list = getInstance();
|
||||
mute_list->mLoadState = ML_REQUESTED;
|
||||
@@ -837,16 +841,16 @@ void LLMuteList::processUseCachedMuteList(LLMessageSystem* msg, void**)
|
||||
|
||||
void LLMuteList::onFileMuteList(void** user_data, S32 error_code, LLExtStat ext_status)
|
||||
{
|
||||
LL_INFOS() << "LLMuteList::processMuteListFile()" << LL_ENDL;
|
||||
|
||||
std::string* local_filename_and_path = (std::string*)user_data;
|
||||
if(local_filename_and_path && !local_filename_and_path->empty() && (error_code == 0))
|
||||
{
|
||||
LL_INFOS() << "Received mute list from server" << LL_ENDL;
|
||||
LLMuteList::getInstance()->loadFromFile(*local_filename_and_path);
|
||||
LLFile::remove(*local_filename_and_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS() << "LLMuteList xfer failed with code " << error_code << LL_ENDL;
|
||||
LLMuteList::getInstance()->mLoadState = ML_FAILED;
|
||||
}
|
||||
delete local_filename_and_path;
|
||||
|
||||
@@ -559,9 +559,6 @@ void LLPanelDirBrowser::processDirEventsReply(LLMessageSystem* msg, void**)
|
||||
LLUUID owner_id;
|
||||
std::string name;
|
||||
std::string date;
|
||||
bool show_pg = gSavedSettings.getBOOL("ShowPGEvents");
|
||||
bool show_mature = gSavedSettings.getBOOL("ShowMatureEvents");
|
||||
bool show_adult = gSavedSettings.getBOOL("ShowAdultEvents");
|
||||
|
||||
msg->getUUID("AgentData", "AgentID", agent_id);
|
||||
msg->getUUID("QueryData", "QueryID", query_id );
|
||||
@@ -618,27 +615,6 @@ void LLPanelDirBrowser::processDirEventsReply(LLMessageSystem* msg, void**)
|
||||
LL_WARNS() << "skipped event due to owner_id null, event_id " << event_id << LL_ENDL;
|
||||
continue;
|
||||
}
|
||||
|
||||
// skip events that don't match the flags
|
||||
// there's no PG flag, so we make sure neither adult nor mature is set
|
||||
if (((event_flags & (EVENT_FLAG_ADULT | EVENT_FLAG_MATURE)) == EVENT_FLAG_NONE) && !show_pg)
|
||||
{
|
||||
//llwarns << "Skipped pg event because we're not showing pg, event_id " << event_id << llendl;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((event_flags & EVENT_FLAG_MATURE) && !show_mature)
|
||||
{
|
||||
//llwarns << "Skipped mature event because we're not showing mature, event_id " << event_id << llendl;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((event_flags & EVENT_FLAG_ADULT) && !show_adult)
|
||||
{
|
||||
//llwarns << "Skipped adult event because we're not showing adult, event_id " << event_id << llendl;
|
||||
continue;
|
||||
}
|
||||
|
||||
LLSD content;
|
||||
|
||||
content["type"] = EVENT_CODE;
|
||||
|
||||
@@ -143,18 +143,17 @@ void LLPanelDirEvents::performQueryOrDelete(U32 event_id)
|
||||
static LLUICachedControl<bool> incpg("ShowPGEvents", true);
|
||||
static LLUICachedControl<bool> incmature("ShowMatureEvents", false);
|
||||
static LLUICachedControl<bool> incadult("ShowAdultEvents", false);
|
||||
if (!(incpg || incmature || incadult))
|
||||
{
|
||||
LLNotificationsUtil::add("NoContentToSearch");
|
||||
return;
|
||||
}
|
||||
|
||||
U32 scope = DFQ_DATE_EVENTS;
|
||||
if (incpg) scope |= DFQ_INC_PG;
|
||||
if (incmature && gAgent.canAccessMature()) scope |= DFQ_INC_MATURE;
|
||||
if (incadult && gAgent.canAccessAdult()) scope |= DFQ_INC_ADULT;
|
||||
|
||||
if ( !( scope & (DFQ_INC_PG | DFQ_INC_MATURE | DFQ_INC_ADULT )))
|
||||
{
|
||||
LLNotificationsUtil::add("NoContentToSearch");
|
||||
return;
|
||||
}
|
||||
|
||||
setupNewSearch();
|
||||
|
||||
std::ostringstream params;
|
||||
|
||||
@@ -62,20 +62,6 @@ bool LLPanelDirLand::postBuild()
|
||||
|
||||
childSetValue("type", gSavedSettings.getString("FindLandType"));
|
||||
|
||||
bool adult_enabled = gAgent.canAccessAdult();
|
||||
bool mature_enabled = gAgent.canAccessMature();
|
||||
childSetVisible("incpg", true);
|
||||
if (!mature_enabled)
|
||||
{
|
||||
childSetValue("incmature", false);
|
||||
childDisable("incmature");
|
||||
}
|
||||
if (!adult_enabled)
|
||||
{
|
||||
childSetValue("incadult", false);
|
||||
childDisable("incadult");
|
||||
}
|
||||
|
||||
childSetCommitCallback("pricecheck", onCommitPrice, this);
|
||||
childSetCommitCallback("areacheck", onCommitArea, this);
|
||||
|
||||
|
||||
@@ -121,6 +121,11 @@ void LLPanelDirPlaces::performQuery()
|
||||
static LLUICachedControl<bool> inc_pg("ShowPGSims", true);
|
||||
static LLUICachedControl<bool> inc_mature("ShowMatureSims", false);
|
||||
static LLUICachedControl<bool> inc_adult("ShowAdultSims", false);
|
||||
if (!(inc_pg || inc_mature || inc_adult))
|
||||
{
|
||||
LLNotificationsUtil::add("NoContentToSearch");
|
||||
return;
|
||||
}
|
||||
|
||||
if (inc_pg)
|
||||
{
|
||||
@@ -137,12 +142,6 @@ void LLPanelDirPlaces::performQuery()
|
||||
flags |= DFQ_INC_ADULT;
|
||||
}
|
||||
|
||||
if (0x0 == flags)
|
||||
{
|
||||
LLNotificationsUtil::add("NoContentToSearch");
|
||||
return;
|
||||
}
|
||||
|
||||
queryCore(query_string, category, flags);
|
||||
}
|
||||
|
||||
|
||||
@@ -6793,11 +6793,8 @@ class LLAvatarEnableResetSkeleton : public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
if (LLVOAvatar* avatar = find_avatar_from_object(LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
|
||||
return obj && obj->getAvatar();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -8842,6 +8839,12 @@ LLVOAvatar* find_avatar_from_object(LLViewerObject* object)
|
||||
}
|
||||
else if( !object->isAvatar() )
|
||||
{
|
||||
// Check for animesh objects (animated objects with a control avatar)
|
||||
LLVOAvatar* avatar = object->getAvatar();
|
||||
if (avatar)
|
||||
{
|
||||
return avatar;
|
||||
}
|
||||
object = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user