mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03:00
Don't clone message for viewing, so that there is instant interaction with messagelist item
This commit is contained in:
parent
b7a68a4245
commit
614e6c5756
5 changed files with 47 additions and 83 deletions
|
|
@ -151,9 +151,11 @@ folderInformation = (folder, list) => {
|
||||||
if (!oldHash || unreadCountChange || result.hash !== oldHash) {
|
if (!oldHash || unreadCountChange || result.hash !== oldHash) {
|
||||||
if (folderFromCache.fullName === FolderUserStore.currentFolderFullName()) {
|
if (folderFromCache.fullName === FolderUserStore.currentFolderFullName()) {
|
||||||
MessagelistUserStore.reload();
|
MessagelistUserStore.reload();
|
||||||
|
/*
|
||||||
} else if (getFolderInboxName() === folderFromCache.fullName) {
|
} else if (getFolderInboxName() === folderFromCache.fullName) {
|
||||||
// Remote.messageList(null, {folder: getFolderFromCacheList(getFolderInboxName())}, true);
|
// Remote.messageList(null, {folder: getFolderFromCacheList(getFolderInboxName())}, true);
|
||||||
Remote.messageList(null, {folder: getFolderInboxName()}, true);
|
Remote.messageList(null, {folder: getFolderInboxName()}, true);
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -258,36 +258,23 @@ populateMessageBody = (oMessage, popup) => {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let json = oData?.Result;
|
let json = oData?.Result;
|
||||||
|
if (json
|
||||||
if (
|
&& MessageModel.validJson(json)
|
||||||
json &&
|
&& oMessage.hash === json.hash
|
||||||
MessageModel.validJson(json) &&
|
// && oMessage.folder === json.folder
|
||||||
oMessage.folder === json.folder
|
// && oMessage.uid == json.uid
|
||||||
|
&& oMessage.revivePropertiesFromJson(json)
|
||||||
) {
|
) {
|
||||||
const threads = oMessage.threads(),
|
|
||||||
isNew = !popup && oMessage.uid != json.uid && threads.includes(json.uid),
|
|
||||||
messagesDom = MessageUserStore.bodiesDom();
|
|
||||||
if (isNew) {
|
|
||||||
oMessage = MessageModel.reviveFromJson(json);
|
|
||||||
if (oMessage) {
|
|
||||||
oMessage.threads(threads);
|
|
||||||
MessageFlagsCache.initMessage(oMessage);
|
|
||||||
|
|
||||||
// Set clone
|
|
||||||
oMessage = MessageModel.fromMessageListItem(oMessage);
|
|
||||||
}
|
|
||||||
MessageUserStore.message(oMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (oMessage && oMessage.uid == json.uid) {
|
|
||||||
popup || MessageUserStore.error('');
|
|
||||||
/*
|
/*
|
||||||
if (bCached) {
|
if (bCached) {
|
||||||
delete json.flags;
|
delete json.flags;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
isNew || oMessage.revivePropertiesFromJson(json);
|
if (popup) {
|
||||||
|
oMessage.viewPopupMessage();
|
||||||
|
} else {
|
||||||
|
MessageUserStore.error('');
|
||||||
|
const messagesDom = MessageUserStore.bodiesDom();
|
||||||
if (messagesDom) {
|
if (messagesDom) {
|
||||||
let id = 'rl-msg-' + oMessage.hash.replace(/[^a-zA-Z0-9]/g, ''),
|
let id = 'rl-msg-' + oMessage.hash.replace(/[^a-zA-Z0-9]/g, ''),
|
||||||
body = elementById(id);
|
body = elementById(id);
|
||||||
|
|
@ -313,9 +300,9 @@ populateMessageBody = (oMessage, popup) => {
|
||||||
|
|
||||||
messagesDom.append(body);
|
messagesDom.append(body);
|
||||||
|
|
||||||
popup || (oMessage.body.hidden = false);
|
oMessage.body.hidden = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
popup && oMessage.viewPopupMessage();
|
|
||||||
|
|
||||||
MessageFlagsCache.initMessage(oMessage);
|
MessageFlagsCache.initMessage(oMessage);
|
||||||
if (oMessage.isUnseen()) {
|
if (oMessage.isUnseen()) {
|
||||||
|
|
@ -324,32 +311,6 @@ populateMessageBody = (oMessage, popup) => {
|
||||||
SettingsUserStore.messageReadDelay() * 1000 // seconds
|
SettingsUserStore.messageReadDelay() * 1000 // seconds
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isNew) {
|
|
||||||
let selectedMessage = MessagelistUserStore.selectedMessage();
|
|
||||||
if (
|
|
||||||
selectedMessage &&
|
|
||||||
(oMessage.folder !== selectedMessage.folder || oMessage.uid != selectedMessage.uid)
|
|
||||||
) {
|
|
||||||
MessagelistUserStore.selectedMessage(null);
|
|
||||||
if (1 === MessagelistUserStore.length) {
|
|
||||||
MessagelistUserStore.focusedMessage(null);
|
|
||||||
}
|
|
||||||
} else if (!selectedMessage) {
|
|
||||||
selectedMessage = MessagelistUserStore.find(
|
|
||||||
subMessage =>
|
|
||||||
subMessage &&
|
|
||||||
subMessage.folder === oMessage.folder &&
|
|
||||||
subMessage.uid == oMessage.uid
|
|
||||||
);
|
|
||||||
|
|
||||||
if (selectedMessage) {
|
|
||||||
MessagelistUserStore.selectedMessage(selectedMessage);
|
|
||||||
MessagelistUserStore.focusedMessage(selectedMessage);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
popup || MessageUserStore.loading(false);
|
popup || MessageUserStore.loading(false);
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import { i18n } from 'Common/Translator';
|
||||||
|
|
||||||
import { doc, SettingsGet } from 'Common/Globals';
|
import { doc, SettingsGet } from 'Common/Globals';
|
||||||
import { encodeHtml, plainToHtml, htmlToPlain, cleanHtml } from 'Common/Html';
|
import { encodeHtml, plainToHtml, htmlToPlain, cleanHtml } from 'Common/Html';
|
||||||
import { isFunction, forEachObjectEntry } from 'Common/Utils';
|
import { forEachObjectEntry } from 'Common/Utils';
|
||||||
import { serverRequestRaw, proxy } from 'Common/Links';
|
import { serverRequestRaw, proxy } from 'Common/Links';
|
||||||
import { addObservablesTo, addComputablesTo } from 'External/ko';
|
import { addObservablesTo, addComputablesTo } from 'External/ko';
|
||||||
|
|
||||||
|
|
@ -212,6 +212,7 @@ export class MessageModel extends AbstractModel {
|
||||||
// this.attachments(AttachmentCollectionModel.reviveFromJson(json.attachments, this.foundCIDs));
|
// this.attachments(AttachmentCollectionModel.reviveFromJson(json.attachments, this.foundCIDs));
|
||||||
|
|
||||||
this.computeSenderEmail();
|
this.computeSenderEmail();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -353,9 +354,7 @@ export class MessageModel extends AbstractModel {
|
||||||
);
|
);
|
||||||
sdoc.close();
|
sdoc.close();
|
||||||
|
|
||||||
if (print) {
|
print && setTimeout(() => win.print(), 100);
|
||||||
setTimeout(() => win.print(), 100);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -377,14 +376,12 @@ export class MessageModel extends AbstractModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {MessageModel} message
|
|
||||||
* @returns {MessageModel}
|
* @returns {MessageModel}
|
||||||
*/
|
*//*
|
||||||
static fromMessageListItem(message) {
|
clone() {
|
||||||
let self = new MessageModel();
|
let self = new MessageModel();
|
||||||
if (message) {
|
|
||||||
// Clone message values
|
// Clone message values
|
||||||
forEachObjectEntry(message, (key, value) => {
|
forEachObjectEntry(this, (key, value) => {
|
||||||
if (ko.isObservable(value)) {
|
if (ko.isObservable(value)) {
|
||||||
ko.isComputed(value) || self[key](value());
|
ko.isComputed(value) || self[key](value());
|
||||||
} else if (!isFunction(value)) {
|
} else if (!isFunction(value)) {
|
||||||
|
|
@ -392,9 +389,8 @@ export class MessageModel extends AbstractModel {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
self.computeSenderEmail();
|
self.computeSenderEmail();
|
||||||
}
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
showExternalImages(regex) {
|
showExternalImages(regex) {
|
||||||
const body = this.body;
|
const body = this.body;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
import { AbstractCollectionModel } from 'Model/AbstractCollection';
|
import { AbstractCollectionModel } from 'Model/AbstractCollection';
|
||||||
import { MessageModel } from 'Model/Message';
|
import { MessageModel } from 'Model/Message';
|
||||||
|
import { MessageUserStore } from 'Stores/User/Message';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
MessageFlagsCache
|
MessageFlagsCache
|
||||||
|
|
@ -31,8 +32,11 @@ export class MessageCollectionModel extends AbstractCollectionModel
|
||||||
* @returns {MessageCollectionModel}
|
* @returns {MessageCollectionModel}
|
||||||
*/
|
*/
|
||||||
static reviveFromJson(object, cached) {
|
static reviveFromJson(object, cached) {
|
||||||
|
let msg = MessageUserStore.message();
|
||||||
return super.reviveFromJson(object, message => {
|
return super.reviveFromJson(object, message => {
|
||||||
message = MessageModel.reviveFromJson(message);
|
// If message is currently viewed, use that.
|
||||||
|
// Maybe then use msg.revivePropertiesFromJson(message) ?
|
||||||
|
message = (msg && msg.hash === message.hash) ? msg : MessageModel.reviveFromJson(message);
|
||||||
if (message) {
|
if (message) {
|
||||||
message.deleted(false);
|
message.deleted(false);
|
||||||
cached ? MessageFlagsCache.initMessage(message) : MessageFlagsCache.store(message);
|
cached ? MessageFlagsCache.initMessage(message) : MessageFlagsCache.store(message);
|
||||||
|
|
|
||||||
|
|
@ -235,7 +235,8 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
|
|
||||||
this.selector.on('ItemSelect', message => {
|
this.selector.on('ItemSelect', message => {
|
||||||
if (message) {
|
if (message) {
|
||||||
populateMessageBody(MessageModel.fromMessageListItem(message));
|
// populateMessageBody(message.clone());
|
||||||
|
populateMessageBody(message);
|
||||||
} else {
|
} else {
|
||||||
MessageUserStore.message(null);
|
MessageUserStore.message(null);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue