Speedup messagelist hasCheckedOrSelectedLines

This commit is contained in:
djmaze 2021-02-08 22:04:24 +01:00
parent 57158bd55a
commit 3fa9bc6963
2 changed files with 16 additions and 11 deletions

View file

@ -44,11 +44,10 @@ const
/*eslint-disable max-len*/
url = /(^|[\s\n]|\/?>)(https:\/\/[-A-Z0-9+\u0026\u2019#/%?=()~_|!:,.;]*[-A-Z0-9+\u0026#/%=~()_|])/gi,
email = /(^|[\s\n]|\/?>)((?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x21\x23-\x5b\x5d-\x7f]|\\[\x21\x23-\x5b\x5d-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x21-\x5a\x53-\x7f]|\\[\x21\x23-\x5b\x5d-\x7f])+)\]))/gi,
findEmailAndLinks = html => {
return html
findEmailAndLinks = html => html
.replace(url, '$1<a href="$2" target="_blank">$2</a>')
.replace(email, '$1<a href="mailto:$2">$2</a>');
};
.replace(email, '$1<a href="mailto:$2">$2</a>'),
isChecked = item => item.checked();
let iMessageBodyCacheCount = 0;
@ -137,10 +136,18 @@ class MessageUserStore {
this.isMessageSelected = ko.computed(() => null !== this.message());
this.messageListChecked = ko
.computed(() => this.messageList.filter(item => item.checked()))
.computed(() => this.messageList.filter(isChecked))
.extend({ rateLimit: 0 });
this.hasCheckedMessages = ko.computed(() => 0 < this.messageListChecked().length).extend({ rateLimit: 0 });
this.hasCheckedMessages = ko
.computed(() => !!this.messageList.find(isChecked))
.extend({ rateLimit: 0 });
this.hasCheckedOrSelected = ko
.computed(() => !!(this.selectorMessageSelected()
|| this.selectorMessageFocused()
|| this.messageList.find(item => item.checked())))
.extend({ rateLimit: 50 });
this.messageListCheckedOrSelected = ko.computed(() => {
const checked = this.messageListChecked(),

View file

@ -49,7 +49,7 @@ import { ComposePopupView } from 'View/Popup/Compose';
import { AdvancedSearchPopupView } from 'View/Popup/AdvancedSearch';
const
canBeMovedHelper = (self) => self.canBeMoved(),
canBeMovedHelper = () => MessageStore.hasCheckedOrSelected(),
ifvisible = window.ifvisible;
class MessageListMailBoxUserView extends AbstractViewRight {
@ -158,8 +158,6 @@ class MessageListMailBoxUserView extends AbstractViewRight {
hasMessages: () => 0 < this.messageList.length,
hasCheckedOrSelectedLines: () => 0 < this.messageListCheckedOrSelected().length,
isSpamFolder: () => FolderStore.spamFolder() === this.messageListEndFolder() && FolderStore.spamFolder(),
isSpamDisabled: () => UNUSED_OPTION_VALUE === FolderStore.spamFolder(),
@ -191,7 +189,7 @@ class MessageListMailBoxUserView extends AbstractViewRight {
// this.messageListChecked = MessageStore.messageListChecked;
this.canBeMoved = this.hasCheckedOrSelectedLines;
this.hasCheckedOrSelectedLines = MessageStore.hasCheckedOrSelected,
this.quotaTooltip = this.quotaTooltip.bind(this);
@ -442,7 +440,7 @@ class MessageListMailBoxUserView extends AbstractViewRight {
* @returns {boolean}
*/
moveSelectedMessagesToFolder(sToFolderFullNameRaw, bCopy) {
if (this.canBeMoved()) {
if (MessageStore.hasCheckedOrSelected()) {
rl.app.moveMessagesToFolder(
FolderStore.currentFolderFullNameRaw(),
MessageStore.messageListCheckedOrSelectedUidsWithSubMails(),