summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorRichard Linden <none@none>2010-06-30 13:15:33 -0700
committerRichard Linden <none@none>2010-06-30 13:15:33 -0700
commit5d743c3c58b37dc6e9f261babfd5181906af752b (patch)
treeb246ecd8814dc75fa86d50a6d4ca284dedb0d2f7 /indra
parentb6c0444ea006e890f70ee8c93c533b2c2943e25a (diff)
EXT-8172 FIX notification of missing media plugins causes an infinite loop
reviewed by Nyx
Diffstat (limited to 'indra')
-rw-r--r--indra/llui/llnotifications.cpp32
-rw-r--r--indra/llui/llnotifications.h2
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml4
3 files changed, 18 insertions, 20 deletions
diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index 7b8f51ae3c..621e72ce38 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -560,21 +560,6 @@ void LLNotification::setResponseFunctor(const LLNotificationResponderPtr& respon
mResponder = responder;
}
-bool LLNotification::payloadContainsAll(const std::vector<std::string>& required_fields) const
-{
- for(std::vector<std::string>::const_iterator required_fields_it = required_fields.begin();
- required_fields_it != required_fields.end();
- required_fields_it++)
- {
- std::string required_field_name = *required_fields_it;
- if( ! getPayload().has(required_field_name))
- {
- return false; // a required field was not found
- }
- }
- return true; // all required fields were found
-}
-
bool LLNotification::isEquivalentTo(LLNotificationPtr that) const
{
if (this->mTemplatep->mName != that->mTemplatep->mName)
@@ -583,11 +568,22 @@ bool LLNotification::isEquivalentTo(LLNotificationPtr that) const
}
if (this->mTemplatep->mUnique)
{
+ const LLSD& these_substitutions = this->getSubstitutions();
+ const LLSD& those_substitutions = that->getSubstitutions();
+
// highlander bit sez there can only be one of these
- return
- this->payloadContainsAll(that->mTemplatep->mUniqueContext) &&
- that->payloadContainsAll(this->mTemplatep->mUniqueContext);
+ for (std::vector<std::string>::const_iterator it = mTemplatep->mUniqueContext.begin(), end_it = mTemplatep->mUniqueContext.end();
+ it != end_it;
+ ++it)
+ {
+ if (these_substitutions.get(*it).asString() != those_substitutions.get(*it).asString())
+ {
+ return false;
+ }
+ }
+ return true;
}
+
return false;
}
diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h
index c942a32512..8bfada0e71 100644
--- a/indra/llui/llnotifications.h
+++ b/indra/llui/llnotifications.h
@@ -400,8 +400,6 @@ private:
void cancel();
- bool payloadContainsAll(const std::vector<std::string>& required_fields) const;
-
public:
// constructor from a saved notification
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 88732fee7d..290c8c55a9 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -4886,6 +4886,10 @@ If you want to view streaming media on parcels that support it you should go to
persist="true"
type="notify">
No Media Plugin was found to handle the "[MIME_TYPE]" mime type. Media of this type will be unavailable.
+ <unique>
+ <context key="[MIME_TYPE]"/>
+ </unique>
+
</notification>
<notification
icon="alertmodal.tga"