[FIX] mail: fix concurrent rendering thread with message fadeout

Follow up on 4f5334a081

Before this commit, thread was not re-rendered correctly in Discuss
App when user clicked on "Mark as Read" from Inbox and then changed
conversation in a narrow time frame.

This issue was discovered from a test that failed undeterministically
on rare occasions (once every hundreds of builds on Runbot):

```
QUnit test failed: "mail > Discuss > all messages in "Inbox" in "History" after marked all as read"
[message: "there should be 30 messages in History", actual: "0", expected: "30"]
```

This test crashed due to the rendering of Inbox after message fadeout
animation that overwrote the rendering of History. As a result,
thread widget indefinitely displays Inbox content, which is empty.
The HTML content of Discuss during the crash shows that breadcrumb
and discuss sidebar correctly have "History" as the active thread,
but thread widget still shows "Inbox" as content:
http://runbot.odoo.com/runbot/build/1092504

This commit fixes the issue by re-rendering of the thread with
message fadeout animation only if the active thread has not changed.

closes odoo/odoo#44585

Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
This commit is contained in:
Alexandre Kühn
2020-02-04 12:05:56 +00:00
parent 34b091fc93
commit cdc5ad3230
+4 -1
View File
@@ -260,11 +260,14 @@ var ThreadWidget = Widget.extend({
*/
removeMessageAndRender: function (messageID, thread, options) {
var self = this;
this._currentThreadID = thread.getID();
return new Promise(function (resolve, reject) {
self.$('.o_thread_message[data-message-id="' + messageID + '"]')
.fadeOut({
done: function () {
self.render(thread, options);
if (self._currentThreadID === thread.getID()) {
self.render(thread, options);
}
resolve();
},
duration: 200,