mirror of
https://github.com/FirestormViewer/phoenix-firestorm.git
synced 2026-08-14 08:53:53 +00:00
Merge branch 'master' into Texture_VRAM_Optimizations
This commit is contained in:
@@ -74,11 +74,13 @@
|
||||
<string>RenderShaderLightingMaxLevel</string>
|
||||
<string>RenderShadowDetail</string>
|
||||
<string>RenderShadowResolutionScale</string>
|
||||
<string>RenderSkyAmbientScale</string>
|
||||
<string>RenderSkyAutoAdjustAmbientScale</string>
|
||||
<string>RenderSkyAutoAdjustBlueDensityScale</string>
|
||||
<string>RenderSkyAutoAdjustBlueHorizonScale</string>
|
||||
<string>RenderSkyAutoAdjustSunColorScale</string>
|
||||
<string>RenderSkyAutoAdjustHDRScale</string>
|
||||
<string>RenderSkyAutoAdjustLegacy</string>
|
||||
<string>RenderSkyAutoAdjustProbeAmbiance</string>
|
||||
<string>RenderSkySunlightScale</string>
|
||||
<string>RenderSSAOIrradianceScale</string>
|
||||
|
||||
@@ -156,6 +156,7 @@ FSAreaSearch::FSAreaSearch(const LLSD& key) :
|
||||
mFilterPhantom(false),
|
||||
mFilterAttachment(false),
|
||||
mFilterMoaP(false),
|
||||
mFilterReflectionProbe(false),
|
||||
mFilterDistance(false),
|
||||
mFilterDistanceMin(0),
|
||||
mFilterDistanceMax(999999),
|
||||
@@ -166,6 +167,7 @@ FSAreaSearch::FSAreaSearch(const LLSD& key) :
|
||||
mBeacons(false),
|
||||
mExcludeAttachment(true),
|
||||
mExcludeTemporary(true),
|
||||
mExcludeReflectionProbe(false),
|
||||
mExcludePhysics(true),
|
||||
mExcludeChildPrims(true),
|
||||
mExcludeNeighborRegions(true),
|
||||
@@ -545,6 +547,11 @@ bool FSAreaSearch::isSearchableObject(LLViewerObject* objectp, LLViewerRegion* o
|
||||
return false;
|
||||
}
|
||||
|
||||
if (mExcludeReflectionProbe && objectp->mReflectionProbe.notNull())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -908,6 +915,11 @@ void FSAreaSearch::matchObject(FSObjectProperties& details, LLViewerObject* obje
|
||||
return;
|
||||
}
|
||||
|
||||
if (mFilterReflectionProbe && !objectp->mReflectionProbe.notNull())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
// Find text
|
||||
//-----------------------------------------------------------------------
|
||||
@@ -2217,6 +2229,10 @@ bool FSPanelAreaSearchFilter::postBuild()
|
||||
mCheckboxExcludetemporary->set(true);
|
||||
mCheckboxExcludetemporary->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this));
|
||||
|
||||
mCheckboxExcludeReflectionProbes = getChild<LLCheckBoxCtrl>("exclude_reflection_probes");
|
||||
mCheckboxExcludeReflectionProbes->set(false);
|
||||
mCheckboxExcludeReflectionProbes->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this));
|
||||
|
||||
mCheckboxExcludeChildPrim = getChild<LLCheckBoxCtrl>("exclude_childprim");
|
||||
mCheckboxExcludeChildPrim->set(true);
|
||||
mCheckboxExcludeChildPrim->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this));
|
||||
@@ -2240,6 +2256,9 @@ bool FSPanelAreaSearchFilter::postBuild()
|
||||
mCheckboxMoaP = getChild<LLCheckBoxCtrl>("filter_moap");
|
||||
mCheckboxMoaP->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this));
|
||||
|
||||
mCheckboxReflectionProbe = getChild<LLCheckBoxCtrl>("filter_reflection_probe");
|
||||
mCheckboxReflectionProbe->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this));
|
||||
|
||||
mCheckboxPermCopy = getChild<LLCheckBoxCtrl>("filter_perm_copy");
|
||||
mCheckboxPermCopy->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this));
|
||||
|
||||
@@ -2262,6 +2281,7 @@ void FSPanelAreaSearchFilter::onCommitCheckbox()
|
||||
mFSAreaSearch->setFilterForSale(mCheckboxForSale->get());
|
||||
mFSAreaSearch->setFilterDistance(mCheckboxDistance->get());
|
||||
mFSAreaSearch->setFilterMoaP(mCheckboxMoaP->get());
|
||||
mFSAreaSearch->setFilterReflectionProbe(mCheckboxReflectionProbe->get());
|
||||
|
||||
if (mCheckboxExcludePhysics->get())
|
||||
{
|
||||
@@ -2291,6 +2311,19 @@ void FSPanelAreaSearchFilter::onCommitCheckbox()
|
||||
}
|
||||
mFSAreaSearch->setFilterTemporary(mCheckboxTemporary->get());
|
||||
|
||||
if (mCheckboxExcludeReflectionProbes->get())
|
||||
{
|
||||
mFSAreaSearch->setFilterReflectionProbe(false);
|
||||
mCheckboxReflectionProbe->set(false);
|
||||
mCheckboxReflectionProbe->setEnabled(false);
|
||||
mFSAreaSearch->setExcludeReflectionProbe(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
mCheckboxReflectionProbe->setEnabled(true);
|
||||
mFSAreaSearch->setExcludeReflectionProbe(false);
|
||||
}
|
||||
|
||||
if (mCheckboxExcludeAttachment->get())
|
||||
{
|
||||
mFSAreaSearch->setFilterAttachment(false);
|
||||
|
||||
@@ -141,12 +141,14 @@ public:
|
||||
void setFilterPhantom(bool b) { mFilterPhantom = b; }
|
||||
void setFilterAttachment(bool b) { mFilterAttachment = b; }
|
||||
void setFilterMoaP(bool b) { mFilterMoaP = b; }
|
||||
void setFilterReflectionProbe(bool b) { mFilterReflectionProbe = b; }
|
||||
|
||||
void setRegexSearch(bool b) { mRegexSearch = b; }
|
||||
void setBeacons(bool b) { mBeacons = b; }
|
||||
|
||||
void setExcludeAttachment(bool b) { mExcludeAttachment = b; }
|
||||
void setExcludetemporary(bool b) { mExcludeTemporary = b; }
|
||||
void setExcludeReflectionProbe(bool b) { mExcludeReflectionProbe = b; }
|
||||
void setExcludePhysics(bool b) { mExcludePhysics = b; }
|
||||
void setExcludeChildPrims(bool b) { mExcludeChildPrims = b; }
|
||||
void setExcludeNeighborRegions(bool b) { mExcludeNeighborRegions = b; }
|
||||
@@ -230,6 +232,7 @@ private:
|
||||
|
||||
bool mExcludeAttachment;
|
||||
bool mExcludeTemporary;
|
||||
bool mExcludeReflectionProbe;
|
||||
bool mExcludePhysics;
|
||||
bool mExcludeChildPrims;
|
||||
bool mExcludeNeighborRegions;
|
||||
@@ -240,6 +243,7 @@ private:
|
||||
bool mFilterPhantom;
|
||||
bool mFilterAttachment;
|
||||
bool mFilterMoaP;
|
||||
bool mFilterReflectionProbe;
|
||||
|
||||
bool mFilterForSale;
|
||||
S32 mFilterForSaleMin;
|
||||
@@ -382,6 +386,7 @@ private:
|
||||
LLCheckBoxCtrl* mCheckboxLocked;
|
||||
LLCheckBoxCtrl* mCheckboxPhantom;
|
||||
LLCheckBoxCtrl* mCheckboxMoaP;
|
||||
LLCheckBoxCtrl* mCheckboxReflectionProbe;
|
||||
LLCheckBoxCtrl* mCheckboxDistance;
|
||||
LLSpinCtrl* mSpinDistanceMinValue;
|
||||
LLSpinCtrl* mSpinDistanceMaxValue;
|
||||
@@ -393,6 +398,7 @@ private:
|
||||
LLCheckBoxCtrl* mCheckboxExcludeAttachment;
|
||||
LLCheckBoxCtrl* mCheckboxExcludePhysics;
|
||||
LLCheckBoxCtrl* mCheckboxExcludetemporary;
|
||||
LLCheckBoxCtrl* mCheckboxExcludeReflectionProbes;
|
||||
LLCheckBoxCtrl* mCheckboxExcludeChildPrim;
|
||||
LLCheckBoxCtrl* mCheckboxExcludeNeighborRegions;
|
||||
LLCheckBoxCtrl* mCheckboxPermCopy;
|
||||
|
||||
@@ -1253,6 +1253,22 @@ FSFloaterIM* FSFloaterIM::show(const LLUUID& session_id)
|
||||
if (!gIMMgr->hasSession(session_id))
|
||||
return nullptr;
|
||||
|
||||
// <AS:chanayane> [FIRE-34494] fixes unable to open an IM with someone who started a group chat
|
||||
// Prevent showing non-IM sessions in FSFloaterIM::show()
|
||||
LLIMModel::LLIMSession* session = LLIMModel::getInstance()->findIMSession(session_id);
|
||||
if (!session || (
|
||||
IM_NOTHING_SPECIAL != session->mType
|
||||
&& IM_SESSION_P2P_INVITE != session->mType
|
||||
&& IM_SESSION_INVITE != session->mType
|
||||
&& IM_SESSION_CONFERENCE_START != session->mType
|
||||
&& IM_SESSION_GROUP_START != session->mType))
|
||||
{
|
||||
LL_WARNS("IMVIEW") << "Attempted to show FSFloaterIM for non-IM session: "
|
||||
<< (session ? std::to_string(session->mType) : "null") << LL_ENDL;
|
||||
return nullptr;
|
||||
}
|
||||
// </AS:chanayane>
|
||||
|
||||
if (!isChatMultiTab())
|
||||
{
|
||||
//hide all
|
||||
|
||||
@@ -197,6 +197,8 @@ void FSPrimfeedPhotoPanel::draw()
|
||||
mRefreshBtn->setEnabled(can_post);
|
||||
mBtnPreview->setEnabled(can_post);
|
||||
mLocationCheckbox->setEnabled(can_post);
|
||||
mPublicGalleryCheckbox->setEnabled(can_post);
|
||||
mCommercialCheckbox->setEnabled(can_post);
|
||||
|
||||
// Reassign the preview floater if we have the focus and the preview exists
|
||||
if (hasFocus() && isPreviewVisible())
|
||||
@@ -538,6 +540,8 @@ void FSPrimfeedPhotoPanel::onOpen(const LLSD& key)
|
||||
{
|
||||
// Reauthorise if necessary.
|
||||
FSPrimfeedAuth::initiateAuthRequest();
|
||||
LLSD dummy;
|
||||
onPrimfeedConnectStateChange(dummy);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -660,15 +664,14 @@ bool FSPrimfeedAccountPanel::postBuild()
|
||||
void FSPrimfeedAccountPanel::draw()
|
||||
{
|
||||
FSPrimfeedConnect::EConnectionState connection_state = FSPrimfeedConnect::instance().getConnectionState();
|
||||
static FSPrimfeedConnect::EConnectionState last_state = FSPrimfeedConnect::PRIMFEED_DISCONNECTED;
|
||||
|
||||
// Disable the 'disconnect' button and the 'use another account' button when disconnecting in progress
|
||||
bool disconnecting = connection_state == FSPrimfeedConnect::PRIMFEED_DISCONNECTING;
|
||||
mDisconnectButton->setEnabled(!disconnecting);
|
||||
|
||||
// Disable the 'connect' button when a connection is in progress
|
||||
bool connecting =
|
||||
(connection_state == FSPrimfeedConnect::PRIMFEED_CONNECTING || connection_state == FSPrimfeedConnect::PRIMFEED_CONNECTED);
|
||||
mConnectButton->setEnabled(!connecting);
|
||||
// Update the connection state if it has changed
|
||||
if (connection_state != last_state)
|
||||
{
|
||||
onPrimfeedConnectStateChange(LLSD());
|
||||
last_state = connection_state;
|
||||
}
|
||||
|
||||
LLPanel::draw();
|
||||
}
|
||||
@@ -701,7 +704,7 @@ void FSPrimfeedAccountPanel::onVisibilityChange(bool visible)
|
||||
|
||||
bool FSPrimfeedAccountPanel::onPrimfeedConnectStateChange(const LLSD&)
|
||||
{
|
||||
if (FSPrimfeedAuth::isAuthorized())
|
||||
if (FSPrimfeedAuth::isAuthorized() || FSPrimfeedConnect::instance().getConnectionState() == FSPrimfeedConnect::PRIMFEED_CONNECTING)
|
||||
{
|
||||
showConnectedLayout();
|
||||
}
|
||||
@@ -768,11 +771,15 @@ void FSPrimfeedAccountPanel::showConnectedLayout()
|
||||
void FSPrimfeedAccountPanel::onConnect()
|
||||
{
|
||||
FSPrimfeedAuth::initiateAuthRequest();
|
||||
LLSD dummy;
|
||||
onPrimfeedConnectStateChange(dummy);
|
||||
}
|
||||
|
||||
void FSPrimfeedAccountPanel::onDisconnect()
|
||||
{
|
||||
FSPrimfeedAuth::resetAuthStatus();
|
||||
LLSD dummy;
|
||||
onPrimfeedConnectStateChange(dummy);
|
||||
}
|
||||
|
||||
////////////////////////
|
||||
@@ -867,7 +874,7 @@ void FSFloaterPrimfeed::draw()
|
||||
}
|
||||
default:
|
||||
{
|
||||
LL_WARNS("Prmfeed") << "unexpected state" << connection_state << LL_ENDL;
|
||||
// LL_WARNS("Prmfeed") << "unexpected state" << connection_state << LL_ENDL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -131,6 +131,7 @@ void FSPrimfeedAuth::initiateAuthRequest()
|
||||
sPrimfeedAuth.reset();
|
||||
}
|
||||
);
|
||||
FSPrimfeedConnect::instance().setConnectionState(FSPrimfeedConnect::PRIMFEED_CONNECTING);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -149,20 +150,16 @@ void FSPrimfeedAuth::resetAuthStatus()
|
||||
event_data["status"] = "reset";
|
||||
event_data["success"] = "false";
|
||||
sPrimfeedAuthPump->post(event_data);
|
||||
FSPrimfeedConnect::instance().setConnectionState(FSPrimfeedConnect::PRIMFEED_DISCONNECTED);
|
||||
}
|
||||
|
||||
|
||||
FSPrimfeedAuth::FSPrimfeedAuth(authorized_callback_t callback)
|
||||
: mCallback(callback), mAuthenticating(false)
|
||||
: mCallback(callback)
|
||||
{
|
||||
mInstantMessageConnection = LLIMModel::instance().addNewMsgCallback(
|
||||
[this](const LLSD &message) {
|
||||
LL_DEBUGS("FSPrimfeedAuth") << "Received chat message: " << message["message"].asString() << LL_ENDL;
|
||||
this->onChatMessage(message);
|
||||
});
|
||||
mChatMessageConnection = LLNotificationsUI::LLNotificationManager::instance().getChatHandler()->addNewChatCallback(
|
||||
[this](const LLSD &message) {
|
||||
LL_DEBUGS("FSPrimfeedAuth") << "Received instant message: " << message["message"].asString() << LL_ENDL;
|
||||
LL_DEBUGS("FSPrimfeedAuth") << "Received chat message: " << message["message"].asString() << LL_ENDL;
|
||||
this->onChatMessage(message);
|
||||
});
|
||||
}
|
||||
@@ -184,21 +181,6 @@ FSPrimfeedAuth::~FSPrimfeedAuth()
|
||||
LL_WARNS("FSPrimfeedAuth") << "Unknown exception during chat connection disconnect." << LL_ENDL;
|
||||
}
|
||||
}
|
||||
if (mInstantMessageConnection.connected())
|
||||
{
|
||||
try
|
||||
{
|
||||
mInstantMessageConnection.disconnect();
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
LL_WARNS("FSPrimfeedAuth") << "Exception during instant message disconnect: " << e.what() << LL_ENDL;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
LL_WARNS("FSPrimfeedAuth") << "Unknown exception during instant message disconnect." << LL_ENDL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Factory method to create a shared pointer to FSPrimfeedAuth.
|
||||
@@ -216,7 +198,7 @@ std::shared_ptr<FSPrimfeedAuth> FSPrimfeedAuth::create(authorized_callback_t cal
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
auth->mAuthenticating = true;
|
||||
FSPrimfeedConnect::instance().setConnectionState(FSPrimfeedConnect::PRIMFEED_CONNECTING);
|
||||
|
||||
// If no token stored, begin the login request; otherwise check user status.
|
||||
if (gSavedPerAccountSettings.getString("FSPrimfeedOAuthToken").empty())
|
||||
@@ -453,7 +435,6 @@ void FSPrimfeedAuth::gotUserStatus(bool success, const LLSD &response)
|
||||
if (success && response.has("plan"))
|
||||
{
|
||||
gSavedPerAccountSettings.setString("FSPrimfeedOAuthToken", mOauthToken);
|
||||
gSavedPerAccountSettings.setString("FSPrimfeedRequestId", mRequestId);
|
||||
gSavedPerAccountSettings.setString("FSPrimfeedPlan", response["plan"].asString());
|
||||
gSavedPerAccountSettings.setString("FSPrimfeedProfileLink", response["link"].asString());
|
||||
gSavedPerAccountSettings.setString("FSPrimfeedUsername", response["username"].asString());
|
||||
|
||||
@@ -69,7 +69,6 @@ private:
|
||||
|
||||
explicit FSPrimfeedAuth(authorized_callback_t callback);
|
||||
authorized_callback_t mCallback;
|
||||
bool mAuthenticating;
|
||||
std::string mOauthToken;
|
||||
std::string mRequestId;
|
||||
|
||||
|
||||
@@ -670,7 +670,14 @@ void LLFloaterIMNearbyChatHandler::processChat(const LLChat& chat_msg,
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// <FS:Beq> Hide Primfeed OAuth message from chat to prevent accidental leak of secret.
|
||||
const std::string primfeed_oauth = "#PRIMFEED_OAUTH: ";
|
||||
if( chat_msg.mText.compare(0, primfeed_oauth.length(), primfeed_oauth) == 0 && chat_msg.mChatType == CHAT_TYPE_IM && chat_msg.mSourceType == CHAT_SOURCE_OBJECT )
|
||||
{
|
||||
// Don't show the message in chat.
|
||||
return;
|
||||
}
|
||||
// </FS:Beq>
|
||||
nearby_chat->addMessage(chat_msg, true, args);
|
||||
|
||||
if (chat_msg.mSourceType == CHAT_SOURCE_AGENT
|
||||
|
||||
@@ -3905,16 +3905,55 @@ LLUUID LLIMMgr::addSession(
|
||||
//works only for outgoing ad-hoc sessions
|
||||
if (new_session &&
|
||||
((IM_NOTHING_SPECIAL == dialog) || (IM_SESSION_P2P_INVITE == dialog) || (IM_SESSION_CONFERENCE_START == dialog)) &&
|
||||
ids.size())
|
||||
// <AS:chanayane> [FIRE-34494] fix unable to open an IM with someone who started a group chat
|
||||
//ids.size())
|
||||
!ids.empty())
|
||||
// </AS:chanayane>
|
||||
{
|
||||
session = LLIMModel::getInstance()->findAdHocIMSession(ids);
|
||||
if (session)
|
||||
{
|
||||
new_session = false;
|
||||
session_id = session->mSessionID;
|
||||
// <AS:chanayane> [FIRE-34494] fix unable to open an IM with someone who started a group chat
|
||||
// new_session = false;
|
||||
// session_id = session->mSessionID;
|
||||
|
||||
// Protect against wrong session type reuse (e.g., conference reused for IM)
|
||||
if (session->mType != dialog)
|
||||
{
|
||||
LL_WARNS("IMVIEW") << "Discarding mismatched session type reuse: expected "
|
||||
<< dialog << " but found " << session->mType
|
||||
<< " for session " << session->mSessionID
|
||||
<< ". This may indicate improper reuse of a session object." << LL_ENDL;
|
||||
session = nullptr;
|
||||
new_session = true;
|
||||
session_id = computeSessionID(dialog, other_participant_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
new_session = false;
|
||||
session_id = session->mSessionID;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (session && session->mType != dialog)
|
||||
{
|
||||
// Prevent reusing a session of the wrong type
|
||||
session = nullptr;
|
||||
new_session = true;
|
||||
|
||||
// Recompute session ID depending on dialog type
|
||||
if (dialog == IM_SESSION_CONFERENCE_START)
|
||||
{
|
||||
session_id.generate();
|
||||
}
|
||||
else
|
||||
{
|
||||
session_id = computeSessionID(dialog, other_participant_id);
|
||||
}
|
||||
// </AS:chanayane>
|
||||
}
|
||||
|
||||
//Notify observers that a session was added
|
||||
if (new_session)
|
||||
{
|
||||
|
||||
@@ -346,6 +346,15 @@ void LLLoginInstance::handleLoginFailure(const LLSD& event)
|
||||
LL_DEBUGS("LLLogin") << "reason " << reason_response
|
||||
<< " message " << message_response
|
||||
<< LL_ENDL;
|
||||
|
||||
if (response.has("mfa_hash"))
|
||||
{
|
||||
mRequestData["params"]["mfa_hash"] = response["mfa_hash"];
|
||||
mRequestData["params"]["token"] = "";
|
||||
|
||||
saveMFAHash(response);
|
||||
}
|
||||
|
||||
// For the cases of critical message or TOS agreement,
|
||||
// start the TOS dialog. The dialog response will be handled
|
||||
// by the LLLoginInstance::handleTOSResponse() callback.
|
||||
@@ -609,6 +618,24 @@ bool LLLoginInstance::handleMFAChallenge(LLSD const & notif, LLSD const & respon
|
||||
return true;
|
||||
}
|
||||
|
||||
void LLLoginInstance::saveMFAHash(LLSD const& response)
|
||||
{
|
||||
std::string grid(LLGridManager::getInstance()->getGridId());
|
||||
std::string user_id(LLStartUp::getUserId());
|
||||
|
||||
// Only save mfa_hash for future logins if the user wants their info remembered.
|
||||
if (response.has("mfa_hash") && gSavedSettings.getBOOL("RememberUser") && LLLoginInstance::getInstance()->saveMFA())
|
||||
{
|
||||
gSecAPIHandler->addToProtectedMap("mfa_hash", grid, user_id, response["mfa_hash"]);
|
||||
}
|
||||
else if (!LLLoginInstance::getInstance()->saveMFA())
|
||||
{
|
||||
gSecAPIHandler->removeFromProtectedMap("mfa_hash", grid, user_id);
|
||||
}
|
||||
// TODO(brad) - related to SL-17223 consider building a better interface that sync's automatically
|
||||
gSecAPIHandler->syncProtectedMap();
|
||||
}
|
||||
|
||||
std::string construct_start_string()
|
||||
{
|
||||
std::string start;
|
||||
|
||||
@@ -73,6 +73,8 @@ public:
|
||||
void setNotificationsInterface(LLNotificationsInterface* ni) { mNotifications = ni; }
|
||||
LLNotificationsInterface& getNotificationsInterface() const { return *mNotifications; }
|
||||
|
||||
void saveMFAHash(LLSD const& response);
|
||||
|
||||
private:
|
||||
typedef std::shared_ptr<LLEventAPI::Response> ResponsePtr;
|
||||
void constructAuthParams(LLPointer<LLCredential> user_credentials);
|
||||
|
||||
@@ -4973,24 +4973,7 @@ bool process_login_success_response(U32 &first_sim_size_x, U32 &first_sim_size_y
|
||||
LLViewerMedia::getInstance()->openIDSetup(openid_url, openid_token);
|
||||
}
|
||||
|
||||
// Only save mfa_hash for future logins if the user wants their info remembered.
|
||||
if(response.has("mfa_hash")
|
||||
&& gSavedSettings.getBOOL("RememberUser")
|
||||
&& LLLoginInstance::getInstance()->saveMFA())
|
||||
{
|
||||
std::string grid(LLGridManager::getInstance()->getGridId());
|
||||
std::string user_id(gUserCredential->userID());
|
||||
gSecAPIHandler->addToProtectedMap("mfa_hash", grid, user_id, response["mfa_hash"]);
|
||||
// TODO(brad) - related to SL-17223 consider building a better interface that sync's automatically
|
||||
gSecAPIHandler->syncProtectedMap();
|
||||
}
|
||||
else if (!LLLoginInstance::getInstance()->saveMFA())
|
||||
{
|
||||
std::string grid(LLGridManager::getInstance()->getGridId());
|
||||
std::string user_id(gUserCredential->userID());
|
||||
gSecAPIHandler->removeFromProtectedMap("mfa_hash", grid, user_id);
|
||||
gSecAPIHandler->syncProtectedMap();
|
||||
}
|
||||
LLLoginInstance::getInstance()->saveMFAHash(response);
|
||||
|
||||
// <FS:Ansariel> OpenSim legacy economy support
|
||||
#ifdef OPENSIM
|
||||
@@ -5093,6 +5076,7 @@ bool process_login_success_response(U32 &first_sim_size_x, U32 &first_sim_size_y
|
||||
}
|
||||
// </FS:Techwolf Lupindo>
|
||||
|
||||
|
||||
bool success = false;
|
||||
// JC: gesture loading done below, when we have an asset system
|
||||
// in place. Don't delete/clear gUserCredentials until then.
|
||||
|
||||
@@ -44,6 +44,10 @@
|
||||
#include "llavatarname.h"
|
||||
#include "llavatarnamecache.h"
|
||||
|
||||
#include "llviewernetwork.h" // <FS/> Access to GridManager
|
||||
#include "lfsimfeaturehandler.h" // <FS/> Access to hyperGridURL
|
||||
#include "llworldmapmessage.h" // <FS/> Access to sendNamedRegionRequest
|
||||
|
||||
// [RLVa:KB] - Checked: 2010-09-03 (RLVa-1.2.1b)
|
||||
#include "rlvhandler.h"
|
||||
// [/RLVa:KB]
|
||||
@@ -98,6 +102,46 @@ void LLTeleportHistory::goToItem(int idx)
|
||||
return;
|
||||
}
|
||||
|
||||
// <FS> [FIRE-35355] OpenSim global position is dependent on the Grid you are on
|
||||
#ifdef OPENSIM
|
||||
if (LLGridManager::getInstance()->isInOpenSim())
|
||||
{
|
||||
if (mItems[mCurrentItem].mRegionID != mItems[idx].mRegionID)
|
||||
{
|
||||
LLSLURL slurl = mItems[idx].mSLURL;
|
||||
std::string grid = slurl.getGrid();
|
||||
std::string current_grid = LFSimFeatureHandler::instance().hyperGridURL();
|
||||
std::string gatekeeper = LLGridManager::getInstance()->getGatekeeper(grid);
|
||||
|
||||
// Requesting region information from the server is only required when changing grid
|
||||
if (slurl.isValid() && grid != current_grid)
|
||||
{
|
||||
if (!gatekeeper.empty())
|
||||
{
|
||||
slurl = LLSLURL(gatekeeper + ":" + slurl.getRegion(), slurl.getPosition(), true);
|
||||
}
|
||||
|
||||
if (mRequestedItem != -1)
|
||||
{
|
||||
return; // We already have a request in progress and don't want to spam the server
|
||||
}
|
||||
|
||||
mRequestedItem = idx;
|
||||
|
||||
LLWorldMapMessage::getInstance()->sendNamedRegionRequest(
|
||||
slurl.getRegion(),
|
||||
boost::bind(&LLTeleportHistory::regionNameCallback, this, idx, _1, _2, _3, _4),
|
||||
slurl.getSLURLString(),
|
||||
true
|
||||
);
|
||||
|
||||
return; // The teleport will occur in the callback with the correct global position
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
// </FS>
|
||||
|
||||
// Attempt to teleport to the requested item.
|
||||
gAgent.teleportViaLocation(mItems[idx].mGlobalPos);
|
||||
mRequestedItem = idx;
|
||||
@@ -210,6 +254,22 @@ void LLTeleportHistory::updateCurrentLocation(const LLVector3d& new_pos)
|
||||
mItems[mCurrentItem] = LLTeleportHistoryItem(RlvStrings::getString(RlvStringKeys::Hidden::Parcel), LLVector3d::zero);
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
||||
// <FS> [FIRE-35355] OpenSim global position is dependent on the Grid you are on,
|
||||
// so we need to store the slurl so we can request the global position later
|
||||
#ifdef OPENSIM
|
||||
if (LLGridManager::getInstance()->isInOpenSim())
|
||||
{
|
||||
auto regionp = gAgent.getRegion();
|
||||
if (regionp)
|
||||
{
|
||||
LLVector3 new_pos_local = gAgent.getPosAgentFromGlobal(new_pos);
|
||||
LLSLURL slurl = LLSLURL(LFSimFeatureHandler::instance().hyperGridURL(), regionp->getName(), new_pos_local);
|
||||
mItems[mCurrentItem].mSLURL = slurl;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
// </FS>
|
||||
}
|
||||
|
||||
//dump(); // LO - removing the dump from happening every time we TP.
|
||||
@@ -287,3 +347,35 @@ void LLTeleportHistory::dump() const
|
||||
LL_INFOS() << line.str() << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
// <FS> [FIRE-35355] Callback for OpenSim so we can teleport to the correct global position on another grid
|
||||
void LLTeleportHistory::regionNameCallback(int idx, U64 region_handle, const LLSLURL& slurl, const LLUUID& snapshot_id, bool teleport)
|
||||
{
|
||||
if (region_handle)
|
||||
{
|
||||
// Sanity checks again just in case since time has passed since the request was made
|
||||
if (idx < 0 || idx >= (int)mItems.size())
|
||||
{
|
||||
LL_WARNS() << "Invalid teleport history index (" << idx << ") specified" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
if (idx == mCurrentItem)
|
||||
{
|
||||
LL_WARNS() << "Will not teleport to the same location." << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
LLVector3d origin_pos = from_region_handle(region_handle);
|
||||
LLVector3d global_pos(origin_pos + LLVector3d(slurl.getPosition()));
|
||||
|
||||
// Attempt to teleport to the target grids region
|
||||
gAgent.teleportViaLocation(global_pos);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "Invalid teleport history region handle" << LL_ENDL;
|
||||
onTeleportFailed();
|
||||
}
|
||||
}
|
||||
// </FS>
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
#include <boost/signals2.hpp>
|
||||
#include "llteleporthistorystorage.h"
|
||||
|
||||
#include "llslurl.h" // <FS/> Access to LLSLURL
|
||||
|
||||
|
||||
/**
|
||||
* An item of the teleport history.
|
||||
@@ -47,8 +49,11 @@ public:
|
||||
LLTeleportHistoryItem()
|
||||
{}
|
||||
|
||||
LLTeleportHistoryItem(std::string title, LLVector3d global_pos)
|
||||
: mTitle(title), mGlobalPos(global_pos)
|
||||
// <FS> [FIRE-35355] OpenSim requires knowing the grid to teleport correctly if changing grids
|
||||
//LLTeleportHistoryItem(std::string title, LLVector3d global_pos)
|
||||
// : mTitle(title), mGlobalPos(global_pos)
|
||||
LLTeleportHistoryItem(std::string title, LLVector3d global_pos, const LLSLURL& slurl = LLSLURL())
|
||||
: mTitle(title), mGlobalPos(global_pos), mSLURL(slurl)
|
||||
{}
|
||||
|
||||
/**
|
||||
@@ -61,6 +66,7 @@ public:
|
||||
std::string mFullTitle; // human-readable location title including coordinates
|
||||
LLVector3d mGlobalPos; // global position
|
||||
LLUUID mRegionID; // region ID for getting the region info
|
||||
LLSLURL mSLURL; // <FS/> [FIRE-35355] slurl for the location required for OpenSim
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -180,6 +186,10 @@ private:
|
||||
*/
|
||||
static std::string getCurrentLocationTitle(bool full, const LLVector3& local_pos_override);
|
||||
|
||||
// <FS> [FIRE-35355] Callback for OpenSim so we can teleport to the correct global position on another grid
|
||||
void regionNameCallback(int idx, U64 handle, const LLSLURL& slurl, const LLUUID& snapshot_id, bool teleport);
|
||||
// </FS>
|
||||
|
||||
/**
|
||||
* Actually, the teleport history.
|
||||
*/
|
||||
|
||||
@@ -378,6 +378,15 @@
|
||||
name="filter_perm_transfer"
|
||||
label="Transfer"
|
||||
width="100"/>
|
||||
<check_box
|
||||
follows="top|left"
|
||||
top_pad="10"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
name="filter_reflection_probe"
|
||||
label="Reflection Probes"
|
||||
tool_tip="Includes manual probes only, not auto-probes. Only includes mirror probes if mirrors are enabled in graphics preferences. If reflection coverage is set to 'none', or the probe is not baked, objects may not be identified."
|
||||
width="100"/>
|
||||
<check_box
|
||||
follows="top|left"
|
||||
height="20"
|
||||
@@ -416,7 +425,7 @@
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
max_val="999999999"
|
||||
min_val="0"
|
||||
min_val="0"
|
||||
name="max_price"
|
||||
top_delta="-4"
|
||||
width="80"/>
|
||||
@@ -525,7 +534,7 @@
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
max_val="999999999"
|
||||
min_val="0"
|
||||
min_val="0"
|
||||
name="max_distance"
|
||||
top_delta="-4"
|
||||
width="80"/>
|
||||
@@ -570,6 +579,14 @@
|
||||
name="exclude_temporary"
|
||||
label="Temporary"
|
||||
width="80"/>
|
||||
<check_box
|
||||
follows="top|left"
|
||||
top_pad="10"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
name="exclude_reflection_probes"
|
||||
label="Reflection Probes"
|
||||
width="80"/>
|
||||
<check_box
|
||||
follows="top|left"
|
||||
top_pad="10"
|
||||
|
||||
@@ -214,7 +214,7 @@
|
||||
left="10"
|
||||
length="1"
|
||||
top_pad="0"
|
||||
max_length="700"
|
||||
max_length="5000"
|
||||
name="photo_description"
|
||||
spellcheck="true"
|
||||
type="string"
|
||||
@@ -223,7 +223,7 @@
|
||||
<check_box
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
initial_value="true"
|
||||
initial_value="false"
|
||||
label="Include location"
|
||||
name="add_location_cb"
|
||||
left="9"
|
||||
|
||||
@@ -13,11 +13,20 @@
|
||||
<string name="header_mHindLimbsRoot">Membres postérieurs</string>
|
||||
<string name="header_mWingsRoot">Ailes</string>
|
||||
<string name="header_mFaceEar1Left">Oreilles/nez</string>
|
||||
<string name="header_mSkull">Corps</string>
|
||||
<string name="header_HEAD">Corps</string>
|
||||
<string name="header_L_UPPER_ARM">Bras</string>
|
||||
<string name="header_L_UPPER_LEG">Jambes</string>
|
||||
<string name="title_mPelvis">Tout l'avatar</string>
|
||||
<string name="title_mTorso">Torse</string>
|
||||
<string name="title_mSpine1">Colonne vertébrale 1</string>
|
||||
<string name="title_mSpine2">Colonne vertébrale 2</string>
|
||||
<string name="title_mSpine3">Colonne vertébrale 3</string>
|
||||
<string name="title_mSpine4">Colonne vertébrale 4</string>
|
||||
<string name="title_mChest">Poitrine</string>
|
||||
<string name="title_mNeck">Cou</string>
|
||||
<string name="title_mHead">Tête</string>
|
||||
<string name="title_mSkull">Crâne</string>
|
||||
<string name="title_mEyeRight">Oeil droit</string>
|
||||
<string name="title_mEyeLeft">Oeil gauche</string>
|
||||
<string name="title_mFaceForeheadLeft">Front, côté gauche</string>
|
||||
@@ -29,13 +38,17 @@
|
||||
<string name="title_mFaceEyebrowCenterRight">Sourcil, milieu droit</string>
|
||||
<string name="title_mFaceEyebrowInnerRight">Sourcil, intérieur droit</string>
|
||||
<string name="title_mFaceEyeLidUpperLeft">Paupière, en haut à gauche</string>
|
||||
<string name="title_mFaceEyecornerInnerLeft">Coin interne gauche de l'œil</string>
|
||||
<string name="title_mFaceEyeLidLowerLeft">Paupière, en bas à gauche</string>
|
||||
<string name="title_mFaceEyeLidUpperRight">Paupière, en haut à droite</string>
|
||||
<string name="title_mFaceEyecornerInnerRight">Coin interne droit de l'œil</string>
|
||||
<string name="title_mFaceEyeLidLowerRight">Paupière en bas à droite</string>
|
||||
<string name="title_mFaceEar1Left">Oreille en haut à gauche</string>
|
||||
<string name="title_mFaceEar2Left">Oreille en bas à gauche</string>
|
||||
<string name="title_mFaceEar1Right">Oreille en haut à droite</string>
|
||||
<string name="title_mFaceEar2Right">Oreille en bas à droite</string>
|
||||
<string name="title_mFaceNoseBase">Base du nez</string>
|
||||
<string name="title_mFaceNoseBridge">Arête du nez</string>
|
||||
<string name="title_mFaceNoseLeft">Nez à gauche</string>
|
||||
<string name="title_mFaceNoseCenter">Nez au milieu</string>
|
||||
<string name="title_mFaceNoseRight">Nez à droite</string>
|
||||
@@ -52,16 +65,12 @@
|
||||
<string name="title_mFaceTongueTip">Extrémité de la langue</string>
|
||||
<string name="title_mFaceJawShaper">Forme de la mâchoire</string>
|
||||
<string name="title_mFaceForeheadCenter">Milieu du front</string>
|
||||
<string name="title_mFaceNoseBase">Base du nez</string>
|
||||
<string name="title_mFaceTeethUpper">Dents du haut</string>
|
||||
<string name="title_mFaceLipUpperLeft">Lèvre supérieure à gauche</string>
|
||||
<string name="title_mFaceLipUpperRight">Lèvre supérieure à droite</string>
|
||||
<string name="title_mFaceLipCornerLeft">Coin gauche de la bouche</string>
|
||||
<string name="title_mFaceLipCornerRight">Coin droit de la bouche</string>
|
||||
<string name="title_mFaceLipUpperCenter">Milieu de la lèvre supérieure</string>
|
||||
<string name="title_mFaceEyecornerInnerLeft">Coin interne gauche de l'œil</string>
|
||||
<string name="title_mFaceEyecornerInnerRight">Coin interne droit de l'œil</string>
|
||||
<string name="title_mFaceNoseBridge">Arête du nez</string>
|
||||
<string name="title_mCollarLeft">Col</string>
|
||||
<string name="title_mShoulderLeft">Bras entier</string>
|
||||
<string name="title_mElbowLeft">Avant-bras</string>
|
||||
@@ -137,10 +146,31 @@
|
||||
<string name="title_mHindLimb2Right">Droite 2</string>
|
||||
<string name="title_mHindLimb3Right">Droite 3</string>
|
||||
<string name="title_mHindLimb4Right">Droite 4</string>
|
||||
<string name="title_HEAD">Tête</string>
|
||||
<string name="title_NECK">Nuque</string>
|
||||
<string name="title_CHEST">Poitrine</string>
|
||||
<string name="title_BUTT">Fesses</string>
|
||||
<string name="title_BELLY">Ventre</string>
|
||||
<string name="title_LEFT_PEC">Sein gauche</string>
|
||||
<string name="title_RIGHT_PEC">Sein droit</string>
|
||||
<string name="title_L_CLAVICLE">Clavicule gauche</string>
|
||||
<string name="title_R_CLAVICLE">Clavicule droite</string>
|
||||
<string name="title_L_UPPER_ARM">Haut du bras gauche</string>
|
||||
<string name="title_R_UPPER_ARM">Haut du bras droit</string>
|
||||
<string name="title_L_LOWER_ARM">Bas du bras gauche</string>
|
||||
<string name="title_R_LOWER_ARM">Bas du bras droit</string>
|
||||
<string name="title_L_HAND">Main gauche</string>
|
||||
<string name="title_R_HAND">Main droite</string>
|
||||
<string name="title_UPPER_BACK">Haut du dos</string>
|
||||
<string name="title_LEFT_HANDLE">Taille à gauche</string>
|
||||
<string name="title_RIGHT_HANDLE">Taille à droite</string>
|
||||
<string name="title_PELVIS">Bassin</string>
|
||||
<string name="title_L_UPPER_LEG">Haut de la jambe gauche</string>
|
||||
<string name="title_R_UPPER_LEG">Haut de la jambe droite</string>
|
||||
<string name="title_L_LOWER_LEG">Bas de la jambe gauche</string>
|
||||
<string name="title_R_LOWER_LEG">Bas de la jambe droite</string>
|
||||
<string name="title_L_FOOT">Pied gauche</string>
|
||||
<string name="title_R_FOOT">Pied droit</string>
|
||||
<string name="LoadPoseLabel">Charger pose</string>
|
||||
<string name="SavePoseLabel">Enr. pose</string>
|
||||
<string name="LoadDiffLabel">Charger diff</string>
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<floater name="floater_primfeed" title="Partager sur Primfeed">
|
||||
<panel name="background">
|
||||
<tab_container name="tabs">
|
||||
<panel label="Photo" name="panel_primfeed_photo"/>
|
||||
<panel label="Compte" name="panel_primfeed_account"/>
|
||||
</tab_container>
|
||||
<panel name="connection_status_panel">
|
||||
<text name="connection_error_text">
|
||||
Erreur
|
||||
</text>
|
||||
<text name="connection_loading_text">
|
||||
Chargement...
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
</floater>
|
||||
@@ -93,6 +93,7 @@
|
||||
<menu_item_check label="Conversations..." name="Conversations"/>
|
||||
<menu_item_check label="Gestes..." name="Gestures"/>
|
||||
<menu_item_call label="Flickr..." name="Flickr"/>
|
||||
<menu_item_call label="Primfeed..." name="Primfeed"/>
|
||||
<menu_item_call label="Discord..." name="Discord"/>
|
||||
<menu label="Effets de voix" name="VoiceMorphing">
|
||||
<menu_item_check label="Aucun effet de voix" name="NoVoiceMorphing"/>
|
||||
@@ -616,6 +617,8 @@
|
||||
<menu_item_check label="Textures HTTP" name="HTTP Textures"/>
|
||||
<menu_item_call label="Compresser les images" name="Compress Images"/>
|
||||
<menu_item_call label="Test de compression de fichiers" name="Compress File Test" />
|
||||
<menu_item_call label="Test d'authentification Primfeed" name="primfeed_auth_test" />
|
||||
<menu_item_call label="Réinitialisation de l'authentification Primfeed" name="primfeed_auth_clear" />
|
||||
<menu_item_call label="Activer Visual Leak Detector" name="Enable Visual Leak Detector"/>
|
||||
<menu_item_check label="Aperçu du Journal de débogage" name="Output Debug Minidump"/>
|
||||
<menu_item_check label="Ouvrir la console de débogage au prochain lancement" name="Console Window"/>
|
||||
|
||||
@@ -3065,6 +3065,9 @@ Voulez-vous autoriser [APP_NAME] à poster sur votre compte Flickr?
|
||||
<notification name="ExodusFlickrUploadComplete">
|
||||
Votre photo est visible maintenant [https://www.flickr.com/photos/me/[ID] ici].
|
||||
</notification>
|
||||
<notification name="FSPrimfeedUploadComplete">
|
||||
Votre message Primfeed peut maintenant être consulté [[PF_POSTURL] ici].
|
||||
</notification>
|
||||
<notification name="EventNotification">
|
||||
Avis d'événement :
|
||||
|
||||
@@ -5636,4 +5639,25 @@ https://wiki.firestormviewer.org/antivirus_whitelisting
|
||||
Remplacer la pose “[POSE_NAME]”?
|
||||
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Ok"/>
|
||||
</notification>
|
||||
<notification name="PrimfeedLoginRequestFailed">
|
||||
Demande de connexion refusée par Primfeed.
|
||||
</notification>
|
||||
<notification name="PrimfeedAuthorizationFailed">
|
||||
L'autorisation Primfeed a échoué. La séquence d'autorisation n'a pas été achevée.
|
||||
</notification>
|
||||
<notification name="PrimfeedAuthorizationAlreadyInProgress">
|
||||
L'autorisation Primfeed est déjà en cours. Veuillez compléter l'autorisation Primfeed dans votre navigateur web avant de réessayer.
|
||||
</notification>
|
||||
<notification name="PrimfeedAuthorizationSuccessful">
|
||||
Autorisation Primfeed terminée. Vous pouvez maintenant poster des images sur Primfeed.
|
||||
</notification>
|
||||
<notification name="PrimfeedValidateFailed">
|
||||
La validation de l'utilisateur Primfeed a échoué. Primfeed n'a pas reconnu ce compte ou la connexion a échoué.
|
||||
</notification>
|
||||
<notification name="PrimfeedAlreadyAuthorized">
|
||||
Vous avez déjà lié ce compte à Primfeed. Utilisez le bouton de réinitialisation si vous souhaitez recommencer.
|
||||
</notification>
|
||||
<notification name="PrimfeedUserStatusFailed">
|
||||
La connexion de l'utilisateur Primfeed a réussi, mais les vérifications d'état ont échoué. Veuillez vérifier que Primfeed fonctionne.
|
||||
</notification>
|
||||
</notifications>
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<panel name="panel_primfeed_account">
|
||||
<string name="primfeed_connected" value="Connecté(e) à Primfeed en tant que :"/>
|
||||
<string name="primfeed_disconnected" value="Non connecté(e) à Primfeed"/>
|
||||
<string name="primfeed_plan_unknown" value="Inconnu"/>
|
||||
<text name="connected_as_label">
|
||||
Non connecté(e) à Primfeed.
|
||||
</text>
|
||||
<text name="primfeed_account_plan_label">
|
||||
Type de compte :
|
||||
</text>
|
||||
<panel name="panel_buttons">
|
||||
<button label="Se connecter..." name="connect_btn"/>
|
||||
<button label="Se déconnecter" name="disconnect_btn"/>
|
||||
<text name="account_learn_more_label">
|
||||
[https://docs.primfeed.com En savoir plus sur Primfeed]
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
@@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<panel name="panel_primfeed_photo">
|
||||
<combo_box name="resolution_combobox" tool_tip="Résolution de l'image">
|
||||
<combo_box.item label="Fenêtre actuelle" name="CurrentWindow"/>
|
||||
<combo_box.item label="Personnalisée" name="Custom"/>
|
||||
</combo_box>
|
||||
<combo_box name="filters_combobox" tool_tip="Filtres d'image">
|
||||
<combo_box.item label="Pas de filtre" name="NoFilter"/>
|
||||
</combo_box>
|
||||
<check_box label="Garder les proportions" name="keep_aspect_ratio"/>
|
||||
<text name="working_lbl">
|
||||
Rafraichissement...
|
||||
</text>
|
||||
<check_box label="Cadre de la photo" tool_tip="Affiche un cadre à l'écran qui entoure la zones de la photo. Les parties de la scène qui se trouvent en dehors de la photo sont dé-saturées et légèrement floues." name="show_frame"/>
|
||||
<check_box label="Guide de cadrage" tool_tip="Affiche le guide de cadrage (règle des tiers) à l'intérieur du cadre de la photo." name="show_guides"/>
|
||||
<button label="Actualiser" name="new_snapshot_btn" tool_tip="Cliquez pour actualiser"/>
|
||||
<button label="Aperçu" name="big_preview_btn" tool_tip="Cliquez pour afficher l'aperçu"/>
|
||||
<text name="description_label">
|
||||
Description :
|
||||
</text>
|
||||
<check_box label="Inclure l'emplacement" name="add_location_cb"/>
|
||||
<check_box label="Ajouter à la galerie publique" name="primfeed_add_to_public_gallery"/>
|
||||
<check_box label="Contenu commercial" name="primfeed_commercial_content"/>
|
||||
<combo_box name="rating_combobox" tool_tip="Classification du contenu de Primfeed">
|
||||
<combo_box.item label="Général" name="GeneralRating"/>
|
||||
<combo_box.item label="Modéré" name="ModerateRating"/>
|
||||
<combo_box.item label="Adulte" name="AdultRating"/>
|
||||
<combo_box.item label="Adulte+" name="AdultPlusRating"/>
|
||||
</combo_box>
|
||||
<check_box label="Ouvrir dans le navigateur après l'envoi" tool_tip="Ouvrir automatiquement le message Primfeed dans votre navigateur web après l'avoir publié." name="primfeed_open_url_on_post"/>
|
||||
<button label="Partager" name="post_photo_btn"/>
|
||||
<button label="Annuler" name="cancel_photo_btn"/>
|
||||
</panel>
|
||||
@@ -1,13 +1,30 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel name="panel_snapshot_options">
|
||||
<layout_stack name="option_buttons">
|
||||
<layout_panel name="lp_download"><button label="Sur le disque" name="save_to_computer_btn"/></layout_panel>
|
||||
<layout_panel name="lp_inventory"><button label="Dans l'inventaire" name="save_to_inventory_btn"/></layout_panel>
|
||||
<layout_panel name="lp_profile"><button label="En ligne sur mon profil" name="save_to_profile_btn"/></layout_panel>
|
||||
<layout_panel name="lp_facebook"><button label="En ligne sur Facebook" name="send_to_facebook_btn"/></layout_panel>
|
||||
<layout_panel name="lp_twitter"><button label="En ligne sur Twitter" name="send_to_twitter_btn"/></layout_panel>
|
||||
<layout_panel name="lp_flickr"><button label="En ligne sur Flickr" name="send_to_flickr_btn"/></layout_panel>
|
||||
<layout_panel name="lp_email"><button label="Envoyer par E-mail" name="save_to_email_btn"/></layout_panel>
|
||||
<layout_panel name="lp_download">
|
||||
<button label="Sur le disque" name="save_to_computer_btn"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="lp_inventory">
|
||||
<button label="Dans l'inventaire" name="save_to_inventory_btn"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="lp_profile">
|
||||
<button label="En ligne sur mon profil" name="save_to_profile_btn"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="lp_facebook">
|
||||
<button label="En ligne sur Facebook" name="send_to_facebook_btn"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="lp_twitter">
|
||||
<button label="En ligne sur Twitter" name="send_to_twitter_btn"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="lp_flickr">
|
||||
<button label="En ligne sur Flickr" name="send_to_flickr_btn"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="lp_email">
|
||||
<button label="Envoyer par E-mail" name="save_to_email_btn"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="lp_primfeed">
|
||||
<button label="Partager sur Primfeed" name="send_to_primfeed_btn"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
<text name="fee_hint_lbl">
|
||||
Les frais sont basés sur votre niveau d'abonnement. Plus haut est ce niveau, plus bas sont les frais.
|
||||
|
||||
@@ -62,6 +62,7 @@
|
||||
<check_box name="filter_perm_copy" label="Kopiowalne"/>
|
||||
<check_box name="filter_perm_modify" label="Modyfikowalne"/>
|
||||
<check_box name="filter_perm_transfer" label="Transferowalne"/>
|
||||
<check_box name="filter_reflection_probe" label="Sondy refleksyjne" tool_tip="Obejmuje tylko sondy ręczne, nie sondy automatyczne. Obejmuje tylko sondy lustrzane, jeśli lustra są włączone w preferencjach graficznych. Jeśli zasięg odbić jest ustawiony na 'brak' lub sonda nie jest załadowana, to obiekty mogą nie zostać zidentyfikowane." />
|
||||
<check_box name="filter_for_sale" label="Do kupienia między" width="135"/>
|
||||
<text name="and" width="30">
|
||||
oraz
|
||||
@@ -91,6 +92,7 @@
|
||||
<check_box name="exclude_attachment" label="Dodatkami"/>
|
||||
<check_box name="exclude_physical" label="Fizyczne"/>
|
||||
<check_box name="exclude_temporary" label="Tymczasowe"/>
|
||||
<check_box name="exclude_reflection_probes" label="Sondy refleksyjne" />
|
||||
<check_box name="exclude_childprim" label="Primami podrzędnymi / potomkami primy głównej"/>
|
||||
<check_box name="exclude_neighbor_region" label="W sąsiadujących regionach"/>
|
||||
<button name="apply" label="Zastosuj"/>
|
||||
|
||||
Reference in New Issue
Block a user