Resolve Issue #100

This commit is contained in:
djmaze 2021-07-19 11:57:47 +02:00
parent 1996c79240
commit bb15cd1ec3
5 changed files with 81 additions and 68 deletions

View file

@ -220,7 +220,7 @@ export const MessageUserStore = new class {
}
});
this.purgeMessageBodyCacheThrottle = this.purgeMessageBodyCache.throttle(30000);
this.purgeMessageBodyCache = this.purgeMessageBodyCache.throttle(30000);
}
purgeMessageBodyCache() {
@ -428,16 +428,12 @@ export const MessageUserStore = new class {
);
}
setMessage(data, cached) {
setMessage(data, cached, oMessage) {
let isNew = false,
body = null,
json = data && data.Result,
id = '',
plain = '',
resultHtml = '',
messagesDom = this.messagesBodiesDom(),
selectedMessage = this.selectorMessageSelected(),
message = this.message();
message = oMessage || this.message();
if (
json &&
@ -447,7 +443,7 @@ export const MessageUserStore = new class {
) {
const threads = message.threads();
if (message.uid !== json.Uid && 1 < threads.length && threads.includes(json.Uid)) {
message = MessageModel.reviveFromJson(json);
message = oMessage ? null : MessageModel.reviveFromJson(json);
if (message) {
message.threads(threads);
MessageFlagsCache.initMessage(message);
@ -460,7 +456,7 @@ export const MessageUserStore = new class {
}
if (message && message.uid === json.Uid) {
this.messageError('');
oMessage || this.messageError('');
if (cached) {
delete json.IsSeen;
@ -475,7 +471,8 @@ export const MessageUserStore = new class {
addRequestedMessage(message.folder, message.uid);
if (messagesDom) {
id = 'rl-mgs-' + message.hash.replace(/[^a-zA-Z0-9]/g, '');
let body = null,
id = 'rl-mgs-' + message.hash.replace(/[^a-zA-Z0-9]/g, '');
const textBody = elementById(id);
if (textBody) {
@ -483,7 +480,9 @@ export const MessageUserStore = new class {
message.fetchDataFromDom();
messagesDom.append(textBody);
} else {
let isHtml = !!json.Html;
let isHtml = !!json.Html,
plain = '',
resultHtml = '<pre></pre>';
if (isHtml) {
resultHtml = json.Html.toString();
if (SettingsUserStore.removeColors()) {
@ -508,8 +507,6 @@ export const MessageUserStore = new class {
} else {
resultHtml = '<pre>' + resultHtml + '</pre>';
}
} else {
resultHtml = '<pre>' + resultHtml + '</pre>';
}
body = Element.fromHTML('<div id="' + id + '" hidden="" class="b-text-part '
@ -517,22 +514,25 @@ export const MessageUserStore = new class {
+ findEmailAndLinks(resultHtml)
+ '</div>');
// Drop Microsoft Office style properties
const rgbRE = /rgb\((\d+),\s*(\d+),\s*(\d+)\)/g,
hex = n => ('0' + parseInt(n).toString(16)).slice(-2);
body.querySelectorAll('[style*=mso]').forEach(el =>
el.setAttribute('style', el.style.cssText.replace(rgbRE, (m,r,g,b) => '#' + hex(r) + hex(g) + hex(b)))
);
if (isHtml) {
// Drop Microsoft Office style properties
const rgbRE = /rgb\((\d+),\s*(\d+),\s*(\d+)\)/g,
hex = n => ('0' + parseInt(n).toString(16)).slice(-2);
body.querySelectorAll('[style*=mso]').forEach(el =>
el.setAttribute('style', el.style.cssText.replace(rgbRE, (m,r,g,b) => '#' + hex(r) + hex(g) + hex(b)))
);
}
body.rlIsHtml = isHtml;
body.rlHasImages = !!json.HasExternals;
message.body = body;
message.isHtml(isHtml);
message.hasImages(!!json.HasExternals);
message.hasImages(body.rlHasImages);
messagesDom.append(body);
message.storeDataInDom();
if (json.HasInternals) {
message.showInternalImages();
}
@ -541,12 +541,12 @@ export const MessageUserStore = new class {
message.showExternalImages();
}
this.purgeMessageBodyCacheThrottle();
this.purgeMessageBodyCache();
}
this.messageActiveDom(message.body);
oMessage || this.messageActiveDom(message.body);
this.hideMessageBodies();
oMessage || this.hideMessageBodies();
if (body) {
this.initOpenPgpControls(body, message);
@ -554,7 +554,8 @@ export const MessageUserStore = new class {
this.initBlockquoteSwitcher(body);
}
message.body.hidden = false;
oMessage || (message.body.hidden = false);
oMessage && message.viewPopupMessage();
}
MessageFlagsCache.initMessage(message);
@ -563,8 +564,6 @@ export const MessageUserStore = new class {
}
if (isNew) {
message = this.message();
if (
selectedMessage &&
message &&
@ -613,20 +612,20 @@ export const MessageUserStore = new class {
}
}
populateMessageBody(oMessage) {
populateMessageBody(oMessage, preload) {
if (oMessage) {
this.hideMessageBodies();
this.messageLoading(true);
preload || this.hideMessageBodies();
preload || this.messageLoading(true);
Remote.message((iError, oData, bCached) => {
if (iError) {
if (Notification.RequestAborted !== iError) {
if (Notification.RequestAborted !== iError && !preload) {
this.message(null);
this.messageError(getNotification(iError));
}
} else {
this.setMessage(oData, bCached);
this.setMessage(oData, bCached, preload ? oMessage : null);
}
this.messageLoading(false);
preload || this.messageLoading(false);
}, oMessage.folder, oMessage.uid);
}
}