Make it clear in conversation just some recipients failed

FREEBIE
pull/749/head
Scott Nonnenberg 8 years ago
parent c10e1b4ad0
commit ff4fde651c

@ -475,6 +475,10 @@
"message": "Message not sent.", "message": "Message not sent.",
"description": "Informational label, appears on messages that failed to send" "description": "Informational label, appears on messages that failed to send"
}, },
"someRecipientsFailed": {
"message": "Some recipients failed",
"description": "Informational label, for messages where some recipients succeeded, others failed"
},
"showMore": { "showMore": {
"message": "Details", "message": "Details",
"description": "Displays the details of a key change" "description": "Displays the details of a key change"

@ -191,6 +191,9 @@
{{ messageNotSent }} {{ messageNotSent }}
<span href='#' class='retry'>{{ resend }}</span> <span href='#' class='retry'>{{ resend }}</span>
</script> </script>
<script type='text/x-tmpl-mustache' id='some-failed'>
{{ someFailed }}
</script>
<script type='text/x-tmpl-mustache' id='keychange'> <script type='text/x-tmpl-mustache' id='keychange'>
<span class='content' dir='auto'><span class='shield icon'></span> {{ content }}</span> <span class='content' dir='auto'><span class='shield icon'></span> {{ content }}</span>
</script> </script>

@ -249,6 +249,25 @@
}.bind(this)); }.bind(this));
}, },
someRecipientsFailed: function() {
var c = this.getConversation();
if (c.isPrivate()) {
return false;
}
var recipients = c.contactCollection.length - 1;
var errors = this.get('errors');
if (!errors) {
return false;
}
if (errors.length > 0 && recipients > 0 && errors.length < recipients) {
return true;
}
return false;
},
sendSyncMessage: function() { sendSyncMessage: function() {
this.syncPromise = this.syncPromise || Promise.resolve(); this.syncPromise = this.syncPromise || Promise.resolve();
this.syncPromise = this.syncPromise.then(function() { this.syncPromise = this.syncPromise.then(function() {

@ -25,6 +25,14 @@
resend: i18n('resend') resend: i18n('resend')
} }
}); });
var SomeFailedView = Whisper.View.extend({
tagName: 'span',
className: 'some-failed',
templateName: 'some-failed',
render_attributes: {
someFailed: i18n('someRecipientsFailed')
}
});
var TimerView = Whisper.View.extend({ var TimerView = Whisper.View.extend({
templateName: 'hourglass', templateName: 'hourglass',
update: function() { update: function() {
@ -172,6 +180,7 @@
'click .error-icon': 'select', 'click .error-icon': 'select',
'click .timestamp': 'select', 'click .timestamp': 'select',
'click .status': 'select', 'click .status': 'select',
'click .some-failed': 'select',
'click .error-message': 'select' 'click .error-message': 'select'
}, },
retryMessage: function() { retryMessage: function() {
@ -241,6 +250,10 @@
if (this.model.hasNetworkError()) { if (this.model.hasNetworkError()) {
this.$('.meta').prepend(new NetworkErrorView().render().el); this.$('.meta').prepend(new NetworkErrorView().render().el);
} }
this.$('.meta .some-failed').remove();
if (this.model.someRecipientsFailed()) {
this.$('.meta').prepend(new SomeFailedView().render().el);
}
}, },
renderControl: function() { renderControl: function() {
if (this.model.isEndSession() || this.model.isGroupUpdate()) { if (this.model.isEndSession() || this.model.isGroupUpdate()) {

@ -406,11 +406,17 @@ li.entry .error-icon-container {
cursor: pointer; cursor: pointer;
} }
.some-failed {
float: left;
margin-left: 6px;
margin-right: 6px;
}
.hasRetry, .timestamp, .status, .timer { .hasRetry, .timestamp, .status, .timer {
float: left; float: left;
} }
.timestamp, .status { .timestamp, .status, .some-failed {
cursor: pointer; cursor: pointer;
opacity: 0.5; opacity: 0.5;

@ -1332,20 +1332,27 @@ li.entry .error-icon-container {
.message-list .meta .retry { .message-list .meta .retry {
text-decoration: underline; text-decoration: underline;
cursor: pointer; } cursor: pointer; }
.message-container .meta .some-failed,
.message-list .meta .some-failed {
float: left;
margin-left: 6px;
margin-right: 6px; }
.message-container .meta .hasRetry, .message-container .meta .timestamp, .message-container .meta .status, .message-container .meta .timer, .message-container .meta .hasRetry, .message-container .meta .timestamp, .message-container .meta .status, .message-container .meta .timer,
.message-list .meta .hasRetry, .message-list .meta .hasRetry,
.message-list .meta .timestamp, .message-list .meta .timestamp,
.message-list .meta .status, .message-list .meta .status,
.message-list .meta .timer { .message-list .meta .timer {
float: left; } float: left; }
.message-container .meta .timestamp, .message-container .meta .status, .message-container .meta .timestamp, .message-container .meta .status, .message-container .meta .some-failed,
.message-list .meta .timestamp, .message-list .meta .timestamp,
.message-list .meta .status { .message-list .meta .status,
.message-list .meta .some-failed {
cursor: pointer; cursor: pointer;
opacity: 0.5; } opacity: 0.5; }
.message-container .meta .timestamp:hover, .message-container .meta .status:hover, .message-container .meta .timestamp:hover, .message-container .meta .status:hover, .message-container .meta .some-failed:hover,
.message-list .meta .timestamp:hover, .message-list .meta .timestamp:hover,
.message-list .meta .status:hover { .message-list .meta .status:hover,
.message-list .meta .some-failed:hover {
opacity: 1.0; } opacity: 1.0; }
.message-container .status, .message-container .status,
.message-list .status { .message-list .status {

Loading…
Cancel
Save